XRootD
XrdPfc.hh
Go to the documentation of this file.
1 #ifndef __XRDPFC_CACHE_HH__
2 #define __XRDPFC_CACHE_HH__
3 //----------------------------------------------------------------------------------
4 // Copyright (c) 2014 by Board of Trustees of the Leland Stanford, Jr., University
5 // Author: Alja Mrak-Tadel, Matevz Tadel, Brian Bockelman
6 //----------------------------------------------------------------------------------
7 // XRootD is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU Lesser General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // XRootD is distributed in the hope that it will be useful,
13 // but WITHOUT ANY emacs WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU Lesser General Public License
18 // along with XRootD. If not, see <http://www.gnu.org/licenses/>.
19 //----------------------------------------------------------------------------------
20 #include <string>
21 #include <list>
22 #include <map>
23 #include <set>
24 
25 #include "Xrd/XrdScheduler.hh"
26 #include "XrdVersion.hh"
27 #include "XrdSys/XrdSysPthread.hh"
28 #include "XrdOuc/XrdOucCache.hh"
29 #include "XrdOuc/XrdOucCallBack.hh"
30 
31 #include "XrdCl/XrdClURL.hh"
32 
33 #include "XrdPfcFile.hh"
34 #include "XrdPfcDecision.hh"
35 
36 class XrdOss;
37 class XrdOucStream;
38 class XrdSysError;
39 class XrdSysTrace;
40 class XrdXrootdGStream;
41 
42 namespace XrdPfc
43 {
44 class File;
45 class IO;
46 class PurgePin;
47 class ResourceMonitor;
48 
49 
50 template<class MOO>
51 struct MutexHolder {
52  MOO &mutex;
53  MutexHolder(MOO &m) : mutex(m) { mutex.Lock(); }
54  ~MutexHolder() { mutex.UnLock(); }
55 };
56 }
57 
58 
59 namespace XrdPfc
60 {
61 
62 //----------------------------------------------------------------------------
64 //----------------------------------------------------------------------------
66 {
67  Configuration();
68 
69  bool are_file_usage_limits_set() const { return m_fileUsageMax > 0; }
70  bool is_age_based_purge_in_effect() const { return m_purgeColdFilesAge > 0 ; }
71  bool is_uvkeep_purge_in_effect() const { return m_cs_UVKeep >= 0; }
72  bool is_dir_stat_reporting_on() const { return m_dirStatsStoreDepth >= 0 || ! m_dirStatsDirs.empty() || ! m_dirStatsDirGlobs.empty(); }
73  bool is_purge_plugin_set_up() const { return false; }
74 
76 
77  bool is_cschk_cache() const { return m_cs_Chk & CSChk_Cache; }
78  bool is_cschk_net() const { return m_cs_Chk & CSChk_Net; }
79  bool is_cschk_any() const { return m_cs_Chk & CSChk_Both; }
80  bool is_cschk_both() const { return (m_cs_Chk & CSChk_Both) == CSChk_Both; }
81 
82  bool does_cschk_have_missing_bits(CkSumCheck_e cks_on_file) const { return m_cs_Chk & ~cks_on_file; }
83 
84  bool should_uvkeep_purge(time_t delta) const { return m_cs_UVKeep >= 0 && delta > m_cs_UVKeep; }
85 
87  bool m_hdfsmode;
89 
90  std::string m_username;
91  std::string m_data_space;
92  std::string m_meta_space;
93 
94  long long m_diskTotalSpace;
95  long long m_diskUsageLWM;
96  long long m_diskUsageHWM;
97  long long m_fileUsageBaseline;
98  long long m_fileUsageNominal;
99  long long m_fileUsageMax;
104 
105  std::set<std::string> m_dirStatsDirs;
106  std::set<std::string> m_dirStatsDirGlobs;
109 
110  long long m_bufferSize;
111  long long m_RamAbsAvailable;
116 
117  long long m_cgi_min_bufferSize = 0;
118  long long m_cgi_max_bufferSize = 0;
121  bool m_cgi_blocksize_allowed = false;
122  bool m_cgi_prefetch_allowed = false;
123 
124  long long m_hdfsbsize;
125  long long m_flushCnt;
126 
127  time_t m_cs_UVKeep;
128  int m_cs_Chk;
129  bool m_cs_ChkTLS;
130 
133 
134  static constexpr long long s_min_bufferSize = 4 * 1024;
135  static constexpr long long s_max_bufferSize = 512 * 1024 * 1024;
136 
137  static constexpr int s_max_prefetch_max_blocks = 4096;
138 
139  bool m_httpcc;
140  bool m_qfsredir;
141 };
142 
143 //------------------------------------------------------------------------------
144 
146 {
147  std::string m_diskUsageLWM;
148  std::string m_diskUsageHWM;
149  std::string m_fileUsageBaseline;
150  std::string m_fileUsageNominal;
151  std::string m_fileUsageMax;
152  std::string m_flushRaw;
153 
155  m_diskUsageLWM("0.90"), m_diskUsageHWM("0.95"),
156  m_flushRaw("")
157  {}
158 };
159 
160 //------------------------------------------------------------------------------
161 
163  std::vector<char> f_string;
164  size_t f_pos;
165  std::string f_exc_prefix;
166 
167  static const size_t s_MAX_SIZE;
168 
169  snprintf_wrapper(const std::string& exc_prefix, int size = 1024);
170 
171  void operator()(const char *fmt, ...);
172 
173  const char* c_str() const { return f_string.data(); }
174 };
175 
176 //==============================================================================
177 // Cache
178 //==============================================================================
179 
180 //----------------------------------------------------------------------------
182 //----------------------------------------------------------------------------
183 class Cache : public XrdOucCache
184 {
185 public:
186  //---------------------------------------------------------------------
188  //---------------------------------------------------------------------
189  Cache(XrdSysLogger *logger, XrdOucEnv *env);
190 
191  //---------------------------------------------------------------------
193  //---------------------------------------------------------------------
194  using XrdOucCache::Attach;
195 
196  virtual XrdOucCacheIO *Attach(XrdOucCacheIO *, int Options = 0);
197 
198  //---------------------------------------------------------------------
199  // Virtual function of XrdOucCache. Used for redirection to a local
200  // file on a distributed FS.
201  virtual int LocalFilePath(const char *url, char *buff=0, int blen=0,
202  LFP_Reason why=ForAccess, bool forall=false);
203 
204  //---------------------------------------------------------------------
205  // Virtual function of XrdOucCache. Used for deferred open.
206  virtual int Prepare(const char *url, int oflags, mode_t mode);
207 
208  // virtual function of XrdOucCache.
209  virtual int Stat(const char *url, struct stat &sbuff);
210 
211  // virtual function of XrdOucCache.
212  virtual int Unlink(const char *url);
213 
214  //---------------------------------------------------------------------
215  // Used by PfcFstcl::Fsctl function.
216  // Test if file is cached taking in onlyifcached configuration parameters.
217  //---------------------------------------------------------------------
218  virtual int ConsiderCached(const char *url);
219 
220  bool DecideIfConsideredCached(long long file_size, long long bytes_on_disk);
221  void WriteCacheControlXAttr(int cinfo_fd, const char* path, const std::string& cc);
222  void WriteFileSizeXAttr(int cinfo_fd, long long file_size);
223  long long DetermineFullFileSize(const std::string &cinfo_fname);
224  int GetCacheControlXAttr(const std::string &cinfo_fname, std::string& res) const;
225  int GetCacheControlXAttr(int fd, std::string& res) const;
226 
227 
228  //--------------------------------------------------------------------
234  //--------------------------------------------------------------------
235  bool Decide(XrdOucCacheIO*);
236 
237  //------------------------------------------------------------------------
239  //------------------------------------------------------------------------
240  const Configuration& RefConfiguration() const { return m_configuration; }
241 
242  //---------------------------------------------------------------------
250  //---------------------------------------------------------------------
251  bool Config(const char *config_filename, const char *parameters, XrdOucEnv *env);
252 
253  //---------------------------------------------------------------------
255  //---------------------------------------------------------------------
256  static Cache &CreateInstance(XrdSysLogger *logger, XrdOucEnv *env);
257 
258  //---------------------------------------------------------------------
260  //---------------------------------------------------------------------
261  static Cache &GetInstance();
262  static const Cache &TheOne();
263  static const Configuration &Conf();
264 
265  static ResourceMonitor &ResMon();
266 
267  //---------------------------------------------------------------------
269  //---------------------------------------------------------------------
270  static bool VCheck(XrdVersionInfo &urVersion) { return true; }
271 
272  //---------------------------------------------------------------------
274  //---------------------------------------------------------------------
275  int UnlinkFile(const std::string& f_name, bool fail_if_open);
276 
277  //---------------------------------------------------------------------
279  //---------------------------------------------------------------------
280  void AddWriteTask(Block* b, bool from_read);
281 
282  //---------------------------------------------------------------------
285  //---------------------------------------------------------------------
286  void RemoveWriteQEntriesFor(File *f);
287 
288  //---------------------------------------------------------------------
290  //---------------------------------------------------------------------
291  void ProcessWriteTasks();
292 
293  long long WritesSinceLastCall();
294 
295  char* RequestRAM(long long size);
296  void ReleaseRAM(char* buf, long long size);
297 
298  void RegisterPrefetchFile(File*);
300 
302 
303  void Prefetch();
304 
305  XrdOss* GetOss() const { return m_oss; }
306 
307  bool IsFileActiveOrPurgeProtected(const std::string&) const;
308  void ClearPurgeProtectedSet();
309  PurgePin* GetPurgePin() const { return m_purge_pin; }
310 
311  File* GetFile(const std::string&, IO*, long long off = 0, long long filesize = 0);
312 
313  void ReleaseFile(File*, IO*);
314 
315  void ScheduleFileSync(File* f) { schedule_file_sync(f, false, false); }
316 
317  void FileSyncDone(File*, bool high_debug);
318 
319  XrdSysError* GetLog() const { return &m_log; }
320  XrdSysTrace* GetTrace() const { return m_trace; }
321 
322  ResourceMonitor& RefResMon() { return *m_res_mon; }
323  XrdXrootdGStream* GetGStream() { return m_gstream; }
324 
325  void ExecuteCommandUrl(const std::string& command_url);
326 
328 
329  bool blocksize_str2value(const char *from, const char *str, long long &val, long long min, long long max) const;
330  bool prefetch_str2value(const char *from, const char *str, int &val, int min, int max) const;
331 
332  bool is_prefetch_enabled() const { return m_prefetch_enabled; }
333 
334 private:
335  bool ConfigParameters(std::string, XrdOucStream&, TmpConfiguration &tmpc);
336  bool ConfigXeq(char *, XrdOucStream &);
337  bool xcschk(XrdOucStream &);
338  bool xdlib(XrdOucStream &);
339  bool xplib(XrdOucStream &);
340  bool xtrace(XrdOucStream &);
341  bool test_oss_basics_and_features();
342 
343  bool cfg2bytes(const std::string &str, long long &store, long long totalSpace, const char *name) const;
344 
345  static Cache *m_instance;
346 
347  XrdOucEnv *m_env;
348  mutable XrdSysError m_log;
349  XrdSysTrace *m_trace;
350  const char *m_traceID;
351 
352  XrdOss *m_oss;
353 
354  XrdXrootdGStream *m_gstream;
355 
356  ResourceMonitor *m_res_mon;
357 
358  std::vector<Decision*> m_decisionpoints;
359  PurgePin* m_purge_pin;
360 
361  Configuration m_configuration;
362 
363  XrdSysCondVar m_prefetch_condVar;
364  bool m_prefetch_enabled;
365 
366  XrdSysMutex m_RAM_mutex;
367  long long m_RAM_used;
368  long long m_RAM_write_queue;
369  std::list<char*> m_RAM_std_blocks;
370  int m_RAM_std_size;
371 
372  bool m_isClient;
373  bool m_dataXattr = false;
374  bool m_metaXattr = false;
375 
376  struct WriteQ
377  {
378  WriteQ() : condVar(0), writes_between_purges(0), size(0) {}
379 
380  XrdSysCondVar condVar;
381  std::list<Block*> queue;
382  long long writes_between_purges;
383  int size;
384  };
385 
386  WriteQ m_writeQ;
387 
388  // active map, purge delay set
389  typedef std::map<std::string, File*> ActiveMap_t;
390  typedef ActiveMap_t::iterator ActiveMap_i;
391  typedef std::set<std::string> FNameSet_t;
392 
393  ActiveMap_t m_active;
394  FNameSet_t m_purge_delay_set;
395  mutable XrdSysCondVar m_active_cond;
396 
397  void inc_ref_cnt(File*, bool lock, bool high_debug);
398  void dec_ref_cnt(File*, bool high_debug);
399 
400  void schedule_file_sync(File*, bool ref_cnt_already_set, bool high_debug);
401 
402  bool is_http_cache_valid(const std::string& fname, const std::string& iname, XrdCl::URL& url);
403 
404  // prefetching
405  typedef std::vector<File*> PrefetchList;
406  PrefetchList m_prefetchList;
407 };
408 
409 }
410 
411 #endif
#define stat(a, b)
Definition: XrdPosix.hh:105
XrdOucString File
URL representation.
Definition: XrdClURL.hh:31
virtual XrdOucCacheIO * Attach(XrdOucCacheIO *ioP, int opts=0)=0
Attaches/creates and detaches/deletes cache-io objects for disk based cache.
Definition: XrdPfc.hh:184
PurgePin * GetPurgePin() const
Definition: XrdPfc.hh:309
long long DetermineFullFileSize(const std::string &cinfo_fname)
Definition: XrdPfc.cc:949
void FileSyncDone(File *, bool high_debug)
Definition: XrdPfc.cc:551
File * GetFile(const std::string &, IO *, long long off=0, long long filesize=0)
Definition: XrdPfc.cc:397
bool prefetch_str2value(const char *from, const char *str, int &val, int min, int max) const
XrdOss * GetOss() const
Definition: XrdPfc.hh:305
static const Configuration & Conf()
Definition: XrdPfc.cc:138
bool Config(const char *config_filename, const char *parameters, XrdOucEnv *env)
Parse configuration file.
virtual int LocalFilePath(const char *url, char *buff=0, int blen=0, LFP_Reason why=ForAccess, bool forall=false)
Definition: XrdPfc.cc:803
virtual int Stat(const char *url, struct stat &sbuff)
Definition: XrdPfc.cc:1193
const Configuration & RefConfiguration() const
Reference XrdPfc configuration.
Definition: XrdPfc.hh:240
static ResourceMonitor & ResMon()
Definition: XrdPfc.cc:139
XrdXrootdGStream * GetGStream()
Definition: XrdPfc.hh:323
bool IsFileActiveOrPurgeProtected(const std::string &) const
Definition: XrdPfc.cc:686
void ClearPurgeProtectedSet()
Definition: XrdPfc.cc:694
void ReleaseRAM(char *buf, long long size)
Definition: XrdPfc.cc:379
virtual int ConsiderCached(const char *url)
Definition: XrdPfc.cc:1064
static Cache & GetInstance()
Singleton access.
Definition: XrdPfc.cc:136
int GetCacheControlXAttr(const std::string &cinfo_fname, std::string &res) const
Definition: XrdPfc.cc:989
void DeRegisterPrefetchFile(File *)
Definition: XrdPfc.cc:720
void ExecuteCommandUrl(const std::string &command_url)
void RegisterPrefetchFile(File *)
Definition: XrdPfc.cc:704
void WriteFileSizeXAttr(int cinfo_fd, long long file_size)
Definition: XrdPfc.cc:934
void Prefetch()
Definition: XrdPfc.cc:761
void ReleaseFile(File *, IO *)
Definition: XrdPfc.cc:480
void AddWriteTask(Block *b, bool from_read)
Add downloaded block in write queue.
Definition: XrdPfc.cc:229
XrdSysTrace * GetTrace() const
Definition: XrdPfc.hh:320
Cache(XrdSysLogger *logger, XrdOucEnv *env)
Constructor.
Definition: XrdPfc.cc:162
bool Decide(XrdOucCacheIO *)
Makes decision if the original XrdOucCacheIO should be cached.
Definition: XrdPfc.cc:141
int UnlinkFile(const std::string &f_name, bool fail_if_open)
Remove cinfo and data files from cache.
Definition: XrdPfc.cc:1264
virtual XrdOucCacheIO * Attach(XrdOucCacheIO *ioP, int opts=0)=0
Obtain a new IO object that fronts existing XrdOucCacheIO.
static XrdScheduler * schedP
Definition: XrdPfc.hh:327
File * GetNextFileToPrefetch()
Definition: XrdPfc.cc:742
ResourceMonitor & RefResMon()
Definition: XrdPfc.hh:322
long long WritesSinceLastCall()
Definition: XrdPfc.cc:328
void ProcessWriteTasks()
Separate task which writes blocks from ram to disk.
Definition: XrdPfc.cc:281
virtual int Unlink(const char *url)
Definition: XrdPfc.cc:1254
void WriteCacheControlXAttr(int cinfo_fd, const char *path, const std::string &cc)
Definition: XrdPfc.cc:921
void RemoveWriteQEntriesFor(File *f)
Remove blocks from write queue which belong to given prefetch. This method is used at the time of Fil...
Definition: XrdPfc.cc:248
static const Cache & TheOne()
Definition: XrdPfc.cc:137
static bool VCheck(XrdVersionInfo &urVersion)
Version check.
Definition: XrdPfc.hh:270
char * RequestRAM(long long size)
Definition: XrdPfc.cc:339
virtual int Prepare(const char *url, int oflags, mode_t mode)
Definition: XrdPfc.cc:1130
bool DecideIfConsideredCached(long long file_size, long long bytes_on_disk)
Definition: XrdPfc.cc:1031
bool blocksize_str2value(const char *from, const char *str, long long &val, long long min, long long max) const
static Cache & CreateInstance(XrdSysLogger *logger, XrdOucEnv *env)
Singleton creation.
Definition: XrdPfc.cc:129
XrdSysError * GetLog() const
Definition: XrdPfc.hh:319
bool is_prefetch_enabled() const
Definition: XrdPfc.hh:332
void ScheduleFileSync(File *f)
Definition: XrdPfc.hh:315
Base cache-io class that implements some XrdOucCacheIO abstract methods.
Definition: XrdPfcIO.hh:16
Base class for reguesting directory space to obtain.
Definition: XrdPfc.hh:43
@ CSChk_Both
Definition: XrdPfcTypes.hh:27
@ CSChk_Net
Definition: XrdPfcTypes.hh:27
@ CSChk_Cache
Definition: XrdPfcTypes.hh:27
Contains parameters configurable from the xrootd config file.
Definition: XrdPfc.hh:66
long long m_hdfsbsize
used with m_hdfsmode, default 128MB
Definition: XrdPfc.hh:124
long long m_RamAbsAvailable
available from configuration
Definition: XrdPfc.hh:111
long long m_flushCnt
nuber of unsynced blcoks on disk before flush is called
Definition: XrdPfc.hh:125
long long m_cgi_max_bufferSize
max buffer size allowed in pfc.blocksize
Definition: XrdPfc.hh:118
int m_accHistorySize
max number of entries in access history part of cinfo file
Definition: XrdPfc.hh:103
int m_cgi_min_prefetch_max_blocks
min prefetch block count allowed in pfc.prefetch
Definition: XrdPfc.hh:119
bool does_cschk_have_missing_bits(CkSumCheck_e cks_on_file) const
Definition: XrdPfc.hh:82
bool m_httpcc
enable http cache control
Definition: XrdPfc.hh:139
bool m_cgi_prefetch_allowed
allow cgi setting of prefetch
Definition: XrdPfc.hh:122
int m_wqueue_threads
number of threads writing blocks to disk
Definition: XrdPfc.hh:114
bool m_write_through
flag indicating write-through mode is enabled
Definition: XrdPfc.hh:86
long long m_diskTotalSpace
total disk space on configured partition or oss space
Definition: XrdPfc.hh:94
long long m_fileUsageMax
cache purge - files usage maximum
Definition: XrdPfc.hh:99
long long m_fileUsageBaseline
cache purge - files usage baseline
Definition: XrdPfc.hh:97
int m_dirStatsStoreDepth
maximum depth for statistics write out
Definition: XrdPfc.hh:108
bool m_allow_xrdpfc_command
flag for enabling access to /xrdpfc-command/ functionality.
Definition: XrdPfc.hh:88
bool is_purge_plugin_set_up() const
Definition: XrdPfc.hh:73
long long m_diskUsageHWM
cache purge - disk usage high water mark
Definition: XrdPfc.hh:96
bool is_cschk_cache() const
Definition: XrdPfc.hh:77
std::set< std::string > m_dirStatsDirGlobs
directory globs for which stat reporting was requested
Definition: XrdPfc.hh:106
static constexpr long long s_min_bufferSize
Definition: XrdPfc.hh:134
CkSumCheck_e get_cs_Chk() const
Definition: XrdPfc.hh:75
static constexpr long long s_max_bufferSize
Definition: XrdPfc.hh:135
bool is_uvkeep_purge_in_effect() const
Definition: XrdPfc.hh:71
int m_prefetch_max_blocks
default maximum number of blocks to prefetch per file
Definition: XrdPfc.hh:115
bool are_file_usage_limits_set() const
Definition: XrdPfc.hh:69
bool is_cschk_any() const
Definition: XrdPfc.hh:79
bool m_cs_ChkTLS
Allow TLS.
Definition: XrdPfc.hh:129
long long m_fileUsageNominal
cache purge - files usage nominal
Definition: XrdPfc.hh:98
int m_cs_Chk
Checksum check.
Definition: XrdPfc.hh:128
bool should_uvkeep_purge(time_t delta) const
Definition: XrdPfc.hh:84
int m_purgeAgeBasedPeriod
peform cold file / uvkeep purge every this many purge cycles
Definition: XrdPfc.hh:102
bool m_qfsredir
redirect file system query to the origin
Definition: XrdPfc.hh:140
bool m_hdfsmode
flag for enabling block-level operation
Definition: XrdPfc.hh:87
int m_purgeColdFilesAge
purge files older than this age
Definition: XrdPfc.hh:101
std::string m_data_space
oss space for data files
Definition: XrdPfc.hh:91
bool is_cschk_both() const
Definition: XrdPfc.hh:80
std::set< std::string > m_dirStatsDirs
directories for which stat reporting was requested
Definition: XrdPfc.hh:105
long long m_diskUsageLWM
cache purge - disk usage low water mark
Definition: XrdPfc.hh:95
int m_RamKeepStdBlocks
number of standard-sized blocks kept after release
Definition: XrdPfc.hh:112
long long m_bufferSize
cache block size, default 128 kB
Definition: XrdPfc.hh:110
long long m_cgi_min_bufferSize
min buffer size allowed in pfc.blocksize
Definition: XrdPfc.hh:117
int m_dirStatsInterval
time between resource monitor statistics dump in seconds
Definition: XrdPfc.hh:107
std::string m_meta_space
oss space for metadata files (cinfo)
Definition: XrdPfc.hh:92
int m_wqueue_blocks
maximum number of blocks written per write-queue loop
Definition: XrdPfc.hh:113
bool is_age_based_purge_in_effect() const
Definition: XrdPfc.hh:70
int m_cgi_max_prefetch_max_blocks
max prefetch block count allowed in pfc.prefetch
Definition: XrdPfc.hh:120
std::string m_username
username passed to oss plugin
Definition: XrdPfc.hh:90
static constexpr int s_max_prefetch_max_blocks
Definition: XrdPfc.hh:137
bool m_cgi_blocksize_allowed
allow cgi setting of blocksize
Definition: XrdPfc.hh:121
bool is_cschk_net() const
Definition: XrdPfc.hh:78
double m_onlyIfCachedMinFrac
minimum fraction of downloaded file, used by only-if-cached CGI option
Definition: XrdPfc.hh:132
time_t m_cs_UVKeep
unverified checksum cache keep
Definition: XrdPfc.hh:127
int m_purgeInterval
sleep interval between cache purges
Definition: XrdPfc.hh:100
long long m_onlyIfCachedMinSize
minumum size of downloaded file, used by only-if-cached CGI option
Definition: XrdPfc.hh:131
bool is_dir_stat_reporting_on() const
Definition: XrdPfc.hh:72
MutexHolder(MOO &m)
Definition: XrdPfc.hh:53
std::string m_diskUsageLWM
Definition: XrdPfc.hh:147
std::string m_diskUsageHWM
Definition: XrdPfc.hh:148
std::string m_fileUsageBaseline
Definition: XrdPfc.hh:149
std::string m_fileUsageNominal
Definition: XrdPfc.hh:150
std::string m_flushRaw
Definition: XrdPfc.hh:152
std::string m_fileUsageMax
Definition: XrdPfc.hh:151
static const size_t s_MAX_SIZE
Definition: XrdPfc.hh:167
const char * c_str() const
Definition: XrdPfc.hh:173
snprintf_wrapper(const std::string &exc_prefix, int size=1024)
void operator()(const char *fmt,...)
std::string f_exc_prefix
Definition: XrdPfc.hh:165
std::vector< char > f_string
Definition: XrdPfc.hh:163