Prevent the global registry from being GC'ed

Issue #2868.
This commit is contained in:
Eelco Dolstra 2019-05-22 23:43:58 +02:00
parent df3f5a78d5
commit f0d6d67af9
3 changed files with 5 additions and 0 deletions

View file

@ -139,6 +139,7 @@ std::shared_ptr<FlakeRegistry> EvalState::getGlobalFlakeRegistry()
if (!hasPrefix(path, "/")) { if (!hasPrefix(path, "/")) {
CachedDownloadRequest request(evalSettings.flakeRegistry); CachedDownloadRequest request(evalSettings.flakeRegistry);
request.name = "flake-registry.json"; request.name = "flake-registry.json";
request.gcRoot = true;
path = getDownloader()->downloadCached(store, request).path; path = getDownloader()->downloadCached(store, request).path;
} }

View file

@ -913,6 +913,9 @@ CachedDownloadResult Downloader::downloadCached(
url, request.expectedHash.to_string(), gotHash.to_string()); url, request.expectedHash.to_string(), gotHash.to_string());
} }
if (request.gcRoot)
store->addIndirectRoot(fileLink);
result.storePath = storePath; result.storePath = storePath;
result.path = store->toRealPath(storePath); result.path = store->toRealPath(storePath);
return result; return result;

View file

@ -48,6 +48,7 @@ struct CachedDownloadRequest
std::string name; std::string name;
Hash expectedHash; Hash expectedHash;
unsigned int ttl = settings.tarballTtl; unsigned int ttl = settings.tarballTtl;
bool gcRoot = false;
CachedDownloadRequest(const std::string & uri) CachedDownloadRequest(const std::string & uri)
: uri(uri) { } : uri(uri) { }