#include <HTTPCacheTable.h>
Collaboration diagram for libdap::HTTPCacheTable:
Methods to manipulate instances of CacheEntry. | |
void | add_entry_to_cache_table (CacheEntry *entry) |
void | calculate_time (HTTPCacheTable::CacheEntry *entry, int default_expiration, time_t request_time) |
void | delete_all_entries () |
CacheEntry * | get_locked_entry_from_cache_table (const string &url) |
CacheEntry * | get_write_locked_entry_from_cache_table (const string &url) |
void | parse_headers (HTTPCacheTable::CacheEntry *entry, unsigned long max_entry_size, const vector< string > &headers) |
void | remove_cache_entry (HTTPCacheTable::CacheEntry *entry) |
void | remove_entry_from_cache_table (const string &url) |
Public Types | |
typedef vector< CacheEntry * > | CacheEntries |
typedef CacheEntries::iterator | CacheEntriesIter |
typedef CacheEntries ** | CacheTable |
Public Member Functions | |
void | bind_entry_to_data (CacheEntry *entry, FILE *body) |
string | create_hash_directory (int hash) |
void | create_location (CacheEntry *entry) |
void | delete_by_hits (int hits) |
void | delete_by_size (unsigned int size) |
void | delete_expired_entries (time_t time=0) |
HTTPCacheTable (const string &cache_root, int block_size) | |
bool | is_locked_read_responses () |
void | uncouple_entry_from_data (FILE *body) |
~HTTPCacheTable () | |
Cache Index | |
These methods manage the cache's index file. Each cache holds an index file named .index which stores the cache's state information. | |
bool | cache_index_delete () |
CacheEntry * | cache_index_parse_line (const char *line) |
bool | cache_index_read () |
void | cache_index_write () |
unsigned int | get_block_size () const |
string | get_cache_root () |
unsigned long | get_current_size () const |
int | get_new_entries () const |
void | increment_new_entries () |
void | set_block_size (unsigned int sz) |
void | set_cache_root (const string &cr) |
void | set_current_size (unsigned long sz) |
Friends | |
class | HTTPCacheTest |
Classes | |
struct | CacheEntry |
Definition at line 81 of file HTTPCacheTable.h.
typedef vector<CacheEntry *> libdap::HTTPCacheTable::CacheEntries |
Definition at line 253 of file HTTPCacheTable.h.
typedef CacheEntries::iterator libdap::HTTPCacheTable::CacheEntriesIter |
Definition at line 254 of file HTTPCacheTable.h.
Definition at line 256 of file HTTPCacheTable.h.
libdap::HTTPCacheTable::HTTPCacheTable | ( | const string & | cache_root, | |
int | block_size | |||
) |
Definition at line 107 of file HTTPCacheTable.cc.
libdap::HTTPCacheTable::~HTTPCacheTable | ( | ) |
Definition at line 137 of file HTTPCacheTable.cc.
void libdap::HTTPCacheTable::add_entry_to_cache_table | ( | CacheEntry * | entry | ) |
Add a CacheEntry to the cache table. As each entry is read, load it into the in-memory cache table and update the HTTPCache's current_size. The later is used by the garbage collection method.
entry | The CacheEntry instance to add. |
Definition at line 539 of file HTTPCacheTable.cc.
Referenced by libdap::HTTPCache::cache_response().
void libdap::HTTPCacheTable::bind_entry_to_data | ( | CacheEntry * | entry, | |
FILE * | body | |||
) |
Definition at line 837 of file HTTPCacheTable.cc.
Referenced by libdap::HTTPCache::get_cached_response().
bool libdap::HTTPCacheTable::cache_index_delete | ( | ) |
Remove the cache index file.
A private method.
Definition at line 281 of file HTTPCacheTable.cc.
HTTPCacheTable::CacheEntry * libdap::HTTPCacheTable::cache_index_parse_line | ( | const char * | line | ) |
Parse one line of the index file.
A private method.
line | A single line from the .index file. |
line
. Definition at line 330 of file HTTPCacheTable.cc.
bool libdap::HTTPCacheTable::cache_index_read | ( | ) |
Read the saved set of cached entries from disk. Consistency between the in-memory cache and the index is maintained by only reading the index file when the HTTPCache object is created!
A private method.
Definition at line 297 of file HTTPCacheTable.cc.
void libdap::HTTPCacheTable::cache_index_write | ( | ) |
Walk through the list of cached objects and write the cache index file to disk. If the file does not exist, it is created. If the file does exist, it is overwritten. As a side effect, zero the new_entries counter.
A private method.
Error | Thrown if the index file cannot be opened for writing. |
Definition at line 404 of file HTTPCacheTable.cc.
Referenced by libdap::HTTPCache::cache_response(), libdap::HTTPCache::set_max_entry_size(), libdap::HTTPCache::set_max_size(), and libdap::HTTPCache::~HTTPCache().
void libdap::HTTPCacheTable::calculate_time | ( | HTTPCacheTable::CacheEntry * | entry, | |
int | default_expiration, | |||
time_t | request_time | |||
) |
Calculate the corrected_initial_age of the object. We use the time when this function is called as the response_time as this is when we have received the complete response. This may cause a delay if the response header is very big but should not cause any incorrect behavior.
A private method.
entry | The CacheEntry object. | |
default_expiration | The default value of the cached object's expiration time. | |
request_time | When was the request made? I think this value must be passed into the method that calls this method... |
Definition at line 740 of file HTTPCacheTable.cc.
References DBG2, and libdap::parse_time().
Referenced by libdap::HTTPCache::cache_response(), and libdap::HTTPCache::update_response().
Here is the call graph for this function:
string libdap::HTTPCacheTable::create_hash_directory | ( | int | hash | ) |
Create the directory path for cache file. The cache uses a set of directories within d_cache_root to store individual responses. The name of the directory that holds a given response is the value returned by the get_hash() function (i.e., it's a number). If the directory exists, this method does nothing.
A private method.
hash | The hash value (i.e., directory name). An integer between 0 and CACHE_TABLE_SIZE (See HTTPCache.h). |
Error | Thrown if the directory cannot be created. |
Definition at line 449 of file HTTPCacheTable.cc.
void libdap::HTTPCacheTable::create_location | ( | HTTPCacheTable::CacheEntry * | entry | ) |
Create the directory for this url (using the hash value from get_hash()) and a file within that directory to hold the response's information. The cache name and cache_body_fd fields of entry
are updated.
mkstemp opens the file it creates, which is a good thing but it makes tracking resources hard for the HTTPCache object (because an exception might cause a file descriptor resource leak). So I close that file descriptor here.
A private method.
entry | The cache entry object to operate on. |
Error | If the file for the response's body cannot be created. |
Definition at line 487 of file HTTPCacheTable.cc.
Referenced by libdap::HTTPCache::cache_response().
void libdap::HTTPCacheTable::delete_all_entries | ( | ) |
Definition at line 711 of file HTTPCacheTable.cc.
References LM_EXPIRATION.
Referenced by libdap::HTTPCache::purge_cache().
void libdap::HTTPCacheTable::delete_by_hits | ( | int | hits | ) |
Definition at line 219 of file HTTPCacheTable.cc.
void libdap::HTTPCacheTable::delete_by_size | ( | unsigned int | size | ) |
Definition at line 254 of file HTTPCacheTable.cc.
void libdap::HTTPCacheTable::delete_expired_entries | ( | time_t | time = 0 |
) |
Definition at line 182 of file HTTPCacheTable.cc.
unsigned int libdap::HTTPCacheTable::get_block_size | ( | ) | const [inline] |
Definition at line 296 of file HTTPCacheTable.h.
string libdap::HTTPCacheTable::get_cache_root | ( | ) | [inline] |
Definition at line 302 of file HTTPCacheTable.h.
unsigned long libdap::HTTPCacheTable::get_current_size | ( | ) | const [inline] |
Definition at line 293 of file HTTPCacheTable.h.
HTTPCacheTable::CacheEntry * libdap::HTTPCacheTable::get_locked_entry_from_cache_table | ( | const string & | url | ) |
Get a pointer to a CacheEntry from the cache table.
url | Look for this URL. |
Definition at line 563 of file HTTPCacheTable.cc.
int libdap::HTTPCacheTable::get_new_entries | ( | ) | const [inline] |
HTTPCacheTable::CacheEntry * libdap::HTTPCacheTable::get_write_locked_entry_from_cache_table | ( | const string & | url | ) |
Get a pointer to a CacheEntry from the cache table. Providing a way to pass the hash code into this method makes it easier to test for correct behavior when two entries collide. 10/07/02 jhrg
url | Look for this URL. |
Definition at line 605 of file HTTPCacheTable.cc.
References libdap::HTTPCacheTable::CacheEntry::lock_write_response(), libdap::HTTPCacheTable::CacheEntry::unlock_write_response(), and libdap::HTTPCacheTable::CacheEntry::url.
Referenced by libdap::HTTPCache::update_response().
Here is the call graph for this function:
void libdap::HTTPCacheTable::increment_new_entries | ( | ) | [inline] |
Definition at line 300 of file HTTPCacheTable.h.
bool libdap::HTTPCacheTable::is_locked_read_responses | ( | ) |
void libdap::HTTPCacheTable::parse_headers | ( | HTTPCacheTable::CacheEntry * | entry, | |
unsigned long | max_entry_size, | |||
const vector< string > & | headers | |||
) |
Parse various headers from the vector (which can be retrieved from libcurl once a response is received) and load the CacheEntry object with values. This method should only be called with headers from a response (it should not be used to parse request headers).
A private method.
entry | Store values from the headers here. | |
max_entry_size | DO not cache entries larger than this. | |
headers | A vector of header lines. |
Definition at line 783 of file HTTPCacheTable.cc.
Referenced by libdap::HTTPCache::cache_response(), and libdap::HTTPCache::update_response().
void libdap::HTTPCacheTable::remove_cache_entry | ( | HTTPCacheTable::CacheEntry * | entry | ) |
Remove a CacheEntry. This means delete the entry's files on disk and free the CacheEntry object. The caller should null the entry's pointer in the cache_table. The total size of the cache is decremented once the entry is deleted.
entry | The CacheEntry to delete. |
InternalErr | Thrown if entry is in use. |
Definition at line 634 of file HTTPCacheTable.cc.
void libdap::HTTPCacheTable::remove_entry_from_cache_table | ( | const string & | url | ) |
Find the CacheEntry for the given url and remove both its information in the persistent store and the entry in d_cache_table. If url
is not in the cache, this method does nothing.
url | Remove this URL's entry. |
InternalErr | Thrown if the CacheEntry for url is locked. |
Definition at line 682 of file HTTPCacheTable.cc.
Referenced by libdap::HTTPCache::cache_response().
void libdap::HTTPCacheTable::set_block_size | ( | unsigned int | sz | ) | [inline] |
Definition at line 297 of file HTTPCacheTable.h.
void libdap::HTTPCacheTable::set_cache_root | ( | const string & | cr | ) | [inline] |
Definition at line 303 of file HTTPCacheTable.h.
void libdap::HTTPCacheTable::set_current_size | ( | unsigned long | sz | ) | [inline] |
Definition at line 294 of file HTTPCacheTable.h.
void libdap::HTTPCacheTable::uncouple_entry_from_data | ( | FILE * | body | ) |
Definition at line 845 of file HTTPCacheTable.cc.
Referenced by libdap::HTTPCache::release_cached_response().
friend class HTTPCacheTest [friend] |
Definition at line 258 of file HTTPCacheTable.h.