xrootd
XrdFileCache.hh
Go to the documentation of this file.
1#ifndef __XRDFILECACHE_CACHE_HH__
2#define __XRDFILECACHE_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 <set>
23
24#include "Xrd/XrdScheduler.hh"
25#include "XrdVersion.hh"
30#include "XrdFileCacheFile.hh"
32
33class XrdOucStream;
34class XrdSysError;
35class XrdSysTrace;
36
37namespace XrdCl {
38class Log;
39}
40namespace XrdFileCache {
41class File;
42class IO;
43}
44
45
46namespace XrdFileCache
47{
48//----------------------------------------------------------------------------
50//----------------------------------------------------------------------------
52{
54 m_hdfsmode(false),
56 m_data_space("public"),
57 m_meta_space("public"),
64 m_purgeInterval(300),
67 m_bufferSize(1024*1024),
69 m_NRamBuffers(-1),
73 m_hdfsbsize(128*1024*1024),
74 m_flushCnt(2000)
75 {}
76
77 bool are_file_usage_limits_set() const { return m_fileUsageMax > 0; }
79 bool is_purge_plugin_set_up() const { return false; }
80
81 void calculate_fractional_usages(long long du, long long fu, double &frac_du, double &frac_fu);
82
85
86 std::string m_username;
87 std::string m_data_space;
88 std::string m_meta_space;
89
90 long long m_diskTotalSpace;
91 long long m_diskUsageLWM;
92 long long m_diskUsageHWM;
95 long long m_fileUsageMax;
99
100 long long m_bufferSize;
106
107 long long m_hdfsbsize;
108 long long m_flushCnt;
109};
110
112{
113 std::string m_diskUsageLWM;
114 std::string m_diskUsageHWM;
117 std::string m_fileUsageMax;
118 std::string m_flushRaw;
119
121 m_diskUsageLWM("0.90"), m_diskUsageHWM("0.95"),
122 m_flushRaw("")
123 {}
124};
125
126//----------------------------------------------------------------------------
128//----------------------------------------------------------------------------
129class Cache : public XrdOucCache2
130{
131public:
132 //---------------------------------------------------------------------
134 //---------------------------------------------------------------------
136
137 //---------------------------------------------------------------------
139 //---------------------------------------------------------------------
141
142 virtual XrdOucCacheIO2 *Attach(XrdOucCacheIO2 *, int Options = 0);
143
144 //---------------------------------------------------------------------
146 //---------------------------------------------------------------------
147 virtual int isAttached();
148
149 //---------------------------------------------------------------------
150 // Virtual function of XrdOucCache2. Used to pass environmental info.
151 virtual void EnvInfo(XrdOucEnv &theEnv);
152
153 //---------------------------------------------------------------------
154 // Virtual function of XrdOucCache2. Used for redirection to a local
155 // file on a distributed FS.
156 virtual int LocalFilePath(const char *url, char *buff=0, int blen=0,
157 LFP_Reason why=ForAccess, bool forall=false);
158
159 //---------------------------------------------------------------------
160 // Virtual function of XrdOucCache2. Used for deferred open.
161 virtual int Prepare(const char *url, int oflags, mode_t mode);
162
163 // virtual function of XrdOucCache2.
164 virtual int Stat(const char *url, struct stat &sbuff);
165
166 // virtual function of XrdOucCache.
167 virtual int Unlink(const char *url);
168
169 //--------------------------------------------------------------------
175 //--------------------------------------------------------------------
177
178 //------------------------------------------------------------------------
180 //------------------------------------------------------------------------
182
183 //---------------------------------------------------------------------
190 //---------------------------------------------------------------------
191 bool Config(const char *config_filename, const char *parameters);
192
193 //---------------------------------------------------------------------
195 //---------------------------------------------------------------------
197
198 //---------------------------------------------------------------------
200 //---------------------------------------------------------------------
202
203 //---------------------------------------------------------------------
205 //---------------------------------------------------------------------
206 static bool VCheck(XrdVersionInfo &urVersion) { return true; }
207
208 //---------------------------------------------------------------------
210 //---------------------------------------------------------------------
211 void Purge();
212
213 //---------------------------------------------------------------------
215 //---------------------------------------------------------------------
216 int UnlinkUnlessOpen(const std::string& f_name);
217
218 //---------------------------------------------------------------------
220 //---------------------------------------------------------------------
221 void AddWriteTask(Block* b, bool from_read);
222
223 //---------------------------------------------------------------------
226 //---------------------------------------------------------------------
228
229 //---------------------------------------------------------------------
231 //---------------------------------------------------------------------
233
235
237
240
242
243 void Prefetch();
244
245 XrdOss* GetOss() const { return m_output_fs; }
246
247 bool IsFileActiveOrPurgeProtected(const std::string&);
248
249 File* GetFile(const std::string&, IO*, long long off = 0, long long filesize = 0);
250
252
253 void ScheduleFileSync(File* f) { schedule_file_sync(f, false, false); }
254
255 void FileSyncDone(File*, bool high_debug);
256
257 XrdSysError* GetLog() { return &m_log; }
259
260 void ExecuteCommandUrl(const std::string& command_url);
261
262private:
264 bool ConfigXeq(char *, XrdOucStream &);
267
268 bool cfg2bytes(const std::string &str, long long &store, long long totalSpace, const char *name);
269
270 int UnlinkCommon(const std::string& f_name, bool fail_if_open);
271
272 static Cache *m_factory;
274
277 const char *m_traceID;
278
281
282 std::vector<XrdFileCache::Decision*> m_decisionpoints;
283
284 std::map<std::string, long long> m_filesInQueue;
285
287
290
294
295 struct WriteQ
296 {
298
300 std::list<Block*> queue;
302 int size;
303 };
304
306
307 // active map, purge delay set
308 typedef std::map<std::string, File*> ActiveMap_t;
309 typedef ActiveMap_t::iterator ActiveMap_i;
310 typedef std::set<std::string> FNameSet_t;
311
316
317 void inc_ref_cnt(File*, bool lock, bool high_debug);
318 void dec_ref_cnt(File*, bool high_debug);
319
320 void schedule_file_sync(File*, bool ref_cnt_already_set, bool high_debug);
321
322 // prefetching
323 typedef std::vector<File*> PrefetchList;
325};
326
327}
328
329#endif
#define stat(a, b)
Definition: XrdPosix.hh:96
Definition: XrdFileCacheFile.hh:60
Attaches/creates and detaches/deletes cache-io objects for disk based cache.
Definition: XrdFileCache.hh:130
XrdSysCondVar m_prefetch_condVar
lock for vector of prefetching files
Definition: XrdFileCache.hh:288
FNameSet_t m_purge_delay_set
Definition: XrdFileCache.hh:313
XrdSysCondVar m_active_cond
Definition: XrdFileCache.hh:315
XrdOss * GetOss() const
Definition: XrdFileCache.hh:245
bool IsFileActiveOrPurgeProtected(const std::string &)
void ExecuteCommandUrl(const std::string &command_url)
virtual int Prepare(const char *url, int oflags, mode_t mode)
bool m_in_purge
Definition: XrdFileCache.hh:314
static Cache * m_factory
this object
Definition: XrdFileCache.hh:272
virtual int Stat(const char *url, struct stat &sbuff)
void AddWriteTask(Block *b, bool from_read)
Add downloaded block in write queue.
void RegisterPrefetchFile(File *)
bool Decide(XrdOucCacheIO *)
Makes decision if the original XrdOucCacheIO should be cached.
const Configuration & RefConfiguration() const
Reference XrdFileCache configuration.
Definition: XrdFileCache.hh:181
void RemoveWriteQEntriesFor(File *f)
Remove blocks from write queue which belong to given prefetch. This method is used at the time of Fil...
virtual void EnvInfo(XrdOucEnv &theEnv)
static Cache & CreateInstance(XrdSysLogger *logger)
Singleton creation.
virtual XrdOucCacheIO2 * Attach(XrdOucCacheIO2 *, int Options=0)
XrdOucCacheStats m_stats
Definition: XrdFileCache.hh:279
Cache(XrdSysLogger *logger)
Constructor.
static XrdScheduler * schedP
Definition: XrdFileCache.hh:273
bool m_isClient
True if running as client.
Definition: XrdFileCache.hh:293
std::set< std::string > FNameSet_t
Definition: XrdFileCache.hh:310
bool ConfigXeq(char *, XrdOucStream &)
void dec_ref_cnt(File *, bool high_debug)
void ScheduleFileSync(File *f)
Definition: XrdFileCache.hh:253
bool Config(const char *config_filename, const char *parameters)
Parse configuration file.
void schedule_file_sync(File *, bool ref_cnt_already_set, bool high_debug)
std::map< std::string, long long > m_filesInQueue
Definition: XrdFileCache.hh:284
ActiveMap_t::iterator ActiveMap_i
Definition: XrdFileCache.hh:309
XrdSysTrace * m_trace
Definition: XrdFileCache.hh:276
File * GetFile(const std::string &, IO *, long long off=0, long long filesize=0)
void FileSyncDone(File *, bool high_debug)
void inc_ref_cnt(File *, bool lock, bool high_debug)
void ReleaseFile(File *, IO *)
XrdSysMutex m_RAMblock_mutex
lock for allcoation of RAM blocks
Definition: XrdFileCache.hh:291
const char * m_traceID
Definition: XrdFileCache.hh:277
Configuration m_configuration
configurable parameters
Definition: XrdFileCache.hh:286
static Cache & GetInstance()
Singleton access.
std::vector< File * > PrefetchList
Definition: XrdFileCache.hh:323
XrdSysError * GetLog()
Definition: XrdFileCache.hh:257
XrdSysError m_log
XrdFileCache namespace logger.
Definition: XrdFileCache.hh:275
XrdOss * m_output_fs
disk cache file system
Definition: XrdFileCache.hh:280
int UnlinkCommon(const std::string &f_name, bool fail_if_open)
void ProcessWriteTasks()
Separate task which writes blocks from ram to disk.
PrefetchList m_prefetchList
Definition: XrdFileCache.hh:324
int m_RAMblocks_used
Definition: XrdFileCache.hh:292
bool xdlib(XrdOucStream &)
virtual int isAttached()
Number of cache-io objects atteched through this cache.
virtual int Unlink(const char *url)
XrdSysTrace * GetTrace()
Definition: XrdFileCache.hh:258
virtual int LocalFilePath(const char *url, char *buff=0, int blen=0, LFP_Reason why=ForAccess, bool forall=false)
static bool VCheck(XrdVersionInfo &urVersion)
Version check.
Definition: XrdFileCache.hh:206
std::map< std::string, File * > ActiveMap_t
Definition: XrdFileCache.hh:308
ActiveMap_t m_active
Definition: XrdFileCache.hh:312
void DeRegisterPrefetchFile(File *)
File * GetNextFileToPrefetch()
bool cfg2bytes(const std::string &str, long long &store, long long totalSpace, const char *name)
std::vector< XrdFileCache::Decision * > m_decisionpoints
decision plugins
Definition: XrdFileCache.hh:282
void Purge()
Thread function running disk cache purge periodically.
int UnlinkUnlessOpen(const std::string &f_name)
Remove file from cache unless it is currently open.
bool ConfigParameters(std::string, XrdOucStream &, TmpConfiguration &tmpc)
bool xtrace(XrdOucStream &)
WriteQ m_writeQ
Definition: XrdFileCache.hh:305
bool m_prefetch_enabled
set to true when prefetching is enabled
Definition: XrdFileCache.hh:289
Definition: XrdFileCacheFile.hh:134
Base cache-io class that implements XrdOucCacheIO abstract methods.
Definition: XrdFileCacheIO.hh:17
Definition: XrdOss.hh:174
Definition: XrdOucCache2.hh:197
virtual XrdOucCacheIO2 * Attach(XrdOucCacheIO2 *ioP, int opts=0)=0
LFP_Reason
Definition: XrdOucCache2.hh:297
@ ForAccess
Definition: XrdOucCache2.hh:297
Definition: XrdOucCache2.hh:63
Definition: XrdOucCache.hh:128
Definition: XrdOucCacheStats.hh:41
Definition: XrdOucEnv.hh:42
Definition: XrdOucStream.hh:46
Definition: XrdScheduler.hh:45
Definition: XrdSysPthread.hh:79
Definition: XrdSysError.hh:90
Definition: XrdSysLogger.hh:53
Definition: XrdSysPthread.hh:166
Definition: XrdSysTrace.hh:49
Definition: XrdClAnyObject.hh:26
Definition: XrdFileCache.hh:40
Definition: XrdFileCache.hh:296
XrdSysCondVar condVar
write list condVar
Definition: XrdFileCache.hh:299
WriteQ()
Definition: XrdFileCache.hh:297
long long writes_between_purges
upper bound on amount of bytes written between two purge passes
Definition: XrdFileCache.hh:301
std::list< Block * > queue
container
Definition: XrdFileCache.hh:300
int size
current size of write queue
Definition: XrdFileCache.hh:302
Contains parameters configurable from the xrootd config file.
Definition: XrdFileCache.hh:52
bool m_hdfsmode
flag for enabling block-level operation
Definition: XrdFileCache.hh:83
int m_NRamBuffers
number of total in-memory cache blocks, cached
Definition: XrdFileCache.hh:102
int m_wqueue_threads
number of threads writing blocks to disk
Definition: XrdFileCache.hh:104
Configuration()
Definition: XrdFileCache.hh:53
long long m_RamAbsAvailable
available from configuration
Definition: XrdFileCache.hh:101
std::string m_username
username passed to oss plugin
Definition: XrdFileCache.hh:86
void calculate_fractional_usages(long long du, long long fu, double &frac_du, double &frac_fu)
long long m_diskUsageLWM
cache purge - disk usage low water mark
Definition: XrdFileCache.hh:91
int m_prefetch_max_blocks
maximum number of blocks to prefetch per file
Definition: XrdFileCache.hh:105
std::string m_meta_space
oss space for metadata files (cinfo)
Definition: XrdFileCache.hh:88
std::string m_data_space
oss space for data files
Definition: XrdFileCache.hh:87
long long m_hdfsbsize
used with m_hdfsmode, default 128MB
Definition: XrdFileCache.hh:107
long long m_fileUsageMax
cache purge - files usage maximum
Definition: XrdFileCache.hh:95
long long m_diskUsageHWM
cache purge - disk usage high water mark
Definition: XrdFileCache.hh:92
long long m_diskTotalSpace
total disk space on configured partition or oss space
Definition: XrdFileCache.hh:90
long long m_fileUsageBaseline
cache purge - files usage baseline
Definition: XrdFileCache.hh:93
int m_purgeInterval
sleep interval between cache purges
Definition: XrdFileCache.hh:96
int m_purgeColdFilesAge
purge files older than this age
Definition: XrdFileCache.hh:97
bool is_purge_plugin_set_up() const
Definition: XrdFileCache.hh:79
bool m_allow_xrdpfc_command
flag for enabling access to /xrdpfc-command/ functionality.
Definition: XrdFileCache.hh:84
long long m_flushCnt
nuber of unsynced blcoks on disk before flush is called
Definition: XrdFileCache.hh:108
long long m_fileUsageNominal
cache purge - files usage nominal
Definition: XrdFileCache.hh:94
bool is_age_based_purge_in_effect() const
Definition: XrdFileCache.hh:78
long long m_bufferSize
prefetch buffer size, default 1MB
Definition: XrdFileCache.hh:100
bool are_file_usage_limits_set() const
Definition: XrdFileCache.hh:77
int m_purgeColdFilesPeriod
peform cold file purge every this many purge cycles
Definition: XrdFileCache.hh:98
int m_wqueue_blocks
maximum number of blocks written per write-queue loop
Definition: XrdFileCache.hh:103
Definition: XrdFileCache.hh:112
std::string m_flushRaw
Definition: XrdFileCache.hh:118
std::string m_diskUsageLWM
Definition: XrdFileCache.hh:113
std::string m_fileUsageBaseline
Definition: XrdFileCache.hh:115
std::string m_diskUsageHWM
Definition: XrdFileCache.hh:114
std::string m_fileUsageMax
Definition: XrdFileCache.hh:117
std::string m_fileUsageNominal
Definition: XrdFileCache.hh:116
TmpConfiguration()
Definition: XrdFileCache.hh:120