forked from lix-project/lix
Robert Hensing
fb94d5cabd
Fixes #3898 The entire `BinaryCaches` row used to get replaced after it became stale according to the `timestamp` column. In a concurrent scenario, this leads to foreign key conflicts as different instances of the in-process `state.caches` cache now differ, with the consequence that the older process still tries to use the `id` number of the old record. Furthermore, this phenomenon appears to have caused the cache for actual narinfos to be erased about every week, while the default ttl for narinfos was supposed to be 30 days.
52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include "ref.hh"
|
|
#include "nar-info.hh"
|
|
#include "realisation.hh"
|
|
|
|
namespace nix {
|
|
|
|
class NarInfoDiskCache
|
|
{
|
|
public:
|
|
typedef enum { oValid, oInvalid, oUnknown } Outcome;
|
|
|
|
virtual ~NarInfoDiskCache() { }
|
|
|
|
virtual int createCache(const std::string & uri, const Path & storeDir,
|
|
bool wantMassQuery, int priority) = 0;
|
|
|
|
struct CacheInfo
|
|
{
|
|
int id;
|
|
bool wantMassQuery;
|
|
int priority;
|
|
};
|
|
|
|
virtual std::optional<CacheInfo> upToDateCacheExists(const std::string & uri) = 0;
|
|
|
|
virtual std::pair<Outcome, std::shared_ptr<NarInfo>> lookupNarInfo(
|
|
const std::string & uri, const std::string & hashPart) = 0;
|
|
|
|
virtual void upsertNarInfo(
|
|
const std::string & uri, const std::string & hashPart,
|
|
std::shared_ptr<const ValidPathInfo> info) = 0;
|
|
|
|
virtual void upsertRealisation(
|
|
const std::string & uri,
|
|
const Realisation & realisation) = 0;
|
|
virtual void upsertAbsentRealisation(
|
|
const std::string & uri,
|
|
const DrvOutput & id) = 0;
|
|
virtual std::pair<Outcome, std::shared_ptr<Realisation>> lookupRealisation(
|
|
const std::string & uri, const DrvOutput & id) = 0;
|
|
};
|
|
|
|
/* Return a singleton cache object that can be used concurrently by
|
|
multiple threads. */
|
|
ref<NarInfoDiskCache> getNarInfoDiskCache();
|
|
|
|
ref<NarInfoDiskCache> getTestNarInfoDiskCache(Path dbPath);
|
|
|
|
}
|