]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Shared Rock::DirMap version 7.
authorDmitry Kurochkin <dmitry.kurochkin@measurement-factory.com>
Tue, 1 Feb 2011 04:59:26 +0000 (07:59 +0300)
committerDmitry Kurochkin <dmitry.kurochkin@measurement-factory.com>
Tue, 1 Feb 2011 04:59:26 +0000 (07:59 +0300)
src/Store.h
src/fs/rock/RockDirMap.cc
src/fs/rock/RockDirMap.h
src/fs/rock/RockSwapDir.cc
src/fs/rock/RockSwapDir.h
src/store.cc

index 6f661952b0c32b481c246187df59b9ca43b4dc04..b21291bd7bd694ab573691cc59efab3d571b305b 100644 (file)
@@ -85,7 +85,7 @@ public:
     virtual const char *getMD5Text() const;
     StoreEntry();
     StoreEntry(const char *url, const char *log_url);
-    virtual ~StoreEntry() {}
+    virtual ~StoreEntry();
 
     virtual HttpReply const *getReply() const;
     virtual void write (StoreIOBuffer);
index 30dd39c222beb6c16a7759544822abaf6b8cf537..dfee698abf608054de1bf8e357ba45be3b1615c3 100644 (file)
@@ -61,6 +61,7 @@ Rock::DirMap::closeForWriting(const sfileno fileno)
     assert(valid(fileno));
     Slot &s = shared->slots[fileno];
     assert(s.state == Slot::Writing);
+    ++s.readLevel;
     ++shared->count;
     assert(s.state.swap_if(Slot::Writing, Slot::Usable));
 }
index ba0d314a043e831e708de3aca169c3008c832b9f..a083b5eefa4d629a229240b2556e6d427190e21f 100644 (file)
@@ -31,7 +31,7 @@ public:
 
     /// start writing a new entry
     StoreEntryBasics *openForWriting(const cache_key *const key, sfileno &fileno);
-    /// finish writing a new entry
+    /// finish writing a new entry, leaves the entry opened for reading
     void closeForWriting(const sfileno fileno);
 
     /// mark slot as waiting to be freed, will be freed when no one uses it
index 20029aba5ac95ba72271bf9f84b67dda574e5775..c411b2c855cafd055d5a48eba3faf961ad5c71f1 100644 (file)
@@ -66,7 +66,6 @@ Rock::SwapDir::get(const cache_key *key)
     EBIT_CLR(e->flags, RELEASE_REQUEST);
     EBIT_CLR(e->flags, KEY_PRIVATE);
     EBIT_SET(e->flags, ENTRY_VALIDATED);
-
     e->hashInsert(key);
     trackReferences(*e);
 
@@ -74,6 +73,16 @@ Rock::SwapDir::get(const cache_key *key)
     // the disk entry remains open for reading, protected from modifications
 }
 
+void
+Rock::SwapDir::closeForReading(StoreEntry &e)
+{
+    assert(index == e.swap_dirn);
+    assert(e.swap_filen >= 0);
+    map->closeForReading(e.swap_filen);
+    e.swap_dirn = -1;
+    e.swap_filen = -1;
+}
+
 // TODO: encapsulate as a tool; identical to CossSwapDir::create()
 void
 Rock::SwapDir::create()
index 6637169b71d8664fd205d6cdd300cb3133be8a5e..2f91692d6914acdd25d80e8681957e306d3fbba7 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "SwapDir.h"
 #include "DiskIO/IORequestor.h"
-#include "rock/RockDirMap.h"
+#include "fs/rock/RockDirMap.h"
 
 class DiskIOStrategy;
 class DiskFile;
@@ -26,6 +26,8 @@ public:
     virtual StoreSearch *search(String const url, HttpRequest *);
     virtual StoreEntry *get(const cache_key *key);
 
+    void closeForReading(StoreEntry &e);
+
 protected:
     /* protected ::SwapDir API */
     virtual void create();
index dbe9007c1b583b0b7feaa8b8f6285b17e86dc60a..6284558a83ad2f520ef5eade03a49b6284c95c1b 100644 (file)
@@ -53,6 +53,7 @@
 #include "SquidTime.h"
 #include "swap_log_op.h"
 #include "mgr/StoreIoAction.h"
+#include "fs/rock/RockSwapDir.h"
 
 static STMCB storeWriteComplete;
 
@@ -387,6 +388,16 @@ StoreEntry::StoreEntry(const char *aUrl, const char *aLogUrl):
     swap_dirn = -1;
 }
 
+StoreEntry::~StoreEntry()
+{
+    if (swap_filen >= 0) {
+        // XXX: support cache types other than Rock
+        Rock::SwapDir &rockSwapDir =
+            dynamic_cast<Rock::SwapDir &>(*store());
+        rockSwapDir.closeForReading(*this);
+    }
+}
+
 void
 StoreEntry::destroyMemObject()
 {