Go to the documentation of this file. 1 #ifndef __XRDPFC_CACHE_HH__
2 #define __XRDPFC_CACHE_HH__
26 #include "XrdVersion.hh"
184 if (!
first)
return 0;
185 int dcnt = 0; {
char *p =
str;
while (*p) {
if (*(p++) ==
delim[0]) ++dcnt; } }
186 argv.reserve(dcnt + 1);
213 m_dirs.reserve(max_depth);
216 for (
int i = 0; i < max_depth; ++i)
248 for (std::vector<const char*>::iterator i =
m_dirs.begin(); i !=
m_dirs.end(); ++i)
263 printf(
"PathTokenizer::deboog size=%d\n",
m_n_dirs);
266 printf(
" %2d: %s\n", i,
m_dirs[i]);
303 virtual int Prepare(
const char *url,
int oflags, mode_t mode);
306 virtual int Stat(
const char *url,
struct stat &sbuff);
333 bool Config(
const char *config_filename,
const char *parameters);
348 static bool VCheck(XrdVersionInfo &urVersion) {
return true; }
395 File*
GetFile(
const std::string&,
IO*,
long long off = 0,
long long filesize = 0);
418 bool cfg2bytes(
const std::string &str,
long long &store,
long long totalSpace,
const char *name);
XrdOucCacheStats m_ouc_stats
Definition: XrdPfc.hh:429
int size
current size of write queue
Definition: XrdPfc.hh:456
bool is_purge_plugin_set_up() const
Definition: XrdPfc.hh:92
Definition: XrdPfcFile.hh:61
const char * delim
Definition: XrdPfc.hh:156
XrdSysMutex m_RAM_mutex
lock for allcoation of RAM blocks
Definition: XrdPfc.hh:441
Definition: XrdOss.hh:488
ActiveMap_t::iterator ActiveMap_i
Definition: XrdPfc.hh:463
long long m_RAM_used
Definition: XrdPfc.hh:442
XrdOss * m_oss
disk cache file system
Definition: XrdPfc.hh:430
void Purge()
Thread function invoked to scan and purge files from disk when needed.
void FileSyncDone(File *, bool high_debug)
char * get_token()
Definition: XrdPfc.hh:165
Definition: XrdOucCache.hh:103
PrefetchList m_prefetchList
Definition: XrdPfc.hh:481
int m_n_dirs
Definition: XrdPfc.hh:204
void ReleaseFile(File *, IO *)
virtual XrdOucCacheIO * Attach(XrdOucCacheIO *, int Options=0)
XrdSysCondVar m_active_cond
Cond-var protecting active file data structures.
Definition: XrdPfc.hh:472
int UnlinkUnlessOpen(const std::string &f_name)
Remove file from cache unless it is currently open.
virtual XrdOucCacheIO * Attach(XrdOucCacheIO *ioP, int opts=0)=0
bool m_in_purge
Definition: XrdPfc.hh:471
bool Decide(XrdOucCacheIO *)
Makes decision if the original XrdOucCacheIO should be cached.
long long m_RAM_write_queue
Definition: XrdPfc.hh:443
Definition: XrdSysPthread.hh:166
void ProcessWriteTasks()
Separate task which writes blocks from ram to disk.
std::string make_path()
Definition: XrdPfc.hh:245
long long m_diskTotalSpace
total disk space on configured partition or oss space
Definition: XrdPfc.hh:106
std::string m_flushRaw
Definition: XrdPfc.hh:143
virtual int Prepare(const char *url, int oflags, mode_t mode)
Attaches/creates and detaches/deletes cache-io objects for disk based cache.
Definition: XrdPfc.hh:281
XrdXrootdGStream * m_gstream
Definition: XrdPfc.hh:432
Definition: XrdOucCache.hh:494
std::set< std::string > m_dirStatsDirGlobs
directory globs for which stat reporting was requested
Definition: XrdPfc.hh:118
XrdSysTrace * GetTrace()
Definition: XrdPfc.hh:404
bool first
Definition: XrdPfc.hh:158
Base cache-io class that implements XrdOucCacheIO abstract methods.
Definition: XrdPfcIO.hh:17
bool ConfigXeq(char *, XrdOucStream &)
FNameSet_t m_purge_delay_set
Definition: XrdPfc.hh:470
static bool VCheck(XrdVersionInfo &urVersion)
Version check.
Definition: XrdPfc.hh:348
XrdSysError m_log
XrdPfc namespace logger.
Definition: XrdPfc.hh:425
Contains parameters configurable from the xrootd config file.
Definition: XrdPfc.hh:61
virtual int Unlink(const char *url)
Definition: XrdPfcFile.hh:134
long long m_diskUsageHWM
cache purge - disk usage high water mark
Definition: XrdPfc.hh:108
long long m_flushCnt
nuber of unsynced blcoks on disk before flush is called
Definition: XrdPfc.hh:131
int fill_argv(std::vector< char * > &argv)
Definition: XrdPfc.hh:182
SplitParser(const std::string &s, const char *d)
Definition: XrdPfc.hh:160
XrdOss * GetOss() const
Definition: XrdPfc.hh:391
std::string m_diskUsageHWM
Definition: XrdPfc.hh:139
bool m_dirStats
is directory access / usage statistics enabled
Definition: XrdPfc.hh:121
long long m_bufferSize
prefetch buffer size, default 1MB
Definition: XrdPfc.hh:123
int m_purgeColdFilesPeriod
peform cold file purge every this many purge cycles
Definition: XrdPfc.hh:114
ScanAndPurgeThreadState_e
Definition: XrdPfc.hh:486
std::string m_username
username passed to oss plugin
Definition: XrdPfc.hh:102
void ReleaseRAM(char *buf, long long size)
std::string m_fileUsageBaseline
Definition: XrdPfc.hh:140
void inc_ref_cnt(File *, bool lock, bool high_debug)
virtual int LocalFilePath(const char *url, char *buff=0, int blen=0, LFP_Reason why=ForAccess, bool forall=false)
Definition: XrdOucStream.hh:47
DataFsState * m_fs_state
directory state for access / usage info and quotas
Definition: XrdPfc.hh:490
std::multimap< std::string, XrdPfc::Stats > StatsMMap_t
Definition: XrdPfc.hh:464
~SplitParser()
Definition: XrdPfc.hh:163
void schedule_file_sync(File *, bool ref_cnt_already_set, bool high_debug)
PathTokenizer(const std::string &path, int max_depth, bool parse_as_lfn)
Definition: XrdPfc.hh:206
StatsMMap_t m_closed_files_stats
Definition: XrdPfc.hh:469
@ ForAccess
Definition: XrdOucCache.hh:569
void DeRegisterPrefetchFile(File *)
bool IsFileActiveOrPurgeProtected(const std::string &)
std::map< std::string, File * > ActiveMap_t
Definition: XrdPfc.hh:462
const char * get_dir(int pos)
Definition: XrdPfc.hh:239
void ResourceMonitorHeartBeat()
Thread function checking resource usage periodically.
void RemoveWriteQEntriesFor(File *f)
Remove blocks from write queue which belong to given prefetch. This method is used at the time of Fil...
static Cache & CreateInstance(XrdSysLogger *logger, XrdOucEnv *env)
Singleton creation.
void deboog()
Definition: XrdPfc.hh:261
static XrdScheduler * schedP
Definition: XrdPfc.hh:410
XrdSysCondVar condVar
write list condVar
Definition: XrdPfc.hh:453
bool are_file_usage_limits_set() const
Definition: XrdPfc.hh:90
Definition: XrdSysPthread.hh:79
int m_prefetch_max_blocks
maximum number of blocks to prefetch per file
Definition: XrdPfc.hh:128
char * RequestRAM(long long size)
bool cfg2bytes(const std::string &str, long long &store, long long totalSpace, const char *name)
XrdXrootdGStream * GetGStream()
Definition: XrdPfc.hh:406
std::string m_meta_space
oss space for metadata files (cinfo)
Definition: XrdPfc.hh:104
std::list< char * > m_RAM_std_blocks
A list of blocks of standard size, to be reused.
Definition: XrdPfc.hh:444
int m_accHistorySize
max number of entries in access history part of cinfo file
Definition: XrdPfc.hh:115
std::vector< const char * > m_dirs
Definition: XrdPfc.hh:202
const char * m_reminder
Definition: XrdPfc.hh:203
bool m_allow_xrdpfc_command
flag for enabling access to /xrdpfc-command/ functionality.
Definition: XrdPfc.hh:100
XrdSysTrace * m_trace
Definition: XrdPfc.hh:426
bool m_isClient
True if running as client.
Definition: XrdPfc.hh:447
int m_RAM_std_size
Definition: XrdPfc.hh:445
XrdOucEnv * m_env
environment passed in at creation
Definition: XrdPfc.hh:424
int m_dirStatsStoreDepth
depth to which statistics should be collected
Definition: XrdPfc.hh:120
bool xdlib(XrdOucStream &)
int get_n_dirs()
Definition: XrdPfc.hh:234
Definition: XrdOucEnv.hh:42
bool m_prefetch_enabled
set to true when prefetching is enabled
Definition: XrdPfc.hh:439
std::set< std::string > m_dirStatsDirs
directories for which stat reporting was requested
Definition: XrdPfc.hh:117
std::string m_fileUsageMax
Definition: XrdPfc.hh:142
Cache(XrdSysLogger *logger, XrdOucEnv *env)
Constructor.
StatsMMap_t::iterator StatsMMap_i
Definition: XrdPfc.hh:465
LFP_Reason
Definition: XrdOucCache.hh:569
Definition: XrdPfc.hh:450
File * GetFile(const std::string &, IO *, long long off=0, long long filesize=0)
bool are_dirstats_enabled() const
Definition: XrdPfc.hh:97
Definition: XrdScheduler.hh:45
int m_RamKeepStdBlocks
number of standard-sized blocks kept after release
Definition: XrdPfc.hh:125
long long m_hdfsbsize
used with m_hdfsmode, default 128MB
Definition: XrdPfc.hh:130
bool Config(const char *config_filename, const char *parameters)
Parse configuration file.
@ SPTS_Idle
Definition: XrdPfc.hh:486
Definition: XrdSysLogger.hh:53
virtual int Stat(const char *url, struct stat &sbuff)
bool xtrace(XrdOucStream &)
void RegisterPrefetchFile(File *)
@ SPTS_Scan
Definition: XrdPfc.hh:486
std::vector< XrdPfc::Decision * > m_decisionpoints
decision plugins
Definition: XrdPfc.hh:434
void ScheduleFileSync(File *f)
Definition: XrdPfc.hh:399
int m_wqueue_threads
number of threads writing blocks to disk
Definition: XrdPfc.hh:127
long long m_diskUsageLWM
cache purge - disk usage low water mark
Definition: XrdPfc.hh:107
Configuration()
Definition: XrdPfc.hh:62
@ SPTS_Purge
Definition: XrdPfc.hh:486
int m_last_purge_duration
Definition: XrdPfc.hh:493
std::set< std::string > FNameSet_t
Definition: XrdPfc.hh:466
const Configuration & RefConfiguration() const
Reference XrdPfc configuration.
Definition: XrdPfc.hh:323
void calculate_fractional_usages(long long du, long long fu, double &frac_du, double &frac_fu)
void ExecuteCommandUrl(const std::string &command_url)
@ SPTS_Done
Definition: XrdPfc.hh:486
Definition: XrdOucCacheStats.hh:44
bool ConfigParameters(std::string, XrdOucStream &, TmpConfiguration &tmpc)
const char * m_traceID
Definition: XrdPfc.hh:427
char * state
Definition: XrdPfc.hh:157
void AddWriteTask(Block *b, bool from_read)
Add downloaded block in write queue.
File * GetNextFileToPrefetch()
Definition: XrdPfc.hh:137
Definition: XrdClAnyObject.hh:26
long long m_fileUsageBaseline
cache purge - files usage baseline
Definition: XrdPfc.hh:109
int m_purgeColdFilesAge
purge files older than this age
Definition: XrdPfc.hh:113
char * get_reminder()
Definition: XrdPfc.hh:177
static Cache & GetInstance()
Singleton access.
ActiveMap_t m_active
Map of currently active / open files.
Definition: XrdPfc.hh:468
void dec_ref_cnt(File *, bool high_debug)
static Cache * m_instance
this object
Definition: XrdPfc.hh:422
int UnlinkCommon(const std::string &f_name, bool fail_if_open)
Definition: XrdXrootdGStream.hh:44
WriteQ m_writeQ
Definition: XrdPfc.hh:459
bool is_age_based_purge_in_effect() const
Definition: XrdPfc.hh:91
int m_purgeInterval
sleep interval between cache purges
Definition: XrdPfc.hh:112
Definition: XrdPfc.hh:154
bool m_hdfsmode
flag for enabling block-level operation
Definition: XrdPfc.hh:99
TmpConfiguration()
Definition: XrdPfc.hh:145
ScanAndPurgeThreadState_e m_spt_state
Definition: XrdPfc.hh:494
long long m_RamAbsAvailable
available from configuration
Definition: XrdPfc.hh:124
long long m_fileUsageMax
cache purge - files usage maximum
Definition: XrdPfc.hh:111
char * str
Definition: XrdPfc.hh:155
#define stat(a, b)
Definition: XrdPosix.hh:96
std::vector< File * > PrefetchList
Definition: XrdPfc.hh:480
char * get_reminder_with_delim()
Definition: XrdPfc.hh:171
int m_wqueue_blocks
maximum number of blocks written per write-queue loop
Definition: XrdPfc.hh:126
WriteQ()
Definition: XrdPfc.hh:451
long long writes_between_purges
upper bound on amount of bytes written between two purge passes
Definition: XrdPfc.hh:455
Definition: XrdSysError.hh:90
Definition: XrdSysTrace.hh:49
int m_last_scan_duration
Definition: XrdPfc.hh:492
Configuration m_configuration
configurable parameters
Definition: XrdPfc.hh:436
int m_dirStatsMaxDepth
maximum depth for statistics write out
Definition: XrdPfc.hh:119
Definition: XrdPfc.hh:201
std::string m_data_space
oss space for data files
Definition: XrdPfc.hh:103
XrdSysError * GetLog()
Definition: XrdPfc.hh:403
std::string m_fileUsageNominal
Definition: XrdPfc.hh:141
XrdSysCondVar m_stats_n_purge_cond
communication between heart-beat and scan-purge threads
Definition: XrdPfc.hh:488
std::list< Block * > queue
container
Definition: XrdPfc.hh:454
void copy_out_active_stats_and_update_data_fs_state()
std::string m_diskUsageLWM
Definition: XrdPfc.hh:138
XrdSysCondVar m_prefetch_condVar
lock for vector of prefetching files
Definition: XrdPfc.hh:438
long long m_fileUsageNominal
cache purge - files usage nominal
Definition: XrdPfc.hh:110