CernVM-FS  2.10.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  EVisibility visibility)
21  : mount_point_(mountpoint),
22  visibility_(visibility)
23 {
24  Register("user.catalog_counters", new CatalogCountersMagicXattr());
25  Register("user.external_host", new ExternalHostMagicXattr());
26  Register("user.external_timeout", new ExternalTimeoutMagicXattr());
27  Register("user.fqrn", new FqrnMagicXattr());
28  Register("user.host", new HostMagicXattr());
29  Register("user.host_list", new HostListMagicXattr());
30  Register("user.ncleanup24", new NCleanup24MagicXattr());
31  Register("user.nclg", new NClgMagicXattr());
32  Register("user.ndiropen", new NDirOpenMagicXattr());
33  Register("user.ndownload", new NDownloadMagicXattr());
34  Register("user.nioerr", new NIOErrMagicXattr());
35  Register("user.nopen", new NOpenMagicXattr());
36  Register("user.hitrate", new HitrateMagicXattr());
37  Register("user.logbuffer", new LogBufferXattr());
38  Register("user.proxy", new ProxyMagicXattr());
39  Register("user.pubkeys", new PubkeysMagicXattr());
40  Register("user.repo_counters", new RepoCountersMagicXattr());
41  Register("user.repo_metainfo", new RepoMetainfoMagicXattr());
42  Register("user.revision", new RevisionMagicXattr());
43  Register("user.root_hash", new RootHashMagicXattr());
44  Register("user.rx", new RxMagicXattr());
45  Register("user.speed", new SpeedMagicXattr());
46  Register("user.tag", new TagMagicXattr());
47  Register("user.timeout", new TimeoutMagicXattr());
48  Register("user.timeout_direct", new TimeoutDirectMagicXattr());
49  Register("user.timestamp_last_ioerr", new TimestampLastIOErrMagicXattr());
50  Register("user.usedfd", new UsedFdMagicXattr());
51  Register("user.useddirp", new UsedDirPMagicXattr());
52  Register("user.version", new VersionMagicXattr());
53 
54  Register("user.hash", new HashMagicXattr());
55  Register("user.lhash", new LHashMagicXattr());
56 
57  Register("user.chunk_list", new ChunkListMagicXattr());
58  Register("user.chunks", new ChunksMagicXattr());
59  Register("user.compression", new CompressionMagicXattr());
60  Register("user.direct_io", new DirectIoMagicXattr());
61  Register("user.external_file", new ExternalFileMagicXattr());
62 
63  Register("user.rawlink", new RawlinkMagicXattr());
64  Register("xfsroot.rawlink", new RawlinkMagicXattr());
65 
66  Register("user.authz", new AuthzMagicXattr());
67 }
68 
70  if (visibility() == kVisibilityNever) {
71  return "";
72  }
73  // Only the root entry has an empty name
74  if (visibility() == kVisibilityRootOnly && !dirent->name().IsEmpty()) {
75  return "";
76  }
77 
78  std::string result;
79  std::map<std::string, BaseMagicXattr *>::iterator it = xattr_list_.begin();
80  for (; it != xattr_list_.end(); ++it) {
81  MagicXattrFlavor flavor = (*it).second->GetXattrFlavor();
82  // Skip those which should not be displayed
83  switch (flavor) {
84  case kXattrBase:
85  break;
86  case kXattrWithHash:
87  if (dirent->checksum().IsNull()) continue;
88  break;
89  case kXattrRegular:
90  if (!dirent->IsRegular()) continue;
91  break;
92  case kXattrSymlink:
93  if (!dirent->IsLink()) continue;
94  break;
95  case kXattrAuthz:
96  if (!mount_point_->has_membership_req()) continue;
97  break;
98  default:
99  PANIC("unknown magic xattr flavor");
100  }
101  result += (*it).first;
102  result.push_back('\0');
103  }
104 
105  return result;
106 }
107 
109  PathString path,
111 {
112  BaseMagicXattr *result;
113  if (xattr_list_.count(name) > 0) {
114  result = xattr_list_[name];
115  } else {
116  return NULL;
117  }
118 
119  result->Lock(path, d);
120 
121  return result;
122 }
123 
124 void MagicXattrManager::Register(const std::string &name,
125  BaseMagicXattr *magic_xattr)
126 {
127  if (xattr_list_.count(name) > 0) {
129  "Magic extended attribute with name %s already registered",
130  name.c_str());
131  }
132  magic_xattr->mount_point_ = mount_point_;
133  xattr_list_[name] = magic_xattr;
134 }
135 
138 }
139 
141  return mount_point_->membership_req();
142 }
143 
145  return kXattrAuthz;
146 }
147 
149  counters_ =
151  LookupCounters(path_, &subcatalog_path_, &hash_);
152  return true;
153 }
154 
156  std::string res;
157  res = "catalog_hash: " + hash_.ToString() + "\n";
158  res += "catalog_mountpoint: " + subcatalog_path_ + "\n";
159  res += counters_.GetCsvMap();
160  return res;
161 }
162 
164  chunk_list_ = "hash,offset,size\n";
165  if (!dirent_->IsRegular()) {
166  return false;
167  }
168  if (dirent_->IsChunkedFile()) {
169  FileChunkList chunks;
170  if (!mount_point_->catalog_mgr()
172  || chunks.IsEmpty())
173  {
174  LogCvmfs(kLogCvmfs, kLogDebug | kLogSyslogErr, "file %s is marked as "
175  "'chunked', but no chunks found.", path_.c_str());
176  return false;
177  } else {
178  for (size_t i = 0; i < chunks.size(); ++i) {
179  chunk_list_ += chunks.At(i).content_hash().ToString() + ",";
180  chunk_list_ += StringifyInt(chunks.At(i).offset()) + ",";
181  chunk_list_ += StringifyUint(chunks.At(i).size()) + "\n";
182  }
183  }
184  } else {
185  chunk_list_ += dirent_->checksum().ToString() + ",";
186  chunk_list_ += "0,";
187  chunk_list_ += StringifyUint(dirent_->size()) + "\n";
188  }
189  return true;
190 }
191 
193  return chunk_list_;
194 }
195 
197  if (!dirent_->IsRegular()) {
198  return false;
199  }
200  if (dirent_->IsChunkedFile()) {
201  FileChunkList chunks;
202  if (!mount_point_->catalog_mgr()
204  || chunks.IsEmpty())
205  {
206  LogCvmfs(kLogCvmfs, kLogDebug | kLogSyslogErr, "file %s is marked as "
207  "'chunked', but no chunks found.", path_.c_str());
208  return false;
209  } else {
210  n_chunks_ = chunks.size();
211  }
212  } else {
213  n_chunks_ = 1;
214  }
215 
216  return true;
217 }
218 
220  return StringifyUint(n_chunks_);
221 }
222 
224  return dirent_->IsRegular();
225 }
226 
229 }
230 
232  return dirent_->IsRegular();
233 }
234 
236  return dirent_->IsDirectIo() ? "1" : "0";
237 }
238 
240  return dirent_->IsRegular();
241 }
242 
244  return dirent_->IsExternalFile() ? "1" : "0";
245 }
246 
248  std::vector<string> host_chain;
249  std::vector<int> rtt;
250  unsigned current_host;
252  &host_chain, &rtt, &current_host);
253  if (host_chain.size()) {
254  return std::string(host_chain[current_host]);
255  } else {
256  return "internal error: no hosts defined";
257  }
258 }
259 
261  unsigned seconds, seconds_direct;
262  mount_point_->external_download_mgr()->GetTimeout(&seconds, &seconds_direct);
263  return StringifyUint(seconds_direct);
264 }
265 
267  return mount_point_->fqrn();
268 }
269 
271  return !dirent_->checksum().IsNull();
272 }
273 
275  return dirent_->checksum().ToString();
276 }
277 
279  std::vector<std::string> host_chain;
280  std::vector<int> rtt;
281  unsigned current_host;
282  mount_point_->download_mgr()->GetHostInfo(&host_chain, &rtt, &current_host);
283  if (host_chain.size()) {
284  return std::string(host_chain[current_host]);
285  } else {
286  return "internal error: no hosts defined";
287  }
288 }
289 
291  std::string result;
292  std::vector<std::string> host_chain;
293  std::vector<int> rtt;
294  unsigned current_host;
295  mount_point_->download_mgr()->GetHostInfo(&host_chain, &rtt, &current_host);
296  if (host_chain.size()) {
297  result = host_chain[current_host];
298  for (unsigned i = 1; i < host_chain.size(); ++i) {
299  result +=
300  ";" + host_chain[(i+current_host) % host_chain.size()];
301  }
302  } else {
303  result = "internal error: no hosts defined";
304  }
305  return result;
306 }
307 
309  return !dirent_->checksum().IsNull();
310 }
311 
313  string result;
314  CacheManager::ObjectInfo object_info;
315  object_info.description = path_.ToString();
317  object_info.type = CacheManager::kTypeVolatile;
318  int fd = mount_point_->file_system()->cache_mgr()->Open(
319  CacheManager::Bless(dirent_->checksum(), object_info));
320  if (fd < 0) {
321  result = "Not in cache";
322  } else {
324  int retval_i =
325  mount_point_->file_system()->cache_mgr()->ChecksumFd(fd, &hash);
326  if (retval_i != 0)
327  result = "I/O error (" + StringifyInt(retval_i) + ")";
328  else
329  result = hash.ToString();
331  }
332  return result;
333 }
334 
335 LogBufferXattr::LogBufferXattr() : BaseMagicXattr(), throttle_(1, 500, 2000) { }
336 
339  std::vector<LogBufferEntry> buffer = GetLogBuffer();
340  std::string result;
341  for (unsigned i = 0; i < buffer.size(); ++i) {
342  result += "[" + StringifyTime(buffer[i].timestamp, true /* UTC */) +
343  " UTC] " + buffer[i].message + "\n";
344  }
345  return result;
346 }
347 
349  QuotaManager *quota_mgr =
352  return StringifyInt(-1);
353  } else {
354  const uint64_t period_s = 24 * 60 * 60;
355  const uint64_t rate = quota_mgr->GetCleanupRate(period_s);
356  return StringifyInt(rate);
357  }
358 }
359 
362  return true;
363 }
364 
366  return StringifyInt(n_catalogs_);
367 }
368 
371 }
372 
374  return mount_point_->statistics()->Lookup("fetch.n_downloads")->Print();
375 }
376 
379 }
380 
382  return mount_point_->file_system()->n_fs_open()->ToString();
383 }
384 
386  int64_t n_invocations =
387  mount_point_->statistics()->Lookup("fetch.n_invocations")->Get();
388  if (n_invocations == 0)
389  return "n/a";
390 
391  int64_t n_downloads =
392  mount_point_->statistics()->Lookup("fetch.n_downloads")->Get();
393  float hitrate = 100. * (1. -
394  (static_cast<float>(n_downloads) / static_cast<float>(n_invocations)));
395  return StringifyDouble(hitrate);
396 }
397 
399  vector< vector<download::DownloadManager::ProxyInfo> > proxy_chain;
400  unsigned current_group;
402  &proxy_chain, &current_group, NULL);
403  if (proxy_chain.size()) {
404  return proxy_chain[current_group][0].url;
405  } else {
406  return "DIRECT";
407  }
408 }
409 
412  return true;
413 }
414 
416  return pubkeys_;
417 }
418 
420  return dirent_->IsLink();
421 }
422 
424  return dirent_->symlink().ToString();
425 }
426 
429  return true;
430 }
431 
433  return counters_.GetCsvMap();
434 }
435 
437 
439  if (!mount_point_->catalog_mgr()->manifest()) {
440  error_reason_ = "manifest not available";
441  return true;
442  }
443 
445  if (metainfo_hash_.IsNull()) {
446  error_reason_ = "metainfo not available";
447  return true;
448  }
449  return true;
450 }
451 
453  if (metainfo_hash_.IsNull()) {
454  return error_reason_;
455  }
456 
457  int fd = mount_point_->fetcher()->
459  "metainfo (" + metainfo_hash_.ToString() + ")",
461  if (fd < 0) {
462  return "Failed to open metadata file";
463  }
464  uint64_t actual_size = mount_point_->file_system()->cache_mgr()->GetSize(fd);
465  if (actual_size > kMaxMetainfoLength) {
467  return "Failed to open: metadata file is too big";
468  }
469  char buffer[kMaxMetainfoLength];
470  int bytes_read =
471  mount_point_->file_system()->cache_mgr()->Pread(fd, buffer, actual_size, 0);
473  if (bytes_read < 0) {
474  return "Failed to read metadata file";
475  }
476  return string(buffer, buffer + bytes_read);
477 }
478 
481  return true;
482 }
483 
485  return StringifyUint(revision_);
486 }
487 
490  return true;
491 }
492 
494  return root_hash_.ToString();
495 }
496 
497 std::string RxMagicXattr::GetValue() {
498  perf::Statistics *statistics = mount_point_->statistics();
499  int64_t rx = statistics->Lookup("download.sz_transferred_bytes")->Get();
500  return StringifyInt(rx/1024);
501 }
502 
504  perf::Statistics *statistics = mount_point_->statistics();
505  int64_t rx = statistics->Lookup("download.sz_transferred_bytes")->Get();
506  int64_t time = statistics->Lookup("download.sz_transfer_time")->Get();
507  if (time == 0)
508  return "n/a";
509  else
510  return StringifyInt((1000 * (rx/1024))/time);
511 }
512 
515  return true;
516 }
517 
518 std::string TagMagicXattr::GetValue() {
519  return tag_;
520 }
521 
523  unsigned seconds, seconds_direct;
524  mount_point_->download_mgr()->GetTimeout(&seconds, &seconds_direct);
525  return StringifyUint(seconds);
526 }
527 
529  unsigned seconds, seconds_direct;
530  mount_point_->download_mgr()->GetTimeout(&seconds, &seconds_direct);
531  return StringifyUint(seconds_direct);
532 }
533 
535  return StringifyInt(
537 }
538 
541 }
542 
545 }
546 
548  return std::string(VERSION) + "." + std::string(CVMFS_PATCH_LEVEL);
549 }
std::vector< LogBufferEntry > GetLogBuffer()
Definition: logging.cc:530
#define LogCvmfs(source, mask,...)
Definition: logging.h:22
std::string ToString()
Definition: statistics.cc:24
int ChecksumFd(int fd, shash::Any *id)
Definition: cache.cc:39
virtual std::string GetValue()
Definition: magic_xattr.cc:348
bool IsExternalFile() const
const Counters & GetCounters() const
Definition: catalog.h:175
bool IsNull() const
Definition: hash.h:383
virtual int64_t GetSize(int fd)=0
FileSystem * file_system()
Definition: mountpoint.h:447
MagicXattrFlavor
Definition: magic_xattr.h:20
Item At(const size_t index) const
Definition: bigvector.h:50
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:163
virtual std::string GetValue()
Definition: magic_xattr.cc:497
cvmfs::Fetcher * fetcher()
Definition: mountpoint.h:443
std::string subcatalog_path_
Definition: magic_xattr.h:169
virtual uint64_t GetCleanupRate(uint64_t period_s)=0
bool IsChunkedFile() const
perf::Statistics * statistics()
Definition: mountpoint.h:464
void Register(const std::string &name, BaseMagicXattr *magic_xattr)
Definition: magic_xattr.cc:124
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:488
std::string Print()
Definition: statistics.cc:25
#define PANIC(...)
Definition: exception.h:27
virtual std::string GetValue()
Definition: magic_xattr.cc:155
uint64_t size() const
std::string ToString(const bool with_suffix=false) const
Definition: hash.h:249
virtual std::string GetValue()
Definition: magic_xattr.cc:503
virtual std::string GetValue()
Definition: magic_xattr.cc:247
std::string fqrn() const
Definition: mountpoint.h:445
catalog::Counters counters_
Definition: magic_xattr.h:171
BaseMagicXattr * GetLocked(const std::string &name, PathString path, catalog::DirectoryEntry *d)
Definition: magic_xattr.cc:108
virtual std::string GetValue()
Definition: magic_xattr.cc:522
std::string error_reason_
Definition: magic_xattr.h:307
virtual std::string GetValue()
Definition: magic_xattr.cc:432
const shash::Any & content_hash() const
Definition: file_chunk.h:41
shash::Any root_hash_
Definition: magic_xattr.h:321
virtual std::string GetValue()
Definition: magic_xattr.cc:260
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:513
std::string AlgorithmName(const zlib::Algorithms alg)
Definition: compression.cc:158
MountPoint * mount_point_
Definition: cvmfs.cc:122
virtual std::string GetValue()
Definition: magic_xattr.cc:543
bool IsDirectIo() const
catalog::DirectoryEntry * dirent_
Definition: magic_xattr.h:79
Algorithms algorithm
Definition: hash.h:125
virtual std::string GetValue()
Definition: magic_xattr.cc:219
virtual int Open(const BlessedObject &object)=0
string StringifyTime(const time_t seconds, const bool utc)
Definition: string.cc:105
string StringifyDouble(const double value)
Definition: string.cc:96
virtual std::string GetValue()
Definition: magic_xattr.cc:290
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:223
std::string StringifyUint(const uint64_t value)
Definition: string.cc:84
virtual std::string GetValue()
Definition: magic_xattr.cc:312
shash::Any checksum() const
MountPoint * mount_point_
Definition: magic_xattr.h:77
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:148
bool has_membership_req()
Definition: mountpoint.h:449
std::string description
Definition: cache.h:97
std::string chunk_list_
Definition: magic_xattr.h:178
virtual std::string GetValue()
Definition: magic_xattr.cc:140
static uint64_t kMaxMetainfoLength
Definition: magic_xattr.h:304
MagicXattrManager(MountPoint *mountpoint, EVisibility visibility)
Definition: magic_xattr.cc:19
MountPoint * mount_point_
Definition: magic_xattr.h:158
virtual std::string GetValue()
Definition: magic_xattr.cc:385
perf::Counter * n_fs_open()
Definition: mountpoint.h:216
virtual std::string GetValue()
Definition: magic_xattr.cc:337
std::string membership_req()
Definition: mountpoint.h:458
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:360
void Throttle()
Definition: backoff.cc:50
std::string GetListString(catalog::DirectoryEntry *dirent)
Definition: magic_xattr.cc:69
virtual std::string GetValue()
Definition: magic_xattr.cc:243
std::string GetActivePubkeys() const
Definition: signature.cc:393
Counter * Lookup(const std::string &name) const
Definition: statistics.cc:62
NameString name() const
virtual std::string GetValue()
Definition: magic_xattr.cc:484
bool IsLink() const
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:479
void GetProxyInfo(std::vector< std::vector< ProxyInfo > > *proxy_chain, unsigned *current_group, unsigned *fallback_group)
Definition: download.cc:2562
std::string repository_tag()
Definition: mountpoint.h:462
catalog::ClientCatalogManager * catalog_mgr()
Definition: mountpoint.h:434
bool IsRegular() const
virtual std::string GetValue()
Definition: magic_xattr.cc:518
virtual std::string GetValue()
Definition: magic_xattr.cc:266
ObjectType type
Definition: cache.h:93
virtual std::string GetValue()
Definition: magic_xattr.cc:381
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:427
EVisibility visibility()
Definition: magic_xattr.h:154
perf::Counter * no_open_dirs()
Definition: mountpoint.h:224
virtual std::string GetValue()
Definition: magic_xattr.cc:539
Failures Fetch(const std::string &base_url, const std::string &repository_name, const uint64_t minimum_timestamp, const shash::Any *base_catalog, signature::SignatureManager *signature_manager, download::DownloadManager *download_manager, ManifestEnsemble *ensemble)
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:308
off_t offset() const
Definition: file_chunk.h:42
zlib::Algorithms compression_algorithm() const
CacheManager * cache_mgr()
Definition: mountpoint.h:195
perf::Counter * no_open_files()
Definition: mountpoint.h:225
virtual std::string GetValue()
Definition: magic_xattr.cc:274
LinkString symlink() const
IoErrorInfo * io_error_info()
Definition: mountpoint.h:221
download::DownloadManager * download_mgr()
Definition: mountpoint.h:436
virtual std::string GetValue()
Definition: magic_xattr.cc:547
virtual std::string GetValue()
Definition: magic_xattr.cc:493
string StringifyInt(const int64_t value)
Definition: string.cc:78
virtual std::string GetValue()
Definition: magic_xattr.cc:369
virtual int Close(int fd)=0
virtual std::string GetValue()
Definition: magic_xattr.cc:373
shash::Algorithms hash_algorithm() const
perf::Counter * n_fs_dir_open()
Definition: mountpoint.h:211
virtual std::string GetValue()
Definition: magic_xattr.cc:398
int64_t Get()
Definition: statistics.h:32
virtual std::string GetValue()
Definition: magic_xattr.cc:377
CatalogT * GetRootCatalog() const
Definition: catalog_mgr.h:192
std::string tag_
Definition: magic_xattr.h:336
bool IsEmpty() const
Definition: bigvector.h:72
static BlessedObject Bless(const shash::Any &id)
Definition: cache.h:125
shash::Any metainfo_hash_
Definition: magic_xattr.h:306
signature::SignatureManager * signature_mgr()
Definition: mountpoint.h:465
BackoffThrottle throttle_
Definition: magic_xattr.h:244
uint64_t n_chunks_
Definition: magic_xattr.h:185
virtual std::string GetValue()
Definition: magic_xattr.cc:192
std::string ToString() const
Definition: shortstring.h:114
virtual std::string GetValue()
Definition: magic_xattr.cc:452
QuotaManager * quota_mgr()
Definition: cache.h:198
virtual std::string GetValue()
Definition: magic_xattr.cc:365
bool IsEmpty() const
Definition: shortstring.h:110
virtual std::string GetValue()
Definition: magic_xattr.cc:278
PathString path_
Definition: magic_xattr.h:78
virtual std::string GetValue()
Definition: magic_xattr.cc:534
virtual std::string GetValue()
Definition: magic_xattr.cc:227
bool ListFileChunks(const PathString &path, const shash::Algorithms interpret_hashes_as, FileChunkList *chunks)
size_t size() const
Definition: file_chunk.h:43
std::map< std::string, BaseMagicXattr * > xattr_list_
Definition: magic_xattr.h:157
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:270
void GetTimeout(unsigned *seconds_proxy, unsigned *seconds_direct)
Definition: download.cc:1902
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:438
virtual std::string GetValue()
Definition: magic_xattr.cc:235
catalog::Counters counters_
Definition: magic_xattr.h:297
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:410
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.cc:144
std::string pubkeys_
Definition: magic_xattr.h:285
manifest::Manifest * manifest() const
virtual std::string GetValue()
Definition: magic_xattr.cc:528
void Lock(PathString path, catalog::DirectoryEntry *dirent)
Definition: magic_xattr.h:63
std::string GetCsvMap() const
const char * c_str() const
Definition: shortstring.h:118
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:196
void GetHostInfo(std::vector< std::string > *host_chain, std::vector< int > *rtt, unsigned *current_host)
Definition: download.cc:1946
virtual std::string GetValue()
Definition: magic_xattr.cc:415
virtual int64_t Pread(int fd, void *buf, uint64_t size, uint64_t offset)=0
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:231
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:239
shash::Any meta_info() const
Definition: manifest.h:131
virtual bool HasCapability(Capabilities capability)=0
static const uint64_t kSizeUnknown
Definition: cache.h:72
size_t size() const
Definition: bigvector.h:121
download::DownloadManager * external_download_mgr()
Definition: mountpoint.h:437
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:136