15 #define TRACE_PURGE(x)
19 const char *FPurgeState::m_traceID =
"Purge";
26 m_nStBlocksReq((iNBytesReq >> 9) + 1ll), m_nStBlocksAccum(0), m_nStBlocksTotal(0),
27 m_tMinTimeStamp(0), m_tMinUVKeepTimeStamp(0)
38 for (
list_i i = m_flist.begin(); i != m_flist.end(); ++i)
40 m_fmap.insert(std::make_pair(i->time, *i));
55 long long nblocks =
fstat.st_blocks;
58 m_nStBlocksTotal += nblocks;
66 if (m_tMinTimeStamp > 0 && atime < m_tMinTimeStamp)
69 m_nStBlocksAccum += nblocks;
71 else if (m_nStBlocksAccum < m_nStBlocksReq || (!m_fmap.empty() && atime < m_fmap.rbegin()->first))
74 m_nStBlocksAccum += nblocks;
77 while (!m_fmap.empty() && m_nStBlocksAccum - m_fmap.rbegin()->second.nStBlocks >= m_nStBlocksReq)
79 m_nStBlocksAccum -= m_fmap.rbegin()->second.nStBlocks;
80 m_fmap.erase(--(m_fmap.rbegin().base()));
90 const std::string &f_name = it->first;
95 if (! it->second.has_both()) {
101 time_t atime = it->second.stat_cinfo.st_mtime;
102 CheckFile(fst, i_name.c_str(), atime, it->second.stat_data);
107 std::vector<std::string> dirs;
109 for (
auto &dname : dirs)
121 bool success_p =
true;
int stat(const char *path, struct stat *buf)
int fstat(int fildes, struct stat *buf)
void CheckFile(const FsTraversal &fst, const char *fname, time_t atime, 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
std::string m_current_path
bool begin_traversal(DirState *root, const char *root_path)
std::set< std::string > m_protected_top_dirs
bool cd_down(const std::string &dir_name)
std::map< std::string, FilePairStat > m_current_files
static const char * s_infoExtension