oasys::OpenFdCache< _Key, _CloseFcn > Class Template Reference

#include <OpenFdCache.h>

Inheritance diagram for oasys::OpenFdCache< _Key, _CloseFcn >:

oasys::Logger List of all members.

Detailed Description

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
class oasys::OpenFdCache< _Key, _CloseFcn >

Maintains a cache of open files to get rid of calls to syscall open().

Definition at line 25 of file OpenFdCache.h.

Public Types

typedef LRUList< FdListEntFdList
typedef std::map< _Key, typename
FdList::iterator > 
FdMap

Public Member Functions

 OpenFdCache (const char *logpath, size_t max)
int get_and_pin (const _Key &key)
void unpin (const _Key &key)
int put_and_pin (const _Key &key, int fd)
void close (const _Key &key)
void close_all ()

Private Member Functions

int evict ()

Private Attributes

SpinLock lock_
FdList open_fds_
FdMap open_fds_map_
size_t max_

Classes

struct  FdListEnt


Member Typedef Documentation

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
typedef LRUList<FdListEnt> oasys::OpenFdCache< _Key, _CloseFcn >::FdList

Definition at line 42 of file OpenFdCache.h.

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
typedef std::map<_Key, typename FdList::iterator> oasys::OpenFdCache< _Key, _CloseFcn >::FdMap

Definition at line 43 of file OpenFdCache.h.


Constructor & Destructor Documentation

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
oasys::OpenFdCache< _Key, _CloseFcn >::OpenFdCache ( const char *  logpath,
size_t  max 
) [inline]

Definition at line 45 of file OpenFdCache.h.


Member Function Documentation

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
int oasys::OpenFdCache< _Key, _CloseFcn >::get_and_pin ( const _Key &  key  )  [inline]

Returns:
-1 if the fd is not in the cache, otherwise the fd of the open file. Also pin the fd so it can't be closed.

Definition at line 55 of file OpenFdCache.h.

References ASSERT, ExamineDump::l, oasys::OpenFdCache< _Key, _CloseFcn >::lock_, log_debug, oasys::LRUList< _Type >::move_to_back(), oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_, and oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_map_.

Referenced by oasys::FileSystemTable::get_common(), and oasys::FileSystemTable::put().

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
void oasys::OpenFdCache< _Key, _CloseFcn >::unpin ( const _Key &  key  )  [inline]

Unpin the fd referenced by _Key.

Definition at line 81 of file OpenFdCache.h.

References ASSERT, ExamineDump::l, oasys::OpenFdCache< _Key, _CloseFcn >::lock_, log_debug, and oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_map_.

Referenced by oasys::FileSystemTable::get_common(), and oasys::FileSystemTable::put().

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
int oasys::OpenFdCache< _Key, _CloseFcn >::put_and_pin ( const _Key &  key,
int  fd 
) [inline]

Put an fd in the file cache which may evict unpinned fds. Also pin the fd that was just put into the cache.

N.B. There could be race when you are putting a newly opened file (and someone else is trying to do the same) into the cache. You need to check the return from put_and_pin as to whether you will need to close the file or not.

Returns:
Fd

Definition at line 107 of file OpenFdCache.h.

References ASSERT, oasys::OpenFdCache< _Key, _CloseFcn >::evict(), ExamineDump::l, oasys::OpenFdCache< _Key, _CloseFcn >::lock_, log_debug, oasys::OpenFdCache< _Key, _CloseFcn >::max_, oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_, and oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_map_.

Referenced by oasys::FileSystemTable::get_common(), and oasys::FileSystemTable::put().

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
void oasys::OpenFdCache< _Key, _CloseFcn >::close ( const _Key &  key  )  [inline]

Close a file fd and remove it from the cache.

Definition at line 149 of file OpenFdCache.h.

References log_debug, oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_, and oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_map_.

Referenced by oasys::FileSystemTable::del().

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
void oasys::OpenFdCache< _Key, _CloseFcn >::close_all (  )  [inline]

Close and release all of the cached fds.

Definition at line 168 of file OpenFdCache.h.

References log_debug, log_warn, oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_, and oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_map_.

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
int oasys::OpenFdCache< _Key, _CloseFcn >::evict (  )  [inline, private]

Search from the beginning of the list and throw out a single, unpinned fd.

Returns:
0 if evict succeed or -1 we are totally pinned and can't do anything.

Definition at line 201 of file OpenFdCache.h.

References ASSERT, log_debug, log_warn, oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_, and oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_map_.

Referenced by oasys::OpenFdCache< _Key, _CloseFcn >::put_and_pin().


Member Data Documentation

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
SpinLock oasys::OpenFdCache< _Key, _CloseFcn >::lock_ [private]

Definition at line 187 of file OpenFdCache.h.

Referenced by oasys::OpenFdCache< _Key, _CloseFcn >::get_and_pin(), oasys::OpenFdCache< _Key, _CloseFcn >::put_and_pin(), and oasys::OpenFdCache< _Key, _CloseFcn >::unpin().

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
FdList oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_ [private]

Definition at line 189 of file OpenFdCache.h.

Referenced by oasys::OpenFdCache< _Key, _CloseFcn >::close(), oasys::OpenFdCache< _Key, _CloseFcn >::close_all(), oasys::OpenFdCache< _Key, _CloseFcn >::evict(), oasys::OpenFdCache< _Key, _CloseFcn >::get_and_pin(), and oasys::OpenFdCache< _Key, _CloseFcn >::put_and_pin().

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
FdMap oasys::OpenFdCache< _Key, _CloseFcn >::open_fds_map_ [private]

Definition at line 190 of file OpenFdCache.h.

Referenced by oasys::OpenFdCache< _Key, _CloseFcn >::close(), oasys::OpenFdCache< _Key, _CloseFcn >::close_all(), oasys::OpenFdCache< _Key, _CloseFcn >::evict(), oasys::OpenFdCache< _Key, _CloseFcn >::get_and_pin(), oasys::OpenFdCache< _Key, _CloseFcn >::put_and_pin(), and oasys::OpenFdCache< _Key, _CloseFcn >::unpin().

template<typename _Key, typename _CloseFcn = OpenFdCacheClose>
size_t oasys::OpenFdCache< _Key, _CloseFcn >::max_ [private]

Definition at line 192 of file OpenFdCache.h.

Referenced by oasys::OpenFdCache< _Key, _CloseFcn >::put_and_pin().


The documentation for this class was generated from the following file:
Generated on Fri Dec 22 14:48:08 2006 for DTN Reference Implementation by  doxygen 1.5.1