2023-05-08 17:20:06 +03:00
|
|
|
#include "local-store.hh"
|
|
|
|
|
|
|
|
namespace nix {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Configuration for `LocalOverlayStore`.
|
|
|
|
*/
|
|
|
|
struct LocalOverlayStoreConfig : virtual LocalStoreConfig
|
|
|
|
{
|
|
|
|
// FIXME why doesn't this work?
|
|
|
|
// using LocalStoreConfig::LocalStoreConfig;
|
|
|
|
|
|
|
|
LocalOverlayStoreConfig(const StringMap & params)
|
|
|
|
: StoreConfig(params)
|
|
|
|
, LocalFSStoreConfig(params)
|
|
|
|
, LocalStoreConfig(params)
|
|
|
|
{ }
|
|
|
|
|
|
|
|
const Setting<std::string> lowerStoreUri{(StoreConfig*) this, "", "lower-store",
|
|
|
|
R"(
|
|
|
|
[Store URL](@docroot@/command-ref/new-cli/nix3-help-stores.md#store-url-format)
|
|
|
|
for the lower store. The default is `auto` (i.e. use the Nix daemon or `/nix/store` directly).
|
|
|
|
|
|
|
|
Must be a store with a store dir on the file system.
|
2023-05-09 01:50:16 +03:00
|
|
|
Must be used as OverlayFS lower layer for this store's store dir.
|
|
|
|
)"};
|
|
|
|
|
2023-05-15 12:29:06 +03:00
|
|
|
const PathSetting upperLayer{(StoreConfig*) this, false, "", "upper-layer",
|
2023-05-09 01:50:16 +03:00
|
|
|
R"(
|
|
|
|
Must be used as OverlayFS upper layer for this store's store dir.
|
2023-05-08 17:20:06 +03:00
|
|
|
)"};
|
|
|
|
|
2023-05-15 12:20:16 +03:00
|
|
|
Setting<bool> checkMount{(StoreConfig*) this, true, "check-mount",
|
|
|
|
"Check that the overlay filesystem is correctly mounted."};
|
|
|
|
|
2023-05-08 17:20:06 +03:00
|
|
|
const std::string name() override { return "Experimental Local Overlay Store"; }
|
|
|
|
|
|
|
|
std::string doc() override
|
|
|
|
{
|
|
|
|
return
|
|
|
|
""
|
|
|
|
// FIXME write docs
|
|
|
|
//#include "local-overlay-store.md"
|
|
|
|
;
|
|
|
|
}
|
2023-05-09 01:50:16 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Given a store path, get its location (if it is exists) in the
|
|
|
|
* upper layer of the overlayfs.
|
|
|
|
*/
|
|
|
|
Path toUpperPath(const StorePath & path);
|
2023-05-08 17:20:06 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Variation of local store using overlayfs for the store dir.
|
|
|
|
*/
|
|
|
|
class LocalOverlayStore : public virtual LocalOverlayStoreConfig, public virtual LocalStore
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* The store beneath us.
|
|
|
|
*
|
|
|
|
* Our store dir should be an overlay fs where the lower layer
|
|
|
|
* is that store's store dir, and the upper layer is some
|
|
|
|
* scratch storage just for us.
|
|
|
|
*/
|
|
|
|
ref<LocalFSStore> lowerStore;
|
|
|
|
|
|
|
|
public:
|
|
|
|
LocalOverlayStore(const Params & params);
|
|
|
|
|
|
|
|
LocalOverlayStore(std::string scheme, std::string path, const Params & params)
|
|
|
|
: LocalOverlayStore(params)
|
|
|
|
{
|
|
|
|
throw UnimplementedError("LocalOverlayStore");
|
|
|
|
}
|
|
|
|
|
|
|
|
static std::set<std::string> uriSchemes()
|
|
|
|
{ return {}; }
|
|
|
|
|
|
|
|
std::string getUri() override
|
|
|
|
{
|
|
|
|
return "local-overlay";
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
// Overridden methods…
|
2023-05-08 23:48:55 +03:00
|
|
|
|
|
|
|
void registerDrvOutput(const Realisation & info) override;
|
2023-05-09 00:30:17 +03:00
|
|
|
|
|
|
|
void queryPathInfoUncached(const StorePath & path,
|
|
|
|
Callback<std::shared_ptr<const ValidPathInfo>> callback) noexcept override;
|
2023-05-09 01:50:16 +03:00
|
|
|
|
|
|
|
bool isValidPathUncached(const StorePath & path) override;
|
|
|
|
|
2023-05-10 00:20:58 +03:00
|
|
|
void queryReferrers(const StorePath & path, StorePathSet & referrers) override;
|
|
|
|
|
|
|
|
StorePathSet queryValidDerivers(const StorePath & path) override;
|
|
|
|
|
2023-05-09 17:40:10 +03:00
|
|
|
std::optional<StorePath> queryPathFromHashPart(const std::string & hashPart) override;
|
|
|
|
|
2023-05-09 17:22:38 +03:00
|
|
|
void registerValidPaths(const ValidPathInfos & infos) override;
|
|
|
|
|
2023-05-09 01:50:16 +03:00
|
|
|
void addToStore(const ValidPathInfo & info, Source & source,
|
|
|
|
RepairFlag repair, CheckSigsFlag checkSigs) override;
|
|
|
|
|
|
|
|
StorePath addToStoreFromDump(Source & dump, std::string_view name,
|
|
|
|
FileIngestionMethod method, HashType hashAlgo, RepairFlag repair, const StorePathSet & references) override;
|
|
|
|
|
|
|
|
StorePath addTextToStore(
|
|
|
|
std::string_view name,
|
|
|
|
std::string_view s,
|
|
|
|
const StorePathSet & references,
|
|
|
|
RepairFlag repair) override;
|
|
|
|
|
|
|
|
void queryRealisationUncached(const DrvOutput&,
|
|
|
|
Callback<std::shared_ptr<const Realisation>> callback) noexcept override;
|
2023-05-08 17:20:06 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|