XRootD
XrdPfcFPurgeState.hh
Go to the documentation of this file.
1 #ifndef __XRDPFC_FPURGESTATE_HH__
2 #define __XRDPFC_FPURGESTATE_HH__
3 
4 #include <ctime>
5 #include <list>
6 #include <map>
7 #include <string>
8 
9 #include <sys/stat.h>
10 
11 class XrdOss;
12 
13 namespace XrdPfc {
14 
15 class Info;
16 class FsTraversal;
17 
18 //==============================================================================
19 // FPurgeState
20 //==============================================================================
21 
23 {
24 public:
25  struct PurgeCandidate // unknown meaning, "file that is candidate for purge", PurgeCandidate would be better.
26  {
27  std::string path;
28  long long nStBlocks;
29  time_t time;
30 
31  PurgeCandidate(const std::string &dname, const char *fname, long long n, time_t t) :
32  path(dname + fname), nStBlocks(n), time(t)
33  {}
34  };
35 
36  using list_t = std::list<PurgeCandidate>;
37  using list_i = list_t::iterator;
38  using map_t = std::multimap<time_t, PurgeCandidate>;
39  using map_i = map_t::iterator;
40 
41 private:
42  XrdOss &m_oss;
43 
44  long long m_nStBlocksReq;
45  long long m_nStBlocksAccum;
46  long long m_nStBlocksTotal;
47  time_t m_tMinTimeStamp;
48  time_t m_tMinUVKeepTimeStamp;
49 
50  static const char *m_traceID;
51 
52  list_t m_flist; // list of files to be removed unconditionally
53  map_t m_fmap; // map of files that are purge candidates
54 
55 public:
56  FPurgeState(long long iNBytesReq, XrdOss &oss);
57 
58  map_t &refMap() { return m_fmap; }
59  list_t &refList() { return m_flist; }
60 
61  void setMinTime(time_t min_time) { m_tMinTimeStamp = min_time; }
62  time_t getMinTime() const { return m_tMinTimeStamp; }
63  void setUVKeepMinTime(time_t min_time) { m_tMinUVKeepTimeStamp = min_time; }
64  long long getNStBlocksTotal() const { return m_nStBlocksTotal; }
65  long long getNBytesTotal() const { return 512ll * m_nStBlocksTotal; }
66 
67  void MoveListEntriesToMap();
68 
69  void CheckFile(const FsTraversal &fst, const char *fname, time_t atime, struct stat &fstat);
70 
72  bool TraverseNamespace(const char *root_path);
73 };
74 
75 } // namespace XrdPfc
76 
77 #endif
@ Info
int stat(const char *path, struct stat *buf)
int fstat(int fildes, struct stat *buf)
long long getNStBlocksTotal() const
time_t getMinTime() const
map_t::iterator map_i
void CheckFile(const FsTraversal &fst, const char *fname, time_t atime, struct stat &fstat)
void ProcessDirAndRecurse(FsTraversal &fst)
void setUVKeepMinTime(time_t min_time)
std::list< PurgeCandidate > list_t
std::multimap< time_t, PurgeCandidate > map_t
FPurgeState(long long iNBytesReq, XrdOss &oss)
Constructor.
void setMinTime(time_t min_time)
bool TraverseNamespace(const char *root_path)
long long getNBytesTotal() const
list_t::iterator list_i
Definition: XrdPfc.hh:41
PurgeCandidate(const std::string &dname, const char *fname, long long n, time_t t)