CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
magic_xattr.cc
Go to the documentation of this file.
1 
5 #include "magic_xattr.h"
6 
7 #include <cassert>
8 #include <string>
9 #include <vector>
10 
11 #include "catalog_mgr_client.h"
12 #include "crypto/signature.h"
13 #include "fetch.h"
14 #include "mountpoint.h"
15 #include "quota.h"
16 #include "util/logging.h"
17 #include "util/string.h"
18 
20  MountPoint *mountpoint,
21  EVisibility visibility,
22  const std::set<std::string> &protected_xattrs,
23  const std::set<gid_t> &priviledged_xattr_gids)
24  : mount_point_(mountpoint)
25  , visibility_(visibility)
26  , protected_xattrs_(protected_xattrs)
27  , privileged_xattr_gids_(priviledged_xattr_gids)
28  , is_frozen_(false) {
29  Register("user.catalog_counters", new CatalogCountersMagicXattr());
30  Register("user.external_host", new ExternalHostMagicXattr());
31  Register("user.external_timeout", new ExternalTimeoutMagicXattr());
32  Register("user.fqrn", new FqrnMagicXattr());
33  Register("user.host", new HostMagicXattr());
34  Register("user.host_list", new HostListMagicXattr());
35  Register("user.ncleanup24", new NCleanup24MagicXattr());
36  Register("user.nclg", new NClgMagicXattr());
37  Register("user.ndiropen", new NDirOpenMagicXattr());
38  Register("user.ndownload", new NDownloadMagicXattr());
39  Register("user.nioerr", new NIOErrMagicXattr());
40  Register("user.nopen", new NOpenMagicXattr());
41  Register("user.hitrate", new HitrateMagicXattr());
42  Register("user.logbuffer", new LogBufferXattr());
43  Register("user.proxy", new ProxyMagicXattr());
44  Register("user.proxy_list", new ProxyListMagicXattr());
45  Register("user.proxy_list_external", new ProxyListExternalMagicXattr());
46  Register("user.pubkeys", new PubkeysMagicXattr());
47  Register("user.repo_counters", new RepoCountersMagicXattr());
48  Register("user.repo_metainfo", new RepoMetainfoMagicXattr());
49  Register("user.revision", new RevisionMagicXattr());
50  Register("user.root_hash", new RootHashMagicXattr());
51  Register("user.rx", new RxMagicXattr());
52  Register("user.speed", new SpeedMagicXattr());
53  Register("user.tag", new TagMagicXattr());
54  Register("user.timeout", new TimeoutMagicXattr());
55  Register("user.timeout_direct", new TimeoutDirectMagicXattr());
56  Register("user.timestamp_last_ioerr", new TimestampLastIOErrMagicXattr());
57  Register("user.usedfd", new UsedFdMagicXattr());
58  Register("user.useddirp", new UsedDirPMagicXattr());
59  Register("user.version", new VersionMagicXattr());
60 
61  Register("user.hash", new HashMagicXattr());
62  Register("user.lhash", new LHashMagicXattr());
63 
64  Register("user.chunk_list", new ChunkListMagicXattr());
65  Register("user.chunks", new ChunksMagicXattr());
66  Register("user.compression", new CompressionMagicXattr());
67  Register("user.direct_io", new DirectIoMagicXattr());
68  Register("user.external_file", new ExternalFileMagicXattr());
69 
70  Register("user.rawlink", new RawlinkMagicXattr());
71  Register("xfsroot.rawlink", new RawlinkMagicXattr());
72 
73  Register("user.authz", new AuthzMagicXattr());
74  Register("user.external_url", new ExternalURLMagicXattr());
75 }
76 
78  if (visibility() == kVisibilityNever) {
79  return "";
80  }
81  // Only the root entry has an empty name
82  if (visibility() == kVisibilityRootOnly && !dirent->name().IsEmpty()) {
83  return "";
84  }
85 
86  std::string result;
87  std::map<std::string, BaseMagicXattr *>::iterator it = xattr_list_.begin();
88  for (; it != xattr_list_.end(); ++it) {
89  const MagicXattrFlavor flavor = (*it).second->GetXattrFlavor();
90  // Skip those which should not be displayed
91  switch (flavor) {
92  case kXattrBase:
93  break;
94  case kXattrWithHash:
95  if (dirent->checksum().IsNull())
96  continue;
97  break;
98  case kXattrRegular:
99  if (!dirent->IsRegular())
100  continue;
101  break;
102  case kXattrExternal:
103  if (!(dirent->IsRegular() && dirent->IsExternalFile()))
104  continue;
105  break;
106  case kXattrSymlink:
107  if (!dirent->IsLink())
108  continue;
109  break;
110  case kXattrAuthz:
112  continue;
113  break;
114  default:
115  PANIC("unknown magic xattr flavor");
116  }
117  result += (*it).first;
118  result.push_back('\0');
119  }
120 
121  return result;
122 }
123 
125  PathString path,
127  BaseMagicXattr *result;
128  if (xattr_list_.count(name) > 0) {
129  result = xattr_list_[name];
130  } else {
131  return NULL;
132  }
133 
134  result->Lock(path, d);
135 
136  return result;
137 }
138 
139 void MagicXattrManager::Register(const std::string &name,
140  BaseMagicXattr *magic_xattr) {
141  assert(!is_frozen_);
142  if (xattr_list_.count(name) > 0) {
144  "Magic extended attribute with name %s already registered",
145  name.c_str());
146  }
147  magic_xattr->xattr_mgr_ = this;
148  xattr_list_[name] = magic_xattr;
149 
150  // Mark Xattr protected so that only certain fuse_gids' can access it.
151  // If Xattr with registered "name" is part of *protected_xattrs
152  if (protected_xattrs_.count(name) > 0) {
153  magic_xattr->MarkProtected();
154  }
155 }
156 
158  return privileged_xattr_gids_.count(gid) > 0;
159 }
160 
163  if (is_protected_ && !xattr_mgr_->IsPrivilegedGid(gid)) {
164  return false;
165  }
166 
167  return PrepareValueFenced();
168 }
169 
171  std::set<std::string>::const_iterator iter;
172  std::vector<string> tmp;
173  for (iter = protected_xattrs_.begin(); iter != protected_xattrs_.end();
174  iter++) {
175  if (xattr_list_.find(*iter) == xattr_list_.end()) {
176  tmp.push_back(*iter);
177  }
178  }
179 
180  if (tmp.size() > 0) {
181  const std::string msg = JoinStrings(tmp, ",");
183  "Following CVMFS_XATTR_PROTECTED_XATTRS are "
184  "set but not recognized: %s",
185  msg.c_str());
186  }
187 
188  tmp.clear();
189  std::set<gid_t>::const_iterator iter_gid;
190  for (iter_gid = privileged_xattr_gids_.begin();
191  iter_gid != privileged_xattr_gids_.end();
192  iter_gid++) {
193  tmp.push_back(StringifyUint(*iter_gid));
194  }
195 
196  if (tmp.size() > 0) {
197  const std::string msg = JoinStrings(tmp, ",");
199  "Following CVMFS_XATTR_PRIVILEGED_GIDS are set: %s", msg.c_str());
200  }
201 }
202 
203 std::string BaseMagicXattr::HeaderMultipageHuman(uint32_t requested_page) {
204  return "# Access page at idx: " + StringifyUint(requested_page) + ". "
205  + "Total num pages: " + StringifyUint(result_pages_.size())
206  + " (access other pages: xattr~<page_num>, starting "
207  + " with 0; number of pages available: xattr~?)\n";
208 }
209 
210 std::pair<bool, std::string> BaseMagicXattr::GetValue(
211  int32_t requested_page, const MagicXattrMode mode) {
212  assert(requested_page >= -1);
213  result_pages_.clear();
214  FinalizeValue();
215 
216  std::string res = "";
217  if (mode == kXattrMachineMode) {
218  if (requested_page >= static_cast<int32_t>(result_pages_.size())) {
219  return std::pair<bool, std::string>(false, "");
220  }
221  if (requested_page == -1) {
222  return std::pair<bool, std::string>(
223  true, "num_pages, " + StringifyUint(result_pages_.size()));
224  }
225  } else if (mode == kXattrHumanMode) {
226  if (requested_page >= static_cast<int32_t>(result_pages_.size())) {
227  return std::pair<bool, std::string>(
228  true,
229  "Page requested does not exists. There are "
230  + StringifyUint(result_pages_.size()) + " pages available.\n"
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>(
236  true,
237  "Access xattr with xattr~<page_num> (machine-readable mode) or "
238  + std::string(" xattr@<page_num> (human-readable mode).\n")
239  + "Pages available: " + StringifyUint(result_pages_.size()));
240  } else {
241  res = HeaderMultipageHuman(requested_page);
242  }
243  } else {
245  "Unknown mode of magic xattr requested: %d", mode);
246  }
247 
248  res += result_pages_[requested_page];
249 
250  return std::pair<bool, std::string>(true, res);
251 }
252 
255 }
256 
259 }
260 
262 
266  return true;
267 }
268 
270  std::string res;
271  res = "catalog_hash: " + hash_.ToString() + "\n";
272  res += "catalog_mountpoint: " + subcatalog_path_ + "\n";
273  res += counters_.GetCsvMap();
274 
275  result_pages_.push_back(res);
276 }
277 
279  chunk_list_.clear();
280 
281  const std::string header = "hash,offset,size\n";
282  std::string chunk_list_page_(header);
283  if (!dirent_->IsRegular()) {
284  chunk_list_.push_back(chunk_list_page_);
285  return false;
286  }
287  if (dirent_->IsChunkedFile()) {
288  FileChunkList chunks;
290  path_, dirent_->hash_algorithm(), &chunks)
291  || chunks.IsEmpty()) {
293  "file %s is marked as "
294  "'chunked', but no chunks found.",
295  path_.c_str());
296  return false;
297  } else {
298  for (size_t i = 0; i < chunks.size(); ++i) {
299  chunk_list_page_ += chunks.At(i).content_hash().ToString() + ",";
300  chunk_list_page_ += StringifyInt(chunks.At(i).offset()) + ",";
301  chunk_list_page_ += StringifyUint(chunks.At(i).size()) + "\n";
302 
303  if (chunk_list_page_.size() > kMaxCharsPerPage) {
304  chunk_list_.push_back(chunk_list_page_);
305  chunk_list_page_ = header;
306  }
307  }
308  }
309  } else {
310  chunk_list_page_ += dirent_->checksum().ToString() + ",";
311  chunk_list_page_ += "0,";
312  chunk_list_page_ += StringifyUint(dirent_->size()) + "\n";
313  }
314 
315  // add the last page
316  if (chunk_list_page_.size() > header.size()) {
317  chunk_list_.push_back(chunk_list_page_);
318  }
319 
320  return true;
321 }
322 
324 
326  if (!dirent_->IsRegular()) {
327  return false;
328  }
329  if (dirent_->IsChunkedFile()) {
330  FileChunkList chunks;
332  path_, dirent_->hash_algorithm(), &chunks)
333  || chunks.IsEmpty()) {
335  "file %s is marked as "
336  "'chunked', but no chunks found.",
337  path_.c_str());
338  return false;
339  } else {
340  n_chunks_ = chunks.size();
341  }
342  } else {
343  n_chunks_ = 1;
344  }
345 
346  return true;
347 }
348 
351 }
352 
354  return dirent_->IsRegular();
355 }
356 
358  result_pages_.push_back(
360 }
361 
363 
365  result_pages_.push_back(dirent_->IsDirectIo() ? "1" : "0");
366 }
367 
369  return dirent_->IsRegular();
370 }
371 
373  result_pages_.push_back(dirent_->IsExternalFile() ? "1" : "0");
374 }
375 
377  std::vector<string> host_chain;
378  std::vector<int> rtt;
379  unsigned current_host;
381  &host_chain, &rtt, &current_host);
382  if (host_chain.size()) {
383  result_pages_.push_back(std::string(host_chain[current_host]));
384  } else {
385  result_pages_.push_back("internal error: no hosts defined");
386  }
387 }
388 
390  unsigned seconds, seconds_direct;
392  &seconds, &seconds_direct);
393  result_pages_.push_back(StringifyUint(seconds_direct));
394 }
395 
397  result_pages_.push_back(xattr_mgr_->mount_point()->fqrn());
398 }
399 
401  return !dirent_->checksum().IsNull();
402 }
403 
405  result_pages_.push_back(dirent_->checksum().ToString());
406 }
407 
409  std::vector<std::string> host_chain;
410  std::vector<int> rtt;
411  unsigned current_host;
412  xattr_mgr_->mount_point()->download_mgr()->GetHostInfo(&host_chain, &rtt,
413  &current_host);
414  if (host_chain.size()) {
415  result_pages_.push_back(std::string(host_chain[current_host]));
416  } else {
417  result_pages_.push_back("internal error: no hosts defined");
418  }
419 }
420 
422  std::string result;
423  std::vector<std::string> host_chain;
424  std::vector<int> rtt;
425  unsigned current_host;
426  xattr_mgr_->mount_point()->download_mgr()->GetHostInfo(&host_chain, &rtt,
427  &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()];
432  }
433  } else {
434  result = "internal error: no hosts defined";
435  }
436  result_pages_.push_back(result);
437 }
438 
440  return !dirent_->checksum().IsNull();
441 }
442 
444  string result;
445  CacheManager::Label label;
446  label.path = path_.ToString();
449  const int fd = xattr_mgr_->mount_point()->file_system()->cache_mgr()->Open(
451  if (fd < 0) {
452  result = "Not in cache";
453  } else {
455  const int retval_i =
457  fd, &hash);
458  if (retval_i != 0)
459  result = "I/O error (" + StringifyInt(retval_i) + ")";
460  else
461  result = hash.ToString();
463  }
464  result_pages_.push_back(result);
465 }
466 
467 LogBufferXattr::LogBufferXattr() : BaseMagicXattr(), throttle_(1, 500, 2000) { }
468 
471  std::vector<LogBufferEntry> buffer = GetLogBuffer();
472  std::string result;
473  for (std::vector<LogBufferEntry>::reverse_iterator itr = buffer.rbegin();
474  itr != buffer.rend();
475  ++itr) {
476  if (itr->message.size() > kMaxLogLine) {
477  itr->message.resize(kMaxLogLine);
478  itr->message += " <snip>";
479  }
480  result += "[" + StringifyLocalTime(itr->timestamp) + "] " + itr->message
481  + "\n";
482  }
483  result_pages_.push_back(result);
484 }
485 
487  QuotaManager *quota_mgr = xattr_mgr_->mount_point()
488  ->file_system()
489  ->cache_mgr()
490  ->quota_mgr();
492  result_pages_.push_back(StringifyInt(-1));
493  } else {
494  const uint64_t period_s = 24 * 60 * 60;
495  const uint64_t rate = quota_mgr->GetCleanupRate(period_s);
496  result_pages_.push_back(StringifyUint(rate));
497  }
498 }
499 
502  return true;
503 }
504 
507 }
508 
510  result_pages_.push_back(
512 }
513 
516  ->statistics()
517  ->Lookup("fetch.n_downloads")
518  ->Print());
519 }
520 
522  result_pages_.push_back(StringifyInt(
524 }
525 
527  result_pages_.push_back(
529 }
530 
532  const int64_t n_invocations = xattr_mgr_->mount_point()
533  ->statistics()
534  ->Lookup("fetch.n_invocations")
535  ->Get();
536  if (n_invocations == 0) {
537  result_pages_.push_back("n/a");
538  return;
539  }
540 
541  const int64_t n_downloads = xattr_mgr_->mount_point()
542  ->statistics()
543  ->Lookup("fetch.n_downloads")
544  ->Get();
545  const float hitrate = 100. * (1. - (static_cast<float>(n_downloads) /
546  static_cast<float>(n_invocations)));
547  result_pages_.push_back(StringifyDouble(hitrate));
548 }
549 
551  vector<vector<download::DownloadManager::ProxyInfo> > proxy_chain;
552  unsigned current_group;
553  xattr_mgr_->mount_point()->download_mgr()->GetProxyInfo(&proxy_chain,
554  &current_group, NULL);
555  if (proxy_chain.size()) {
556  result_pages_.push_back(proxy_chain[current_group][0].url);
557  } else {
558  result_pages_.push_back("DIRECT");
559  }
560 }
561 
563  std::vector<std::string> *result_pages) {
564  vector<vector<download::DownloadManager::ProxyInfo> > proxy_chain;
565  unsigned current_group;
566  dm->GetProxyInfo(&proxy_chain, &current_group, NULL);
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;
571  buf += "\n";
572  }
573 
574  if (buf.size() > BaseMagicXattr::kMaxCharsPerPage) {
575  result_pages->push_back(buf);
576  buf = "";
577  }
578  }
579 
580  if (buf.size() > 0 || result_pages->size() == 0) {
581  result_pages->push_back(buf);
582  }
583 }
584 
587 }
588 
591 }
592 
595  ->signature_mgr()
597  return true;
598 }
599 
601  size_t full_size = 0;
602 
603  for (size_t i = 0; i < pubkeys_.size(); i++) {
604  full_size += pubkeys_[i].size();
605  }
606 
607  if (full_size == 0) {
608  return;
609  }
610 
611  size_t size_within_page = 0;
612  std::string res = "";
613 
614  for (size_t i = 0; i < pubkeys_.size(); i++) {
615  if (size_within_page + pubkeys_[i].size() >= kMaxCharsPerPage) {
616  result_pages_.push_back(res);
617  res = "";
618  size_within_page = 0;
619  }
620 
621  res += pubkeys_[i];
622  size_within_page += pubkeys_[i].size();
623  }
624  if (res.size() > 0) {
625  result_pages_.push_back(res);
626  }
627 }
628 
630 
632  result_pages_.push_back(dirent_->symlink().ToString());
633 }
634 
637  ->catalog_mgr()
638  ->GetRootCatalog()
639  ->GetCounters();
640  return true;
641 }
642 
644  result_pages_.push_back(counters_.GetCsvMap());
645 }
646 
648 
650  if (!xattr_mgr_->mount_point()->catalog_mgr()->manifest()) {
651  error_reason_ = "manifest not available";
652  return true;
653  }
654 
656  ->catalog_mgr()
657  ->manifest()
658  ->meta_info();
659  if (metainfo_hash_.IsNull()) {
660  error_reason_ = "metainfo not available";
661  return true;
662  }
663  return true;
664 }
665 
667  if (metainfo_hash_.IsNull()) {
668  result_pages_.push_back(error_reason_);
669  return;
670  }
671 
672  CacheManager::Label label;
673  label.path = xattr_mgr_->mount_point()->fqrn() + "("
674  + metainfo_hash_.ToString() + ")";
676  const int fd = xattr_mgr_->mount_point()->fetcher()->Fetch(
678  if (fd < 0) {
679  result_pages_.push_back("Failed to open metadata file");
680  return;
681  }
682  const uint64_t actual_size =
684  if (actual_size > kMaxMetainfoLength) {
686  result_pages_.push_back("Failed to open: metadata file is too big");
687  return;
688  }
689  char buffer[kMaxMetainfoLength];
690  const int64_t bytes_read =
692  fd, buffer, actual_size, 0);
694  if (bytes_read < 0) {
695  result_pages_.push_back("Failed to read metadata file");
696  return;
697  }
698  result_pages_.push_back(string(buffer, buffer + bytes_read));
699 }
700 
703  return true;
704 }
705 
708 }
709 
712  return true;
713 }
714 
716  result_pages_.push_back(root_hash_.ToString());
717 }
718 
721  const int64_t rx = statistics->Lookup("download.sz_transferred_bytes")->Get();
722  result_pages_.push_back(StringifyInt(rx / 1024));
723 }
724 
727  const int64_t rx = statistics->Lookup("download.sz_transferred_bytes")->Get();
728  const int64_t time = statistics->Lookup("download.sz_transfer_time")->Get();
729  if (time == 0) {
730  result_pages_.push_back("n/a");
731  } else {
732  result_pages_.push_back(StringifyInt((1000 * (rx / 1024)) / time));
733  }
734 }
735 
738  return true;
739 }
740 
742 
744  unsigned seconds, seconds_direct;
746  &seconds_direct);
747  result_pages_.push_back(StringifyUint(seconds));
748 }
749 
751  unsigned seconds, seconds_direct;
753  &seconds_direct);
754  result_pages_.push_back(StringifyUint(seconds_direct));
755 }
756 
759  ->file_system()
760  ->io_error_info()
761  ->timestamp_last()));
762 }
763 
765  result_pages_.push_back(
767 }
768 
770  result_pages_.push_back(
772 }
773 
775  result_pages_.push_back(std::string(CVMFS_VERSION) + "."
776  + std::string(CVMFS_PATCH_LEVEL));
777 }
778 
780  std::vector<std::string> host_chain;
781  std::vector<int> rtt;
782  unsigned current_host;
783  if (xattr_mgr_->mount_point()->external_download_mgr() != NULL) {
785  &host_chain, &rtt, &current_host);
786  if (host_chain.size()) {
787  result_pages_.push_back(std::string(host_chain[current_host])
788  + std::string(path_.c_str()));
789  return;
790  }
791  }
792  result_pages_.push_back("");
793 }
794 
796  return dirent_->IsRegular() && dirent_->IsExternalFile();
797 }
std::vector< LogBufferEntry > GetLogBuffer()
Definition: logging.cc:552
std::string ToString()
Definition: statistics.cc:24
const std::set< gid_t > privileged_xattr_gids_
Definition: magic_xattr.h:268
int ChecksumFd(int fd, shash::Any *id)
Definition: cache.cc:37
bool IsExternalFile() const
catalog::Counters LookupCounters(const PathString &path, std::string *subcatalog_path, shash::Any *hash)
const Counters & GetCounters() const
Definition: catalog.h:171
virtual void FinalizeValue()
Definition: magic_xattr.cc:408
bool IsNull() const
Definition: hash.h:371
virtual int64_t GetSize(int fd)=0
FileSystem * file_system()
Definition: mountpoint.h:521
MagicXattrFlavor
Definition: magic_xattr.h:23
Item At(const size_t index) const
Definition: bigvector.h:48
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:278
static void ListProxy(download::DownloadManager *dm, std::vector< std::string > *result_pages)
Definition: magic_xattr.cc:562
bool PrepareValueFencedProtected(gid_t gid)
Definition: magic_xattr.cc:161
virtual void FinalizeValue()
Definition: magic_xattr.cc:589
virtual void FinalizeValue()
Definition: magic_xattr.cc:719
cvmfs::Fetcher * fetcher()
Definition: mountpoint.h:516
std::string subcatalog_path_
Definition: magic_xattr.h:284
virtual void FinalizeValue()
Definition: magic_xattr.cc:743
virtual uint64_t GetCleanupRate(uint64_t period_s)=0
bool IsChunkedFile() const
virtual void FinalizeValue()
Definition: magic_xattr.cc:376
perf::Statistics * statistics()
Definition: mountpoint.h:538
void Register(const std::string &name, BaseMagicXattr *magic_xattr)
Definition: magic_xattr.cc:139
string StringifyLocalTime(const time_t seconds)
Definition: string.cc:125
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:710
static const int kLabelMetainfo
Definition: cache.h:86
std::string Print()
Definition: statistics.cc:25
MountPoint * mount_point()
Definition: magic_xattr.h:257
virtual void FinalizeValue()
Definition: magic_xattr.cc:706
#define PANIC(...)
Definition: exception.h:29
virtual void FinalizeValue()
Definition: magic_xattr.cc:774
uint64_t size() const
string JoinStrings(const vector< string > &strings, const string &joint)
Definition: string.cc:356
std::string ToString(const bool with_suffix=false) const
Definition: hash.h:241
virtual void FinalizeValue()
Definition: magic_xattr.cc:357
std::string fqrn() const
Definition: mountpoint.h:518
virtual void FinalizeValue()
Definition: magic_xattr.cc:779
catalog::Counters counters_
Definition: magic_xattr.h:286
void MarkProtected()
Definition: magic_xattr.h:82
BaseMagicXattr * GetLocked(const std::string &name, PathString path, catalog::DirectoryEntry *d)
Definition: magic_xattr.cc:124
virtual void FinalizeValue()
Definition: magic_xattr.cc:257
const std::set< std::string > protected_xattrs_
Definition: magic_xattr.h:267
virtual void FinalizeValue()
Definition: magic_xattr.cc:550
std::string error_reason_
Definition: magic_xattr.h:435
virtual void FinalizeValue()
Definition: magic_xattr.cc:396
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:795
const shash::Any & content_hash() const
Definition: file_chunk.h:37
shash::Any root_hash_
Definition: magic_xattr.h:449
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:736
virtual void FinalizeValue()
Definition: magic_xattr.cc:741
std::string AlgorithmName(const zlib::Algorithms alg)
Definition: compression.cc:163
assert((mem||(size==0))&&"Out Of Memory")
MountPoint * mount_point_
Definition: cvmfs.cc:131
virtual void FinalizeValue()
Definition: magic_xattr.cc:585
bool IsDirectIo() const
catalog::DirectoryEntry * dirent_
Definition: magic_xattr.h:149
std::vector< std::string > chunk_list_
Definition: magic_xattr.h:297
Algorithms algorithm
Definition: hash.h:122
string StringifyDouble(const double value)
Definition: string.cc:95
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:353
std::string StringifyUint(const uint64_t value)
Definition: string.cc:83
shash::Any checksum() const
bool IsPrivilegedGid(gid_t gid)
Definition: magic_xattr.cc:157
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:263
bool has_membership_req()
Definition: mountpoint.h:523
virtual void FinalizeValue()
Definition: magic_xattr.cc:750
static uint64_t kMaxMetainfoLength
Definition: magic_xattr.h:432
MagicXattrMode
Definition: magic_xattr.h:32
MountPoint * mount_point_
Definition: magic_xattr.h:262
virtual int Open(const LabeledObject &object)=0
perf::Counter * n_fs_open()
Definition: mountpoint.h:226
std::string membership_req()
Definition: mountpoint.h:532
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:500
void Throttle()
Definition: backoff.cc:48
MagicXattrManager * xattr_mgr_
Definition: magic_xattr.h:147
std::string GetListString(catalog::DirectoryEntry *dirent)
Definition: magic_xattr.cc:77
static const uint32_t kMaxCharsPerPage
Definition: magic_xattr.h:135
std::vector< std::string > GetActivePubkeysAsVector() const
Definition: signature.cc:405
Counter * Lookup(const std::string &name) const
Definition: statistics.cc:63
NameString name() const
bool IsLink() const
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:701
virtual void FinalizeValue()
Definition: magic_xattr.cc:389
void GetProxyInfo(std::vector< std::vector< ProxyInfo > > *proxy_chain, unsigned *current_group, unsigned *fallback_group)
Definition: download.cc:2954
virtual void FinalizeValue()
Definition: magic_xattr.cc:600
virtual void FinalizeValue()
Definition: magic_xattr.cc:364
std::string repository_tag()
Definition: mountpoint.h:536
catalog::ClientCatalogManager * catalog_mgr()
Definition: mountpoint.h:507
std::string HeaderMultipageHuman(uint32_t requested_page)
Definition: magic_xattr.cc:203
bool is_frozen() const
Definition: magic_xattr.h:258
bool IsRegular() const
virtual void FinalizeValue()
Definition: magic_xattr.cc:443
virtual void FinalizeValue()
Definition: magic_xattr.cc:666
virtual void FinalizeValue()
Definition: magic_xattr.cc:514
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:635
int Fetch(const CacheManager::LabeledObject &object, const std::string &alt_url="")
Definition: fetch.cc:82
EVisibility visibility()
Definition: magic_xattr.h:255
perf::Counter * no_open_dirs()
Definition: mountpoint.h:236
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:439
off_t offset() const
Definition: file_chunk.h:38
virtual void FinalizeValue()
Definition: magic_xattr.cc:469
virtual void FinalizeValue()
Definition: magic_xattr.cc:769
zlib::Algorithms compression_algorithm() const
CacheManager * cache_mgr()
Definition: mountpoint.h:205
virtual void FinalizeValue()
Definition: magic_xattr.cc:323
virtual void FinalizeValue()
Definition: magic_xattr.cc:715
perf::Counter * no_open_files()
Definition: mountpoint.h:237
virtual void FinalizeValue()
Definition: magic_xattr.cc:764
std::pair< bool, std::string > GetValue(int32_t requested_page, const MagicXattrMode mode)
Definition: magic_xattr.cc:210
LinkString symlink() const
virtual void FinalizeValue()
Definition: magic_xattr.cc:531
IoErrorInfo * io_error_info()
Definition: mountpoint.h:233
const unsigned int kMaxLogLine
Definition: magic_xattr.h:357
download::DownloadManager * download_mgr()
Definition: mountpoint.h:509
virtual void FinalizeValue()
Definition: magic_xattr.cc:643
virtual void FinalizeValue()
Definition: magic_xattr.cc:486
virtual void FinalizeValue()
Definition: magic_xattr.cc:725
virtual void FinalizeValue()
Definition: magic_xattr.cc:269
string StringifyInt(const int64_t value)
Definition: string.cc:77
virtual void FinalizeValue()
Definition: magic_xattr.cc:509
virtual int Close(int fd)=0
virtual void FinalizeValue()
Definition: magic_xattr.cc:526
shash::Algorithms hash_algorithm() const
perf::Counter * n_fs_dir_open()
Definition: mountpoint.h:221
virtual void FinalizeValue()
Definition: magic_xattr.cc:372
virtual void FinalizeValue()
Definition: magic_xattr.cc:421
int64_t Get()
Definition: statistics.h:32
static const int kLabelVolatile
Definition: cache.h:82
CatalogT * GetRootCatalog() const
Definition: catalog_mgr.h:319
std::string tag_
Definition: magic_xattr.h:464
bool IsEmpty() const
Definition: bigvector.h:70
MagicXattrManager(MountPoint *mountpoint, EVisibility visibility, const std::set< std::string > &protected_xattrs, const std::set< gid_t > &privileged_xattr_gids)
Definition: magic_xattr.cc:19
virtual void FinalizeValue()
Definition: magic_xattr.cc:349
shash::Any metainfo_hash_
Definition: magic_xattr.h:434
signature::SignatureManager * signature_mgr()
Definition: mountpoint.h:540
BackoffThrottle throttle_
Definition: magic_xattr.h:361
uint64_t n_chunks_
Definition: magic_xattr.h:301
std::string ToString() const
Definition: shortstring.h:139
QuotaManager * quota_mgr()
Definition: cache.h:191
bool IsEmpty() const
Definition: shortstring.h:137
std::vector< std::string > pubkeys_
Definition: magic_xattr.h:413
PathString path_
Definition: magic_xattr.h:148
bool ListFileChunks(const PathString &path, const shash::Algorithms interpret_hashes_as, FileChunkList *chunks)
virtual void FinalizeValue()
Definition: magic_xattr.h:143
size_t size() const
Definition: file_chunk.h:39
std::map< std::string, BaseMagicXattr * > xattr_list_
Definition: magic_xattr.h:261
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:400
void GetTimeout(unsigned *seconds_proxy, unsigned *seconds_direct)
Definition: download.cc:2184
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:649
virtual void FinalizeValue()
Definition: magic_xattr.cc:404
virtual bool PrepareValueFenced()
Definition: magic_xattr.h:142
catalog::Counters counters_
Definition: magic_xattr.h:425
virtual void FinalizeValue()
Definition: magic_xattr.cc:505
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:593
std::string path
Definition: cache.h:133
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.cc:261
manifest::Manifest * manifest() const
void Lock(PathString path, catalog::DirectoryEntry *dirent)
Definition: magic_xattr.h:121
std::string GetCsvMap() const
const char * c_str() const
Definition: shortstring.h:143
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:325
void GetHostInfo(std::vector< std::string > *host_chain, std::vector< int > *rtt, unsigned *current_host)
Definition: download.cc:2269
static void size_t size
Definition: smalloc.h:54
virtual void FinalizeValue()
Definition: magic_xattr.cc:521
virtual int64_t Pread(int fd, void *buf, uint64_t size, uint64_t offset)=0
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:362
std::vector< std::string > result_pages_
Definition: magic_xattr.h:153
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:368
void SanityCheckProtectedXattrs()
Definition: magic_xattr.cc:170
shash::Any meta_info() const
Definition: manifest.h:132
virtual bool HasCapability(Capabilities capability)=0
size_t size() const
Definition: bigvector.h:117
download::DownloadManager * external_download_mgr()
Definition: mountpoint.h:510
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:253
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)
Definition: logging.cc:545