about summary refs log tree commit diff
path: root/src/libstore/nar-info-disk-cache.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-06-01T13·15+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-06-01T14·24+0200
commitcf198952d02aae5585e9bb895577b5b4e7b25707 (patch)
tree2161ec8760bf9d2ca64c14c1440e7db31bb1d1be /src/libstore/nar-info-disk-cache.cc
parent7850d3d27910c30232dd09dd86ee8afdaad26b90 (diff)
HttpBinaryCacheStore: Fix caching of WantMassQuery
Also, test HttpBinaryCacheStore in addition to LocalBinaryCacheStore.
Diffstat (limited to 'src/libstore/nar-info-disk-cache.cc')
-rw-r--r--src/libstore/nar-info-disk-cache.cc24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/libstore/nar-info-disk-cache.cc b/src/libstore/nar-info-disk-cache.cc
index b05f2661ea..0751dda192 100644
--- a/src/libstore/nar-info-disk-cache.cc
+++ b/src/libstore/nar-info-disk-cache.cc
@@ -57,6 +57,8 @@ public:
     {
         int id;
         Path storeDir;
+        bool wantMassQuery;
+        int priority;
     };
 
     struct State
@@ -126,24 +128,28 @@ public:
 
         state->insertCache.use()(uri)(time(0))(storeDir)(wantMassQuery)(priority).exec();
         assert(sqlite3_changes(state->db) == 1);
-        state->caches[uri] = Cache{(int) sqlite3_last_insert_rowid(state->db), storeDir};
+        state->caches[uri] = Cache{(int) sqlite3_last_insert_rowid(state->db), storeDir, wantMassQuery, priority};
     }
 
-    bool cacheExists(const std::string & uri) override
+    bool cacheExists(const std::string & uri,
+        bool & wantMassQuery, int & priority) override
     {
         auto state(_state.lock());
 
         auto i = state->caches.find(uri);
-        if (i != state->caches.end()) return true;
+        if (i == state->caches.end()) {
+            auto queryCache(state->queryCache.use()(uri));
+            if (!queryCache.next()) return false;
+            state->caches.emplace(uri,
+                Cache{(int) queryCache.getInt(0), queryCache.getStr(1), queryCache.getInt(2), (int) queryCache.getInt(3)});
+        }
 
-        auto queryCache(state->queryCache.use()(uri));
+        auto & cache(getCache(*state, uri));
 
-        if (queryCache.next()) {
-            state->caches[uri] = Cache{(int) queryCache.getInt(0), queryCache.getStr(1)};
-            return true;
-        }
+        wantMassQuery = cache.wantMassQuery;
+        priority = cache.priority;
 
-        return false;
+        return true;
     }
 
     std::pair<Outcome, std::shared_ptr<NarInfo>> lookupNarInfo(