forked from lix-project/hydra
After uploading a .narinfo, add it to the LRU cache
This commit is contained in:
parent
88a05763cc
commit
5668aa5f71
|
@ -50,33 +50,33 @@ void BinaryCacheStore::addToCache(const ValidPathInfo & info,
|
||||||
auto narInfoFile = narInfoFileFor(info.path);
|
auto narInfoFile = narInfoFileFor(info.path);
|
||||||
if (fileExists(narInfoFile)) return;
|
if (fileExists(narInfoFile)) return;
|
||||||
|
|
||||||
NarInfo narInfo(info);
|
auto narInfo = make_ref<NarInfo>(info);
|
||||||
|
|
||||||
narInfo.narSize = nar.size();
|
narInfo->narSize = nar.size();
|
||||||
narInfo.narHash = hashString(htSHA256, nar);
|
narInfo->narHash = hashString(htSHA256, nar);
|
||||||
|
|
||||||
if (info.narHash.type != htUnknown && info.narHash != narInfo.narHash)
|
if (info.narHash.type != htUnknown && info.narHash != narInfo->narHash)
|
||||||
throw Error(format("refusing to copy corrupted path ‘%1%’ to binary cache") % info.path);
|
throw Error(format("refusing to copy corrupted path ‘%1%’ to binary cache") % info.path);
|
||||||
|
|
||||||
/* Compress the NAR. */
|
/* Compress the NAR. */
|
||||||
narInfo.compression = "xz";
|
narInfo->compression = "xz";
|
||||||
auto now1 = std::chrono::steady_clock::now();
|
auto now1 = std::chrono::steady_clock::now();
|
||||||
string narXz = compressXZ(nar);
|
string narXz = compressXZ(nar);
|
||||||
auto now2 = std::chrono::steady_clock::now();
|
auto now2 = std::chrono::steady_clock::now();
|
||||||
narInfo.fileHash = hashString(htSHA256, narXz);
|
narInfo->fileHash = hashString(htSHA256, narXz);
|
||||||
narInfo.fileSize = narXz.size();
|
narInfo->fileSize = narXz.size();
|
||||||
|
|
||||||
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(now2 - now1).count();
|
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(now2 - now1).count();
|
||||||
printMsg(lvlTalkative, format("copying path ‘%1%’ (%2% bytes, compressed %3$.1f%% in %4% ms) to binary cache")
|
printMsg(lvlTalkative, format("copying path ‘%1%’ (%2% bytes, compressed %3$.1f%% in %4% ms) to binary cache")
|
||||||
% narInfo.path % narInfo.narSize
|
% narInfo->path % narInfo->narSize
|
||||||
% ((1.0 - (double) narXz.size() / nar.size()) * 100.0)
|
% ((1.0 - (double) narXz.size() / nar.size()) * 100.0)
|
||||||
% duration);
|
% duration);
|
||||||
|
|
||||||
/* Atomically write the NAR file. */
|
/* Atomically write the NAR file. */
|
||||||
narInfo.url = "nar/" + printHash32(narInfo.fileHash) + ".nar.xz";
|
narInfo->url = "nar/" + printHash32(narInfo->fileHash) + ".nar.xz";
|
||||||
if (!fileExists(narInfo.url)) {
|
if (!fileExists(narInfo->url)) {
|
||||||
stats.narWrite++;
|
stats.narWrite++;
|
||||||
upsertFile(narInfo.url, narXz);
|
upsertFile(narInfo->url, narXz);
|
||||||
} else
|
} else
|
||||||
stats.narWriteAverted++;
|
stats.narWriteAverted++;
|
||||||
|
|
||||||
|
@ -85,9 +85,15 @@ void BinaryCacheStore::addToCache(const ValidPathInfo & info,
|
||||||
stats.narWriteCompressionTimeMs += duration;
|
stats.narWriteCompressionTimeMs += duration;
|
||||||
|
|
||||||
/* Atomically write the NAR info file.*/
|
/* Atomically write the NAR info file.*/
|
||||||
if (secretKey) narInfo.sign(*secretKey);
|
if (secretKey) narInfo->sign(*secretKey);
|
||||||
|
|
||||||
upsertFile(narInfoFile, narInfo.to_string());
|
upsertFile(narInfoFile, narInfo->to_string());
|
||||||
|
|
||||||
|
{
|
||||||
|
auto state_(state.lock());
|
||||||
|
state_->narInfoCache.upsert(narInfo->path, narInfo);
|
||||||
|
stats.narInfoCacheSize = state_->narInfoCache.size();
|
||||||
|
}
|
||||||
|
|
||||||
stats.narInfoWrite++;
|
stats.narInfoWrite++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue