nix-super/src/libfetchers/cache.hh

94 lines
2.1 KiB
C++
Raw Normal View History

#pragma once
///@file
#include "fetchers.hh"
#include "path.hh"
namespace nix::fetchers {
2023-11-14 14:59:00 +02:00
/**
2023-11-14 14:58:27 +02:00
* A cache for arbitrary `Attrs` -> `Attrs` mappings with a timestamp
* for expiration.
*/
struct Cache
{
2020-07-03 15:50:07 +03:00
virtual ~Cache() { }
2023-11-14 14:59:00 +02:00
/**
* Add a value to the cache. The cache is an arbitrary mapping of
* Attrs to Attrs.
*/
virtual void upsert(
2024-04-10 21:59:18 +03:00
std::string_view domain,
const Attrs & key,
const Attrs & value) = 0;
2023-11-14 14:59:00 +02:00
/**
* Look up a key with infinite TTL.
*/
virtual std::optional<Attrs> lookup(
2024-04-10 21:59:18 +03:00
std::string_view domain,
const Attrs & key) = 0;
2023-11-14 14:59:00 +02:00
/**
* Look up a key. Return nothing if its TTL has exceeded
* `settings.tarballTTL`.
*/
virtual std::optional<Attrs> lookupWithTTL(
2024-04-10 21:59:18 +03:00
std::string_view domain,
const Attrs & key) = 0;
2024-04-10 21:59:18 +03:00
struct Result
{
bool expired = false;
2024-04-10 21:59:18 +03:00
Attrs value;
};
2023-11-14 14:59:00 +02:00
/**
* Look up a key. Return a bool denoting whether its TTL has
* exceeded `settings.tarballTTL`.
*/
2024-04-10 21:59:18 +03:00
virtual std::optional<Result> lookupExpired(
std::string_view domain,
const Attrs & key) = 0;
2024-04-10 21:59:18 +03:00
/**
* Insert a cache entry that has a store path associated with
* it. Such cache entries are always considered stale if the
* associated store path is invalid.
*/
virtual void upsert(
std::string_view domain,
Attrs key,
Store & store,
2024-04-10 21:59:18 +03:00
Attrs value,
const StorePath & storePath) = 0;
2024-04-10 21:59:18 +03:00
struct ResultWithStorePath : Result
{
StorePath storePath;
};
2024-04-10 21:59:18 +03:00
/**
* Look up a store path in the cache. The returned store path will
* be valid, but it may be expired.
*/
virtual std::optional<ResultWithStorePath> lookupStorePath(
std::string_view domain,
Attrs key,
Store & store) = 0;
/**
* Look up a store path in the cache. Return nothing if its TTL
* has exceeded `settings.tarballTTL`.
*/
virtual std::optional<ResultWithStorePath> lookupStorePathWithTTL(
std::string_view domain,
Attrs key,
Store & store) = 0;
};
ref<Cache> getCache();
}