diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2018-03-27T22·01+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2018-05-30T11·42+0200 |
commit | e87e4a60d617bffadfedf23032254130cdb4d54d (patch) | |
tree | 2d17899e41f6372d0b64e74b2c260170248d1acd /src/libstore/download.hh | |
parent | 08ec757726e5ef47e71bf16ed0b252b288bcf0f3 (diff) |
Make HttpBinaryCacheStore::narFromPath() run in constant memory
This reduces memory consumption of nix copy --from https://cache.nixos.org --to ~/my-nix /nix/store/95cwv4q54dc6giaqv6q6p4r02ia2km35-blender-2.79 from 176 MiB to 82 MiB. (The remaining memory is probably due to xz decompression overhead.) Issue https://github.com/NixOS/nix/issues/1681. Issue https://github.com/NixOS/nix/issues/1969.
Diffstat (limited to 'src/libstore/download.hh')
-rw-r--r-- | src/libstore/download.hh | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libstore/download.hh b/src/libstore/download.hh index 01940f5447fe..f56274b2353c 100644 --- a/src/libstore/download.hh +++ b/src/libstore/download.hh @@ -21,6 +21,7 @@ struct DownloadRequest bool decompress = true; std::shared_ptr<std::string> data; std::string mimeType; + std::function<void(char *, size_t)> dataCallback; DownloadRequest(const std::string & uri) : uri(uri), parentAct(getCurActivity()) { } @@ -49,6 +50,10 @@ struct Downloader /* Synchronously download a file. */ DownloadResult download(const DownloadRequest & request); + /* Download a file, writing its data to a sink. The sink will be + invoked on the thread of the caller. */ + void download(DownloadRequest && request, Sink & sink); + /* Check if the specified file is already in ~/.cache/nix/tarballs and is more recent than ‘tarball-ttl’ seconds. Otherwise, use the recorded ETag to verify if the server has a more |