22 const std::set<std::string> &protected_xattrs,
23 const std::set<gid_t> &priviledged_xattr_gids)
25 , visibility_(visibility)
26 , protected_xattrs_(protected_xattrs)
27 , privileged_xattr_gids_(priviledged_xattr_gids)
87 std::map<std::string, BaseMagicXattr *>::iterator it =
xattr_list_.begin();
115 PANIC(
"unknown magic xattr flavor");
117 result += (*it).first;
118 result.push_back(
'\0');
134 result->
Lock(path, d);
144 "Magic extended attribute with name %s already registered",
171 std::set<std::string>::const_iterator iter;
172 std::vector<string> tmp;
176 tmp.push_back(*iter);
180 if (tmp.size() > 0) {
183 "Following CVMFS_XATTR_PROTECTED_XATTRS are "
184 "set but not recognized: %s",
189 std::set<gid_t>::const_iterator iter_gid;
196 if (tmp.size() > 0) {
199 "Following CVMFS_XATTR_PRIVILEGED_GIDS are set: %s", msg.c_str());
204 return "# Access page at idx: " +
StringifyUint(requested_page) +
". "
206 +
" (access other pages: xattr~<page_num>, starting "
207 +
" with 0; number of pages available: xattr~?)\n";
212 assert(requested_page >= -1);
216 std::string res =
"";
218 if (requested_page >= static_cast<int32_t>(
result_pages_.size())) {
219 return std::pair<bool, std::string>(
false,
"");
221 if (requested_page == -1) {
222 return std::pair<bool, std::string>(
226 if (requested_page >= static_cast<int32_t>(
result_pages_.size())) {
227 return std::pair<bool, std::string>(
229 "Page requested does not exists. There are "
231 +
"Access them with xattr~<page_num> (machine-readable mode) "
232 +
"or xattr@<page_num> (human-readable mode).\n"
233 +
"Use xattr@? or xattr~? to get extra info about the attribute");
234 }
else if (requested_page == -1) {
235 return std::pair<bool, std::string>(
237 "Access xattr with xattr~<page_num> (machine-readable mode) or "
238 + std::string(
" xattr@<page_num> (human-readable mode).\n")
245 "Unknown mode of magic xattr requested: %d", mode);
250 return std::pair<bool, std::string>(
true, res);
281 const std::string header =
"hash,offset,size\n";
282 std::string chunk_list_page_(header);
293 "file %s is marked as "
294 "'chunked', but no chunks found.",
298 for (
size_t i = 0; i < chunks.
size(); ++i) {
305 chunk_list_page_ = header;
311 chunk_list_page_ +=
"0,";
316 if (chunk_list_page_.size() > header.size()) {
335 "file %s is marked as "
336 "'chunked', but no chunks found.",
377 std::vector<string> host_chain;
378 std::vector<int> rtt;
379 unsigned current_host;
381 &host_chain, &rtt, ¤t_host);
382 if (host_chain.size()) {
383 result_pages_.push_back(std::string(host_chain[current_host]));
390 unsigned seconds, seconds_direct;
392 &seconds, &seconds_direct);
409 std::vector<std::string> host_chain;
410 std::vector<int> rtt;
411 unsigned current_host;
414 if (host_chain.size()) {
415 result_pages_.push_back(std::string(host_chain[current_host]));
423 std::vector<std::string> host_chain;
424 std::vector<int> rtt;
425 unsigned current_host;
428 if (host_chain.size()) {
429 result = host_chain[current_host];
430 for (
unsigned i = 1; i < host_chain.size(); ++i) {
431 result +=
";" + host_chain[(i + current_host) % host_chain.size()];
434 result =
"internal error: no hosts defined";
452 result =
"Not in cache";
461 result = hash.ToString();
473 for (std::vector<LogBufferEntry>::reverse_iterator itr = buffer.rbegin();
474 itr != buffer.rend();
478 itr->message +=
" <snip>";
494 const uint64_t period_s = 24 * 60 * 60;
517 ->
Lookup(
"fetch.n_downloads")
534 ->
Lookup(
"fetch.n_invocations")
536 if (n_invocations == 0) {
543 ->
Lookup(
"fetch.n_downloads")
545 const float hitrate = 100. * (1. - (
static_cast<float>(n_downloads) /
546 static_cast<float>(n_invocations)));
551 vector<vector<download::DownloadManager::ProxyInfo> > proxy_chain;
552 unsigned current_group;
554 ¤t_group, NULL);
555 if (proxy_chain.size()) {
563 std::vector<std::string> *result_pages) {
564 vector<vector<download::DownloadManager::ProxyInfo> > proxy_chain;
565 unsigned current_group;
567 std::string buf =
"";
568 for (
unsigned int i = 0; i < proxy_chain.size(); i++) {
569 for (
unsigned int j = 0; j < proxy_chain[i].size(); j++) {
570 buf += proxy_chain[i][j].url;
575 result_pages->push_back(buf);
580 if (buf.size() > 0 || result_pages->size() == 0) {
581 result_pages->push_back(buf);
601 size_t full_size = 0;
603 for (
size_t i = 0; i <
pubkeys_.size(); i++) {
607 if (full_size == 0) {
611 size_t size_within_page = 0;
612 std::string res =
"";
614 for (
size_t i = 0; i <
pubkeys_.size(); i++) {
618 size_within_page = 0;
622 size_within_page +=
pubkeys_[i].size();
624 if (res.size() > 0) {
682 const uint64_t actual_size =
686 result_pages_.push_back(
"Failed to open: metadata file is too big");
690 const int64_t bytes_read =
692 fd, buffer, actual_size, 0);
694 if (bytes_read < 0) {
698 result_pages_.push_back(
string(buffer, buffer + bytes_read));
721 const int64_t rx = statistics->
Lookup(
"download.sz_transferred_bytes")->
Get();
727 const int64_t rx = statistics->
Lookup(
"download.sz_transferred_bytes")->
Get();
728 const int64_t time = statistics->
Lookup(
"download.sz_transfer_time")->
Get();
744 unsigned seconds, seconds_direct;
751 unsigned seconds, seconds_direct;
776 + std::string(CVMFS_PATCH_LEVEL));
780 std::vector<std::string> host_chain;
781 std::vector<int> rtt;
782 unsigned current_host;
785 &host_chain, &rtt, ¤t_host);
786 if (host_chain.size()) {
787 result_pages_.push_back(std::string(host_chain[current_host])
std::vector< LogBufferEntry > GetLogBuffer()
const std::set< gid_t > privileged_xattr_gids_
int ChecksumFd(int fd, shash::Any *id)
bool IsExternalFile() const
catalog::Counters LookupCounters(const PathString &path, std::string *subcatalog_path, shash::Any *hash)
const Counters & GetCounters() const
virtual void FinalizeValue()
virtual int64_t GetSize(int fd)=0
FileSystem * file_system()
Item At(const size_t index) const
virtual bool PrepareValueFenced()
static void ListProxy(download::DownloadManager *dm, std::vector< std::string > *result_pages)
bool PrepareValueFencedProtected(gid_t gid)
virtual void FinalizeValue()
virtual void FinalizeValue()
cvmfs::Fetcher * fetcher()
std::string subcatalog_path_
virtual void FinalizeValue()
virtual uint64_t GetCleanupRate(uint64_t period_s)=0
bool IsChunkedFile() const
virtual void FinalizeValue()
perf::Statistics * statistics()
void Register(const std::string &name, BaseMagicXattr *magic_xattr)
string StringifyLocalTime(const time_t seconds)
virtual bool PrepareValueFenced()
bool volatile_flag() const
static const int kLabelMetainfo
MountPoint * mount_point()
virtual void FinalizeValue()
virtual void FinalizeValue()
string JoinStrings(const vector< string > &strings, const string &joint)
std::string ToString(const bool with_suffix=false) const
virtual void FinalizeValue()
virtual void FinalizeValue()
catalog::Counters counters_
virtual void FinalizeValue()
BaseMagicXattr * GetLocked(const std::string &name, PathString path, catalog::DirectoryEntry *d)
virtual void FinalizeValue()
const std::set< std::string > protected_xattrs_
virtual void FinalizeValue()
virtual void FinalizeValue()
virtual bool PrepareValueFenced()
const shash::Any & content_hash() const
virtual bool PrepareValueFenced()
virtual void FinalizeValue()
std::string AlgorithmName(const zlib::Algorithms alg)
assert((mem||(size==0))&&"Out Of Memory")
MountPoint * mount_point_
virtual void FinalizeValue()
catalog::DirectoryEntry * dirent_
std::vector< std::string > chunk_list_
string StringifyDouble(const double value)
virtual bool PrepareValueFenced()
std::string StringifyUint(const uint64_t value)
shash::Any checksum() const
bool IsPrivilegedGid(gid_t gid)
virtual bool PrepareValueFenced()
bool has_membership_req()
virtual void FinalizeValue()
MountPoint * mount_point_
virtual int Open(const LabeledObject &object)=0
perf::Counter * n_fs_open()
std::string membership_req()
virtual bool PrepareValueFenced()
MagicXattrManager * xattr_mgr_
std::string GetListString(catalog::DirectoryEntry *dirent)
static const uint32_t kMaxCharsPerPage
std::vector< std::string > GetActivePubkeysAsVector() const
Counter * Lookup(const std::string &name) const
virtual bool PrepareValueFenced()
virtual void FinalizeValue()
void GetProxyInfo(std::vector< std::vector< ProxyInfo > > *proxy_chain, unsigned *current_group, unsigned *fallback_group)
virtual void FinalizeValue()
virtual void FinalizeValue()
std::string repository_tag()
catalog::ClientCatalogManager * catalog_mgr()
std::string HeaderMultipageHuman(uint32_t requested_page)
virtual void FinalizeValue()
virtual void FinalizeValue()
virtual bool PrepareValueFenced()
int Fetch(const CacheManager::LabeledObject &object, const std::string &alt_url="")
perf::Counter * no_open_dirs()
virtual bool PrepareValueFenced()
virtual void FinalizeValue()
virtual void FinalizeValue()
zlib::Algorithms compression_algorithm() const
CacheManager * cache_mgr()
virtual void FinalizeValue()
virtual void FinalizeValue()
virtual void FinalizeValue()
perf::Counter * no_open_files()
virtual void FinalizeValue()
std::pair< bool, std::string > GetValue(int32_t requested_page, const MagicXattrMode mode)
LinkString symlink() const
virtual void FinalizeValue()
IoErrorInfo * io_error_info()
const unsigned int kMaxLogLine
download::DownloadManager * download_mgr()
virtual void FinalizeValue()
virtual void FinalizeValue()
virtual void FinalizeValue()
virtual void FinalizeValue()
string StringifyInt(const int64_t value)
virtual void FinalizeValue()
virtual int Close(int fd)=0
virtual void FinalizeValue()
shash::Algorithms hash_algorithm() const
perf::Counter * n_fs_dir_open()
virtual void FinalizeValue()
virtual void FinalizeValue()
static const int kLabelVolatile
CatalogT * GetRootCatalog() const
MagicXattrManager(MountPoint *mountpoint, EVisibility visibility, const std::set< std::string > &protected_xattrs, const std::set< gid_t > &privileged_xattr_gids)
virtual void FinalizeValue()
signature::SignatureManager * signature_mgr()
BackoffThrottle throttle_
std::string ToString() const
QuotaManager * quota_mgr()
uint64_t GetRevision() const
std::vector< std::string > pubkeys_
int GetNumCatalogs() const
bool ListFileChunks(const PathString &path, const shash::Algorithms interpret_hashes_as, FileChunkList *chunks)
virtual void FinalizeValue()
virtual bool PrepareValueFenced()
std::map< std::string, BaseMagicXattr * > xattr_list_
virtual bool PrepareValueFenced()
void GetTimeout(unsigned *seconds_proxy, unsigned *seconds_direct)
virtual void FinalizeValue()
virtual bool PrepareValueFenced()
catalog::Counters counters_
virtual void FinalizeValue()
virtual bool PrepareValueFenced()
virtual MagicXattrFlavor GetXattrFlavor()
manifest::Manifest * manifest() const
void Lock(PathString path, catalog::DirectoryEntry *dirent)
std::string GetCsvMap() const
const char * c_str() const
virtual bool PrepareValueFenced()
void GetHostInfo(std::vector< std::string > *host_chain, std::vector< int > *rtt, unsigned *current_host)
virtual void FinalizeValue()
virtual int64_t Pread(int fd, void *buf, uint64_t size, uint64_t offset)=0
virtual bool PrepareValueFenced()
std::vector< std::string > result_pages_
virtual bool PrepareValueFenced()
void SanityCheckProtectedXattrs()
shash::Any meta_info() const
virtual bool HasCapability(Capabilities capability)=0
download::DownloadManager * external_download_mgr()
virtual bool PrepareValueFenced()
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)