libstore/binary-cache-store: use correct buffer size for NAR decompression
Due to a leftover from a previous version where the buffer was allocated on the stack, the change introduced in commit4ec87742a1
accidentally passes the size of a pointer as the size of the buffer to the decompressor. Since the former is much smaller (usually 8 bytes instead of 64 kilobytes), this is safe, but leads to considerable overhead; most notably, due to excessive progress reports, which happen for each chunk. Pass the proper buffer size instead. Change-Id:If4bf472d33e21587acb5235a2d99e3cb10914633
This commit is contained in:
parent
1917e6c765
commit
391088900e
|
@ -336,12 +336,13 @@ WireFormatGenerator BinaryCacheStore::narFromPath(const StorePath & storePath)
|
||||||
try {
|
try {
|
||||||
auto file = getFile(info->url);
|
auto file = getFile(info->url);
|
||||||
return [](auto info, auto file, auto & stats) -> WireFormatGenerator {
|
return [](auto info, auto file, auto & stats) -> WireFormatGenerator {
|
||||||
std::unique_ptr<char[]> buf(new char[65536]);
|
constexpr size_t buflen = 65536;
|
||||||
|
auto buf = std::make_unique<char []>(buflen);
|
||||||
size_t total = 0;
|
size_t total = 0;
|
||||||
auto decompressor = makeDecompressionSource(info->compression, *file);
|
auto decompressor = makeDecompressionSource(info->compression, *file);
|
||||||
try {
|
try {
|
||||||
while (true) {
|
while (true) {
|
||||||
const auto len = decompressor->read(buf.get(), sizeof(buf));
|
const auto len = decompressor->read(buf.get(), buflen);
|
||||||
co_yield std::span{buf.get(), len};
|
co_yield std::span{buf.get(), len};
|
||||||
total += len;
|
total += len;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue