From ba20730b3f7ad6b09aa86b66748df575e56d442e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 6 Apr 2017 18:40:19 +0200 Subject: Implement RemoteStore::queryMissing() This provides a significant speedup, e.g. 64 s -> 12 s for nix-build --dry-run -I nixpkgs=channel:nixos-16.03 '' -A test on a cold local and CloudFront cache. The alternative is to use lots of concurrent daemon connections but that seems wasteful. --- src/nix-daemon/nix-daemon.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/nix-daemon/nix-daemon.cc') diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc index b6a46642c7c1..8786e2561b9c 100644 --- a/src/nix-daemon/nix-daemon.cc +++ b/src/nix-daemon/nix-daemon.cc @@ -592,6 +592,17 @@ static void performOp(ref store, bool trusted, unsigned int clientVe break; } + case wopQueryMissing: { + PathSet targets = readStorePaths(*store, from); + startWork(); + PathSet willBuild, willSubstitute, unknown; + unsigned long long downloadSize, narSize; + store->queryMissing(targets, willBuild, willSubstitute, unknown, downloadSize, narSize); + stopWork(); + to << willBuild << willSubstitute << unknown << downloadSize << narSize; + break; + } + default: throw Error(format("invalid operation %1%") % op); } -- cgit 1.4.1