From f1debb5eb29d5b82e4ed3fbb60fc273a96cdefeb Mon Sep 17 00:00:00 2001 From: Dmitry Kurochkin Date: Sun, 30 Jan 2011 09:06:24 +0300 Subject: [PATCH] Rock::SwapDir::get() implementation. --- src/fs/rock/RockSwapDir.cc | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/fs/rock/RockSwapDir.cc b/src/fs/rock/RockSwapDir.cc index 7bad86b11a..f3ec99b6a8 100644 --- a/src/fs/rock/RockSwapDir.cc +++ b/src/fs/rock/RockSwapDir.cc @@ -36,6 +36,42 @@ Rock::SwapDir::search(String const url, HttpRequest *) assert(false); return NULL; // XXX: implement } +// called when Squid core needs a StoreEntry with a given key +StoreEntry * +Rock::SwapDir::get(const cache_key *key) +{ + sfileno fileno; + const StoreEntryBasics *const basics = map.open(key, fileno); + if (!basics) + return NULL; + + // create a brand new store entry and initialize it with stored basics + StoreEntry *e = new StoreEntry(); + e->lock_count = 0; + e->swap_dirn = index; + e->swap_filen = fileno; + e->swap_file_sz = basics->swap_file_sz; + e->lastref = basics->lastref; + e->timestamp = basics->timestamp; + e->expires = basics->expires; + e->lastmod = basics->lastmod; + e->refcount = basics->refcount; + e->flags = basics->flags; + e->store_status = STORE_OK; + e->setMemStatus(NOT_IN_MEMORY); + e->swap_status = SWAPOUT_DONE; + e->ping_status = PING_NONE; + EBIT_SET(e->flags, ENTRY_CACHABLE); + EBIT_CLR(e->flags, RELEASE_REQUEST); + EBIT_CLR(e->flags, KEY_PRIVATE); + EBIT_SET(e->flags, ENTRY_VALIDATED); + + trackReferences(*e); + + return e; + // the disk entry remains open for reading, protected from modifications +} + // TODO: encapsulate as a tool; identical to CossSwapDir::create() void Rock::SwapDir::create() -- 2.47.3