21 #include <sys/resource.h>
29 getrlimit(RLIMIT_NOFILE, &rlim);
30 assert(rlim.rlim_cur > 3);
46 auto close_call = meta->m_request_close;
48 closed = close_call();
55 throw Elements::Exception() <<
"Limit reached and failed to close any existing file descriptor";
void notifyOpenedFile(FileId id) override
unsigned getAvailable() const
FileMetadata * FileId
Opaque FileId, its concrete type should only be assumed to be copyable and hashable.
std::map< FileId, std::unique_ptr< FileMetadata > > m_files
LRUFileManager(unsigned limit=500)
std::list< FileId > m_sorted_ids
Sorted from less to more recent.
void notifyIntentToOpen(bool write) override
unsigned getLimit() const
std::map< FileId, std::list< FileId >::iterator > m_current_pos
void notifyClosedFile(FileId id) override
virtual ~LRUFileManager()
void notifyUsed(FileId id) override