15 #define TRACE_PURGE(x)
24 const char *FPurgeState::m_traceID =
"Purge";
31 m_nStBlocksReq((iNBytesReq >> 9) + 1ll), m_nStBlocksAccum(0), m_nStBlocksTotal(0),
32 m_tMinTimeStamp(0), m_tMinUVKeepTimeStamp(0)
43 for (
list_i i = m_flist.begin(); i != m_flist.end(); ++i)
45 m_fmap.insert(std::make_pair(i->time, *i));
60 static const char *trc_pfx =
"FPurgeState::CheckFile ";
62 long long nblocks =
fstat.st_blocks;
67 TRACE(
Debug, trc_pfx <<
"could not get access time for " << fst.
m_current_path << fname <<
", using mtime from stat instead.");
68 atime =
fstat.st_mtime;
72 m_nStBlocksTotal += nblocks;
80 if (m_tMinTimeStamp > 0 && atime < m_tMinTimeStamp)
83 m_nStBlocksAccum += nblocks;
85 else if (m_tMinUVKeepTimeStamp > 0 &&
90 m_nStBlocksAccum += nblocks;
92 else if (m_nStBlocksAccum < m_nStBlocksReq || (!m_fmap.empty() && atime < m_fmap.rbegin()->first))
95 m_nStBlocksAccum += nblocks;
98 while (!m_fmap.empty() && m_nStBlocksAccum - m_fmap.rbegin()->second.nStBlocks >= m_nStBlocksReq)
100 m_nStBlocksAccum -= m_fmap.rbegin()->second.nStBlocks;
101 m_fmap.erase(--(m_fmap.rbegin().base()));
108 static const char *trc_pfx =
"FPurgeState::ProcessDirAndRecurse ";
113 const std::string &f_name = it->first;
117 Info cinfo(GetTrace());
121 if (! it->second.has_both()) {
130 CheckFile(fst, i_name.c_str(), cinfo, it->second.stat_data);
145 std::vector<std::string> dirs;
147 for (
auto &dname : dirs)
159 bool success_p =
true;
int stat(const char *path, struct stat *buf)
int fstat(int fildes, struct stat *buf)
const char * XrdSysE2T(int errcode)
static const Configuration & Conf()
static Cache & GetInstance()
Singleton access.
void CheckFile(const FsTraversal &fst, const char *fname, Info &info, struct stat &fstat)
void ProcessDirAndRecurse(FsTraversal &fst)
FPurgeState(long long iNBytesReq, XrdOss &oss)
Constructor.
bool TraverseNamespace(const char *root_path)
void MoveListEntriesToMap()
std::vector< std::string > m_current_dirs
int open_at_ro(const char *fname, XrdOssDF *&ossDF)
std::string m_current_path
int close_delete(XrdOssDF *&ossDF)
bool begin_traversal(DirState *root, const char *root_path)
int unlink_at(const char *fname)
std::set< std::string > m_protected_top_dirs
bool cd_down(const std::string &dir_name)
std::map< std::string, FilePairStat > m_current_files
Status of cached file. Can be read from and written into a binary file.
static const char * s_infoExtension
time_t GetNoCkSumTimeForUVKeep() const
CkSumCheck_e GetCkSumState() const
bool GetLatestDetachTime(time_t &t) const
Get latest detach time.
bool Read(XrdOssDF *fp, const char *dname, const char *fname=0)
Read content of cinfo file into this object.