15 #ifndef __STDC_FORMAT_MACROS
16 #define __STDC_FORMAT_MACROS
26 #include <sys/socket.h>
28 #include <sys/types.h>
72 for (
unsigned i = 0; i < list.size(); ++i) {
73 list_str += list[i] +
"\n";
75 Answer(con_fd, list_str);
83 new TalkManager(socket_path, mount_point, remounter));
92 socket_path.c_str(), talk_manager->
socket_fd_);
100 vector<string> metalink_chain;
101 unsigned active_metalink;
104 if (metalink_chain.size() == 0)
105 return "No metalinks defined\n";
108 for (
unsigned i = 0; i < metalink_chain.size(); ++i) {
109 metalink_str +=
" [" +
StringifyInt(i) +
"] " + metalink_chain[i] +
"\n";
111 metalink_str +=
"Active metalink " +
StringifyInt(active_metalink) +
": "
112 + metalink_chain[active_metalink] +
"\n";
117 vector<string> host_chain;
119 unsigned active_host;
121 download_mgr->
GetHostInfo(&host_chain, &rtt, &active_host);
122 if (host_chain.size() == 0)
123 return "No hosts defined\n";
126 for (
unsigned i = 0; i < host_chain.size(); ++i) {
127 host_str +=
" [" +
StringifyInt(i) +
"] " + host_chain[i] +
" (";
129 host_str +=
"unprobed";
131 host_str +=
"host down";
133 host_str +=
"geographically ordered";
138 host_str +=
"Active host " +
StringifyInt(active_host) +
": "
139 + host_chain[active_host] +
"\n";
144 vector<vector<download::DownloadManager::ProxyInfo> > proxy_chain;
145 unsigned active_group;
146 unsigned fallback_group;
148 download_mgr->
GetProxyInfo(&proxy_chain, &active_group, &fallback_group);
150 if (proxy_chain.size()) {
151 proxy_str +=
"Load-balance groups:\n";
152 for (
unsigned i = 0; i < proxy_chain.size(); ++i) {
154 for (
unsigned j = 0; j < proxy_chain[i].size(); ++j) {
155 urls.push_back(proxy_chain[i][j].Print());
160 proxy_str +=
"Active proxy: [" +
StringifyInt(active_group) +
"] "
161 + proxy_chain[active_group][0].url +
"\n";
162 if (fallback_group < proxy_chain.size())
163 proxy_str +=
"First fallback group: [" +
StringifyInt(fallback_group)
166 proxy_str =
"No proxies defined\n";
183 struct sockaddr_un remote;
184 socklen_t socket_size =
sizeof(remote);
188 shutdown(con_fd, SHUT_RDWR);
193 if ((con_fd = accept(
194 talk_mgr->
socket_fd_, (
struct sockaddr *)&remote, &socket_size))
201 char buf[kMaxCommandSize];
203 if ((bytes_read = recv(con_fd, buf,
sizeof(buf), 0)) <= 0)
206 if (buf[bytes_read - 1] ==
'\0')
208 const string line = string(buf, bytes_read);
212 if (line ==
"tracebuffer flush") {
214 talk_mgr->
Answer(con_fd,
"OK\n");
215 }
else if (line ==
"cache size") {
218 talk_mgr->
Answer(con_fd,
"Cache cannot report its size\n");
220 const uint64_t size_unpinned = quota_mgr->
GetSize();
222 const string size_str =
"Current cache size is "
225 +
" Bytes), pinned: "
229 talk_mgr->
Answer(con_fd, size_str);
231 }
else if (line ==
"cache instance") {
233 }
else if (line ==
"cache list") {
236 talk_mgr->
Answer(con_fd,
"Cache cannot list its entries\n");
238 const vector<string> ls = quota_mgr->
List();
241 }
else if (line ==
"cache list pinned") {
244 talk_mgr->
Answer(con_fd,
"Cache cannot list its entries\n");
246 const vector<string> ls_pinned = quota_mgr->
ListPinned();
249 }
else if (line ==
"cache list catalogs") {
252 talk_mgr->
Answer(con_fd,
"Cache cannot list its entries\n");
254 const vector<string> ls_catalogs = quota_mgr->
ListCatalogs();
257 }
else if (line.substr(0, 12) ==
"cleanup rate") {
260 talk_mgr->
Answer(con_fd,
"Unsupported by this cache\n");
262 if (line.length() < 14) {
263 talk_mgr->
Answer(con_fd,
"Usage: cleanup rate <period in mn>\n");
265 const uint64_t period_s =
String2Uint64(line.substr(13)) * 60;
270 }
else if (line.substr(0, 15) ==
"cache limit set") {
271 if (line.length() < 16) {
272 talk_mgr->
Answer(con_fd,
"Usage: cache limit set <MB>\n");
277 talk_mgr->
Answer(con_fd,
"New limit too low (minimum 1000)\n");
279 if (quota_mgr->
SetLimit(size * 1024 * 1024)) {
282 talk_mgr->
Answer(con_fd,
"OK\n");
284 talk_mgr->
Answer(con_fd,
"Limit not reset\n");
288 }
else if (line ==
"cache limit get") {
289 std::string limit_from_options;
291 &limit_from_options);
292 talk_mgr->
Answer(con_fd, limit_from_options +
"\n");
293 }
else if (line.substr(0, 7) ==
"cleanup") {
296 talk_mgr->
Answer(con_fd,
"Cache cannot trigger eviction\n");
298 if (line.length() < 9) {
299 talk_mgr->
Answer(con_fd,
"Usage: cleanup <MB>\n");
302 if (quota_mgr->
Cleanup(size)) {
303 talk_mgr->
Answer(con_fd,
"OK\n");
305 talk_mgr->
Answer(con_fd,
"Not fully cleaned "
306 "(there might be pinned chunks)\n");
310 }
else if (line.substr(0, 5) ==
"evict") {
312 if (line.length() < 7) {
313 talk_mgr->
Answer(con_fd,
"Usage: evict <path>\n");
315 const string path = line.substr(6);
318 talk_mgr->
Answer(con_fd,
"OK\n");
320 talk_mgr->
Answer(con_fd,
"No such regular file\n");
322 }
else if (line.substr(0, 3) ==
"pin") {
324 if (line.length() < 5) {
325 talk_mgr->
Answer(con_fd,
"Usage: pin <path>\n");
327 const string path = line.substr(4);
330 talk_mgr->
Answer(con_fd,
"OK\n");
332 talk_mgr->
Answer(con_fd,
"No such regular file or pinning failed\n");
334 }
else if (line ==
"mountpoint") {
336 }
else if (line ==
"device id") {
340 talk_mgr->
Answer(con_fd,
"0:0\n");
341 }
else if (line.substr(0, 13) ==
"send mount fd") {
343 if (line.length() < 15) {
344 talk_mgr->
Answer(con_fd,
"EINVAL\n");
346 const std::string socket_path = line.substr(14);
348 talk_mgr->
Answer(con_fd, retval ?
"OK\n" :
"Failed\n");
350 "Attempt to send fuse connection info to new mount (via %s)%s",
351 socket_path.c_str(), retval ?
"" :
" -- failed!");
353 }
else if (line.substr(0, 7) ==
"remount") {
355 if (line ==
"remount sync")
358 status = remounter->
Check();
361 talk_mgr->
Answer(con_fd,
"Failed\n");
364 talk_mgr->
Answer(con_fd,
"Failed (no space)\n");
367 talk_mgr->
Answer(con_fd,
"Catalog up to date\n");
370 talk_mgr->
Answer(con_fd,
"New revision applied\n");
373 talk_mgr->
Answer(con_fd,
"In maintenance mode\n");
376 talk_mgr->
Answer(con_fd,
"internal error\n");
378 }
else if (line.substr(0, 6) ==
"chroot") {
379 if (line.length() < 8) {
380 talk_mgr->
Answer(con_fd,
"Usage: chroot <hash>\n");
382 const std::string root_hash =
383 Trim(line.substr(7),
true );
388 talk_mgr->
Answer(con_fd,
"OK\n");
391 talk_mgr->
Answer(con_fd,
"Failed\n");
395 }
else if (line ==
"detach nested catalogs") {
397 talk_mgr->
Answer(con_fd,
"OK\n");
398 }
else if (line ==
"revision") {
399 const string revision =
401 talk_mgr->
Answer(con_fd, revision +
"\n");
402 }
else if (line ==
"max ttl info") {
403 const unsigned max_ttl = mount_point->
GetMaxTtlMn();
405 talk_mgr->
Answer(con_fd,
"unset\n");
407 const string max_ttl_str =
StringifyInt(max_ttl) +
" minutes\n";
408 talk_mgr->
Answer(con_fd, max_ttl_str);
410 }
else if (line.substr(0, 11) ==
"max ttl set") {
411 if (line.length() < 13) {
412 talk_mgr->
Answer(con_fd,
"Usage: max ttl set <minutes>\n");
416 talk_mgr->
Answer(con_fd,
"OK\n");
418 }
else if (line.substr(0, 14) ==
"nameserver get") {
420 const string reply = !dns_server.empty()
421 ? std::string(
"DNS server address: ")
423 : std::string(
"DNS server not set.\n");
424 talk_mgr->
Answer(con_fd, reply);
425 }
else if (line.substr(0, 14) ==
"nameserver set") {
426 if (line.length() < 16) {
427 talk_mgr->
Answer(con_fd,
"Usage: nameserver set <host>\n");
429 const string host = line.substr(15);
431 talk_mgr->
Answer(con_fd,
"OK\n");
433 }
else if (line.substr(0, 22) ==
"__testing_freeze_cvmfs") {
434 const std::string fs_dir = line.substr(23) +
"/dir";
435 mkdir(fs_dir.c_str(), 0700);
436 }
else if (line ==
"external metalink info") {
439 talk_mgr->
Answer(con_fd, external_metalink_info);
440 }
else if (line ==
"metalink info") {
443 talk_mgr->
Answer(con_fd, metalink_info);
444 }
else if (line ==
"external host info") {
447 talk_mgr->
Answer(con_fd, external_host_info);
448 }
else if (line ==
"host info") {
451 talk_mgr->
Answer(con_fd, host_info);
452 }
else if (line ==
"host probe") {
454 talk_mgr->
Answer(con_fd,
"OK\n");
455 }
else if (line ==
"host probe geo") {
458 talk_mgr->
Answer(con_fd,
"OK\n");
460 talk_mgr->
Answer(con_fd,
"Failed\n");
461 }
else if (line ==
"external metalink switch") {
463 talk_mgr->
Answer(con_fd,
"OK\n");
464 }
else if (line ==
"metalink switch") {
466 talk_mgr->
Answer(con_fd,
"OK\n");
467 }
else if (line ==
"external host switch") {
469 talk_mgr->
Answer(con_fd,
"OK\n");
470 }
else if (line ==
"host switch") {
472 talk_mgr->
Answer(con_fd,
"OK\n");
473 }
else if (line.substr(0, 21) ==
"external metalink set") {
474 if (line.length() < 23) {
475 talk_mgr->
Answer(con_fd,
"Usage: external metalink set <URL>\n");
477 const std::string host = line.substr(22);
479 talk_mgr->
Answer(con_fd,
"OK\n");
481 }
else if (line.substr(0, 12) ==
"metalink set") {
482 if (line.length() < 14) {
483 talk_mgr->
Answer(con_fd,
"Usage: metalink set <URL>\n");
485 const std::string host = line.substr(13);
487 talk_mgr->
Answer(con_fd,
"OK\n");
489 }
else if (line.substr(0, 17) ==
"external host set") {
490 if (line.length() < 19) {
491 talk_mgr->
Answer(con_fd,
"Usage: external host set <URL>\n");
493 const std::string host = line.substr(18);
495 talk_mgr->
Answer(con_fd,
"OK\n");
497 }
else if (line.substr(0, 8) ==
"host set") {
498 if (line.length() < 10) {
499 talk_mgr->
Answer(con_fd,
"Usage: host set <host list>\n");
501 const string hosts = line.substr(9);
503 talk_mgr->
Answer(con_fd,
"OK\n");
505 }
else if (line ==
"external proxy info") {
506 const string external_proxy_info =
508 talk_mgr->
Answer(con_fd, external_proxy_info);
509 }
else if (line ==
"proxy info") {
510 const string proxy_info =
512 talk_mgr->
Answer(con_fd, proxy_info);
513 }
else if (line ==
"proxy rebalance") {
515 talk_mgr->
Answer(con_fd,
"OK\n");
516 }
else if (line ==
"proxy group switch") {
518 talk_mgr->
Answer(con_fd,
"OK\n");
519 }
else if (line.substr(0, 18) ==
"external proxy set") {
520 if (line.length() < 20) {
521 talk_mgr->
Answer(con_fd,
"Usage: external proxy set <proxy list>\n");
523 const string external_proxies = line.substr(19);
526 talk_mgr->
Answer(con_fd,
"OK\n");
528 }
else if (line.substr(0, 9) ==
"proxy set") {
529 if (line.length() < 11) {
530 talk_mgr->
Answer(con_fd,
"Usage: proxy set <proxy list>\n");
532 string proxies = line.substr(10);
536 talk_mgr->
Answer(con_fd,
"Failed, no valid proxies\n");
540 talk_mgr->
Answer(con_fd,
"OK\n");
543 }
else if (line.substr(0, 14) ==
"proxy fallback") {
544 if (line.length() < 15) {
545 talk_mgr->
Answer(con_fd,
"Usage: proxy fallback <proxy list>\n");
547 const string fallback_proxies = line.substr(15);
550 talk_mgr->
Answer(con_fd,
"OK\n");
552 }
else if (line ==
"timeout info") {
554 unsigned timeout_direct;
556 string timeout_str =
"Timeout with proxy: ";
560 timeout_str +=
"no timeout\n";
561 timeout_str +=
"Timeout without proxy: ";
565 timeout_str +=
"no timeout\n";
566 talk_mgr->
Answer(con_fd, timeout_str);
567 }
else if (line.substr(0, 11) ==
"timeout set") {
568 if (line.length() < 13) {
569 talk_mgr->
Answer(con_fd,
"Usage: timeout set <proxy> <direct>\n");
572 uint64_t timeout_direct;
575 talk_mgr->
Answer(con_fd,
"OK\n");
577 }
else if (line ==
"open catalogs") {
579 }
else if (line ==
"drop metadata caches") {
590 talk_mgr->
Answer(con_fd,
"OK\n");
591 }
else if (line ==
"internal affairs") {
600 ->
Lookup(
"pathstring.n_instances")
603 ->
Lookup(
"pathstring.n_overflows")
606 ->
Lookup(
"namestring.n_instances")
609 ->
Lookup(
"namestring.n_overflows")
612 ->
Lookup(
"linkstring.n_instances")
615 ->
Lookup(
"linkstring.n_overflows")
626 ->
Lookup(
"inode_tracker.n_insert")
629 ->
Lookup(
"inode_tracker.n_remove")
632 ->
Lookup(
"inode_tracker.no_reference")
635 ->
Lookup(
"inode_tracker.n_hit_inode")
638 ->
Lookup(
"inode_tracker.n_hit_path")
641 ->
Lookup(
"inode_tracker.n_miss_path")
644 ->
Lookup(
"dentry_tracker.n_insert")
647 ->
Lookup(
"dentry_tracker.n_remove")
650 ->
Lookup(
"dentry_tracker.n_prune")
653 ->
Lookup(
"page_cache_tracker.n_insert")
656 ->
Lookup(
"page_cache_tracker.n_remove")
659 ->
Lookup(
"page_cache_tracker.n_open_direct")
662 ->
Lookup(
"page_cache_tracker.n_open_flush")
665 ->
Lookup(
"page_cache_tracker.n_open_cached")
671 result +=
"\nCache Mode: ";
674 result +=
"read-write";
677 result +=
"read-only";
684 bool maintenance_mode;
686 result +=
"\nDrainout Mode: " +
StringifyBool(drainout_mode) +
"\n";
687 result +=
"Maintenance Mode: " +
StringifyBool(maintenance_mode) +
"\n";
690 result +=
"\nNFS Map Statistics:\n";
694 result +=
"SQlite Statistics:\n";
695 sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, ¤t, &highwater, 0);
696 result +=
" Number of allocations " +
StringifyInt(current) +
"\n";
698 sqlite3_status(SQLITE_STATUS_MEMORY_USED, ¤t, &highwater, 0);
699 result +=
" General purpose allocator " +
StringifyInt(current / 1024)
702 sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, ¤t, &highwater, 0);
703 result +=
" Largest malloc " +
StringifyInt(highwater) +
" Bytes\n";
705 sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, ¤t, &highwater, 0);
706 result +=
" Page cache allocations " +
StringifyInt(current) +
" / "
709 sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, ¤t, &highwater, 0);
710 result +=
" Page cache overflows " +
StringifyInt(current / 1024)
713 sqlite3_status(SQLITE_STATUS_PAGECACHE_SIZE, ¤t, &highwater, 0);
714 result +=
" Largest page cache allocation " +
StringifyInt(highwater)
717 sqlite3_status(SQLITE_STATUS_SCRATCH_USED, ¤t, &highwater, 0);
718 result +=
" Scratch allocations " +
StringifyInt(current) +
" / "
721 sqlite3_status(SQLITE_STATUS_SCRATCH_OVERFLOW, ¤t, &highwater, 0);
722 result +=
" Scratch overflows " +
StringifyInt(current) +
" / "
725 sqlite3_status(SQLITE_STATUS_SCRATCH_SIZE, ¤t, &highwater, 0);
726 result +=
" Largest scratch allocation " +
StringifyInt(highwater / 1024)
729 result +=
"\nPer-Connection Memory Statistics:\n"
732 result +=
"\nLatency distribution of system calls:\n";
736 result +=
"Multi-Forget\n"
747 result +=
"\nRaw Counters:\n"
751 talk_mgr->
Answer(con_fd, result);
752 }
else if (line ==
"reset error counters") {
754 talk_mgr->
Answer(con_fd,
"OK\n");
755 }
else if (line ==
"pid") {
757 talk_mgr->
Answer(con_fd, pid_str);
758 }
else if (line ==
"pid cachemgr") {
763 talk_mgr->
Answer(con_fd, pid_str);
764 }
else if (line ==
"pid watchdog") {
766 talk_mgr->
Answer(con_fd, pid_str);
767 }
else if (line ==
"parameters") {
769 }
else if (line ==
"hotpatch history") {
772 +
" (start of CernVM-FS loader "
774 for (loader::EventList::const_iterator
780 +
" (loaded CernVM-FS Fuse Module " + (*i)->so_version
783 talk_mgr->
Answer(con_fd, history_str);
784 }
else if (line ==
"vfs inodes") {
793 talk_mgr->
Answer(con_fd, result);
794 }
else if (line ==
"vfs entries") {
798 uint64_t inode_parent;
806 talk_mgr->
Answer(con_fd, result);
807 }
else if (line ==
"version") {
808 const string version_str = string(CVMFS_VERSION)
809 +
" (CernVM-FS Fuse Module)\n"
812 talk_mgr->
Answer(con_fd, version_str);
813 }
else if (line ==
"version patchlevel") {
814 talk_mgr->
Answer(con_fd,
string(CVMFS_PATCH_LEVEL) +
"\n");
815 }
else if (line ==
"tear down to read-only") {
817 talk_mgr->
Answer(con_fd,
"not supported\n");
822 talk_mgr->
Answer(con_fd,
"In read-only mode\n");
824 }
else if (line ==
"latency") {
825 const string result =
827 talk_mgr->
Answer(con_fd, result);
829 talk_mgr->
Answer(con_fd,
"unknown command\n");
839 const unsigned int bufSize = 300;
840 char buffer[bufSize];
859 const string repo(mount_point.
fqrn());
861 unsigned int format_index = snprintf(
862 buffer, bufSize,
"\"%s\",\"%s\",\"%s\",\"%s\"",
"repository",
"action",
863 "total_count",
"time_unit");
864 for (
unsigned int i = 0; i < qs.size(); i++) {
865 format_index += snprintf(buffer + format_index, bufSize - format_index,
868 format_index += snprintf(buffer + format_index, bufSize - format_index,
"\n");
869 assert(format_index < bufSize);
872 memset(buffer, 0,
sizeof(buffer));
875 vector<Log2Histogram *> hist;
876 vector<string> names;
878 names.push_back(
"lookup");
880 names.push_back(
"forget");
882 names.push_back(
"forget_multi");
884 names.push_back(
"getattr");
886 names.push_back(
"readlink");
888 names.push_back(
"opendir");
890 names.push_back(
"releasedir");
892 names.push_back(
"readdir");
894 names.push_back(
"open");
896 names.push_back(
"read");
898 names.push_back(
"release");
900 for (
unsigned int j = 0; j < hist.size(); j++) {
902 unsigned int format_index = snprintf(
903 buffer, bufSize,
"\"%s\",\"%s\",%" PRIu64
",\"nanoseconds\"",
904 repo.c_str(), names[j].c_str(), h->
N());
905 for (
unsigned int i = 0; i < qs.size(); i++) {
906 format_index += snprintf(buffer + format_index, bufSize - format_index,
909 format_index += snprintf(buffer + format_index, bufSize - format_index,
911 assert(format_index < bufSize);
914 memset(buffer, 0,
sizeof(buffer));
926 , remounter_(remounter)
935 if ((retval != 0) && (errno != ENOENT)) {
937 "Could not remove cvmfs_io socket from cache directory (%d)",
OptionsManager * options_mgr()
virtual bool SetLimit(uint64_t limit)=0
void UnregisterQuotaListener()
int MakeSocket(const std::string &path, const int mode)
FileSystem * file_system()
atomic_int64 num_hits_inode
Log2Histogram * hist_fs_opendir()
atomic_int64 num_misses_path
Statistics GetStatistics()
virtual uint64_t GetCleanupRate(uint64_t period_s)=0
void SetHostChain(const std::string &host_list)
perf::Statistics * statistics()
virtual std::vector< std::string > List()=0
void SetMetalinkChain(const std::string &metalink_list)
static const int kProbeGeo
string Trim(const string &raw, bool trim_newline)
virtual bool Cleanup(const uint64_t leave_size)=0
string JoinStrings(const vector< string > &strings, const string &joint)
std::string PrintInodeGeneration()
const history::History * history() const
void SetProxyChain(const std::string &proxy_list, const std::string &fallback_proxy_list, const ProxySetModes set_mode)
MountPoint * mount_point_
void GetMetalinkInfo(std::vector< std::string > *metalink_chain, unsigned *current_metalink)
FuseRemounter * remounter_
lru::InodeCache * inode_cache()
std::string FormatProxyInfo(download::DownloadManager *download_mgr)
std::string FormatLatencies(const MountPoint &mount_point, FileSystem *file_system)
virtual std::vector< std::string > ListPinned()=0
assert((mem||(size==0))&&"Out Of Memory")
std::string FormatMetalinkInfo(download::DownloadManager *download_mgr)
MountPoint * mount_point_
Log2Histogram * hist_fs_read()
virtual std::vector< std::string > ListCatalogs()=0
std::string loader_version
virtual uint64_t GetSize()=0
string StringifyTime(const time_t seconds, const bool utc)
void EndEnumerate(Cursor *cursor)
void SetDnsServer(const std::string &address)
std::string StringifyUint(const uint64_t value)
virtual CacheManagerIds id()=0
lru::Md5PathCache * md5path_cache()
void SetTimeout(const unsigned seconds_proxy, const unsigned seconds_direct)
bool Pin(const string &path)
unsigned int GetQuantile(float n)
static TalkManager * Create(const std::string &socket_path, MountPoint *mount_point, FuseRemounter *remounter)
string StringifyBool(const bool value)
void Answer(int con_fd, const std::string &msg)
static uint64_t num_instances()
Counter * Lookup(const std::string &name) const
glue::PageCacheTracker * page_cache_tracker()
void SetMaxTtlMn(unsigned value_minutes)
void GetProxyInfo(std::vector< std::vector< ProxyInfo > > *proxy_chain, unsigned *current_group, unsigned *fallback_group)
catalog::ClientCatalogManager * catalog_mgr()
void Set(const int64_t val)
Log2Histogram * hist_fs_forget_multi()
Status CheckSynchronously()
void SetValueFromTalk(const std::string &key, const std::string &value)
Log2Histogram * hist_fs_release()
const loader::LoaderExports * loader_exports_
Statistics GetStatistics()
Statistics GetStatistics()
TalkManager(const std::string &socket_path, MountPoint *mount_point, FuseRemounter *remounter)
virtual std::string GetStatistics()
Log2Histogram * hist_fs_releasedir()
const char kSuffixCatalog
bool NextEntry(Cursor *cursor, uint64_t *inode_parent, NameString *name)
lru::PathCache * path_cache()
CacheManager * cache_mgr()
bool NextInode(Cursor *cursor, uint64_t *inode)
bool SendFuseFd(const std::string &socket_path)
download::DownloadManager * download_mgr()
virtual uint64_t GetSizePinned()=0
Status ChangeRoot(const shash::Any &root_hash)
Log2Histogram * hist_fs_readlink()
string StringifyInt(const int64_t value)
bool GetValue(const std::string &key, std::string *value) const
glue::DentryTracker * dentry_tracker()
Log2Histogram * hist_fs_readdir()
atomic_int64 num_references
std::string FormatHostInfo(download::DownloadManager *download_mgr)
Log2Histogram * hist_fs_open()
std::string GetDnsServer() const
std::string ToString() const
QuotaManager * quota_mgr()
uint64_t GetRevision() const
Log2Histogram * hist_fs_lookup()
string ResolveProxyDescription(const string &cvmfs_proxies, const std::string &path_fallback_cache, DownloadManager *download_manager)
uint64_t String2Uint64(const string &value)
static void * MainResponder(void *data)
void ResetErrorCounters()
bool Evict(const string &path)
std::string PrintList(const PrintOptions print_options)
void GetTimeout(unsigned *seconds_proxy, unsigned *seconds_direct)
void GetReloadStatus(bool *drainout_mode, bool *maintenance_mode)
Any MkFromHexPtr(const HexPtr hex, const char suffix)
static const int kProbeUnprobed
Log2Histogram * hist_fs_forget()
static const int kProbeDown
atomic_int64 num_hits_path
static uint64_t num_overflows()
Log2Histogram * hist_fs_getattr()
void GetHostInfo(std::vector< std::string > *host_chain, std::vector< int > *rtt, unsigned *current_host)
std::string PrintHierarchy() const
glue::InodeTracker * inode_tracker()
std::string PrintAllMemStatistics() const
virtual std::string Describe()=0
void AnswerStringList(int con_fd, const std::vector< std::string > &list)
virtual bool HasCapability(Capabilities capability)=0
download::DownloadManager * external_download_mgr()
void String2Uint64Pair(const string &value, uint64_t *a, uint64_t *b)
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)