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(
|
|
|
|
const Attrs & inAttrs,
|
|
|
|
const Attrs & infoAttrs) = 0;
|
|
|
|
|
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(
|
|
|
|
const Attrs & inAttrs) = 0;
|
|
|
|
|
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(
|
|
|
|
const Attrs & inAttrs) = 0;
|
|
|
|
|
|
|
|
struct Result2
|
|
|
|
{
|
|
|
|
bool expired = false;
|
|
|
|
Attrs infoAttrs;
|
|
|
|
};
|
|
|
|
|
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`.
|
|
|
|
*/
|
|
|
|
virtual std::optional<Result2> lookupExpired(
|
|
|
|
const Attrs & inAttrs) = 0;
|
|
|
|
|
|
|
|
/* Old cache for things that have a store path. */
|
2020-03-30 17:04:18 +03:00
|
|
|
virtual void add(
|
2023-11-04 22:25:41 +02:00
|
|
|
Store & store,
|
2020-03-30 17:04:18 +03:00
|
|
|
const Attrs & inAttrs,
|
|
|
|
const Attrs & infoAttrs,
|
2024-04-10 13:46:21 +03:00
|
|
|
const StorePath & storePath) = 0;
|
2020-03-30 17:04:18 +03:00
|
|
|
|
|
|
|
virtual std::optional<std::pair<Attrs, StorePath>> lookup(
|
2023-11-04 22:25:41 +02:00
|
|
|
Store & store,
|
2020-03-30 17:04:18 +03:00
|
|
|
const Attrs & inAttrs) = 0;
|
|
|
|
|
|
|
|
struct Result
|
|
|
|
{
|
|
|
|
bool expired = false;
|
|
|
|
Attrs infoAttrs;
|
|
|
|
StorePath storePath;
|
|
|
|
};
|
|
|
|
|
|
|
|
virtual std::optional<Result> lookupExpired(
|
2023-11-04 22:25:41 +02:00
|
|
|
Store & store,
|
2020-03-30 17:04:18 +03:00
|
|
|
const Attrs & inAttrs) = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
ref<Cache> getCache();
|
|
|
|
|
|
|
|
}
|