nix-super/src/libfetchers/cache.hh

97 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
/**
* A domain is a partition of the key/value cache for a particular
* purpose, e.g. git revision to revcount.
*/
using Domain = std::string_view;
/**
* A cache key is a domain and an arbitrary set of attributes.
*/
using Key = std::pair<Domain, Attrs>;
/**
* Add a key/value pair to the cache.
*/
virtual void upsert(
const Key & key,
2024-04-10 21:59:18 +03:00
const Attrs & value) = 0;
2023-11-14 14:59:00 +02:00
/**
* Look up a key with infinite TTL.
*/
virtual std::optional<Attrs> lookup(
const Key & 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(
const Key & 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(
const Key & 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(
Key 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(
Key key,
2024-04-10 21:59:18 +03:00
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(
Key key,
2024-04-10 21:59:18 +03:00
Store & store) = 0;
};
ref<Cache> getCache();
}