aboutsummaryrefslogtreecommitdiff
path: root/src/nix-daemon/nix-daemon.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-04-06 18:40:19 +0200
committerEelco Dolstra <edolstra@gmail.com>2017-04-06 18:40:19 +0200
commitba20730b3f7ad6b09aa86b66748df575e56d442e (patch)
tree90cf209d43d1fe35a35297c27b2ce864bdcb3480 /src/nix-daemon/nix-daemon.cc
parent963f2bf12b4098a3b46059a26d21cdfe27662cdd (diff)
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 '<nixpkgs/nixos/tests/misc.nix>' -A test on a cold local and CloudFront cache. The alternative is to use lots of concurrent daemon connections but that seems wasteful.
Diffstat (limited to 'src/nix-daemon/nix-daemon.cc')
-rw-r--r--src/nix-daemon/nix-daemon.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc
index b6a46642c..8786e2561 100644
--- a/src/nix-daemon/nix-daemon.cc
+++ b/src/nix-daemon/nix-daemon.cc
@@ -592,6 +592,17 @@ static void performOp(ref<LocalStore> store, bool trusted, unsigned int clientVe
break;
}
+ case wopQueryMissing: {
+ PathSet targets = readStorePaths<PathSet>(*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);
}