2020-03-30 17:04:18 +03:00
|
|
|
#pragma once
|
2023-04-01 06:18:41 +03:00
|
|
|
///@file
|
2020-03-30 17:04:18 +03:00
|
|
|
|
|
|
|
#include "fetchers.hh"
|
2023-10-25 19:18:15 +03:00
|
|
|
#include "path.hh"
|
2020-03-30 17:04:18 +03:00
|
|
|
|
|
|
|
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.
|
|
|
|
*/
|
2020-03-30 17:04:18 +03:00
|
|
|
struct Cache
|
|
|
|
{
|
2020-07-03 15:50:07 +03:00
|
|
|
virtual ~Cache() { }
|
|
|
|
|
2023-11-14 14:59:00 +02:00
|
|
|
/**
|
2023-10-24 09:20:31 +03: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-10-24 09:20:31 +03:00
|
|
|
|
2023-11-14 14:59:00 +02:00
|
|
|
/**
|
2023-10-24 09:20:31 +03: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-10-24 09:20:31 +03:00
|
|
|
|
2023-11-14 14:59:00 +02:00
|
|
|
/**
|
2023-10-24 09:20:31 +03: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;
|
2023-10-24 09:20:31 +03:00
|
|
|
|
2024-04-10 21:59:18 +03:00
|
|
|
struct Result
|
2023-10-24 09:20:31 +03:00
|
|
|
{
|
|
|
|
bool expired = false;
|
2024-04-10 21:59:18 +03:00
|
|
|
Attrs value;
|
2023-10-24 09:20:31 +03:00
|
|
|
};
|
|
|
|
|
2023-11-14 14:59:00 +02:00
|
|
|
/**
|
2023-10-24 09:20:31 +03: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;
|
2023-10-24 09:20:31 +03:00
|
|
|
|
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,
|
2023-11-04 22:25:41 +02:00
|
|
|
Store & store,
|
2024-04-10 21:59:18 +03:00
|
|
|
Attrs value,
|
2024-04-10 13:46:21 +03:00
|
|
|
const StorePath & storePath) = 0;
|
2020-03-30 17:04:18 +03:00
|
|
|
|
2024-04-10 21:59:18 +03:00
|
|
|
struct ResultWithStorePath : Result
|
2020-03-30 17:04:18 +03:00
|
|
|
{
|
|
|
|
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;
|
2020-03-30 17:04:18 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
ref<Cache> getCache();
|
|
|
|
|
|
|
|
}
|