feat(3p/nix): Add main function for grpc daemon

Implement the main function for the new, proto-based nix daemon. This
mostly replicates the behavior of the previous nix daemon - it starts a
grpc server listening on the same nix socket path and supports the same
set of options - with the exception of --stdio, which has been renamed
to --pipe and documented in the man page.

Change-Id: Ib729283c1d5d35c0e1b0a968bc1f052f5527f2d7
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1356
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: kanepyork <rikingcoding@gmail.com>
This commit is contained in:
Griffin Smith 2020-07-23 12:35:52 -04:00 committed by glittershark
parent 7c56fccdad
commit dcaba9de64
10 changed files with 174 additions and 14 deletions

View file

@ -26,7 +26,7 @@ static Status INVALID_STORE_PATH =
class WorkerServiceImpl final : public WorkerService::Service {
public:
WorkerServiceImpl(nix::Store* store) : store_(store) {}
WorkerServiceImpl(nix::Store& store) : store_(&store) {}
Status IsValidPath(grpc::ServerContext* context, const StorePath* request,
nix::proto::IsValidPathResponse* response) override {
@ -221,7 +221,7 @@ class WorkerServiceImpl final : public WorkerService::Service {
nix::proto::BuildDerivationResponse* response) override {
auto drv_path = request->drv_path().path();
store_->assertStorePath(drv_path);
auto drv = BasicDerivation::from_proto(&request->derivation(), store_);
auto drv = BasicDerivation::from_proto(&request->derivation(), *store_);
auto build_mode = nix::build_mode_from(request->build_mode());
if (!build_mode) {
@ -282,12 +282,11 @@ class WorkerServiceImpl final : public WorkerService::Service {
};
private:
// TODO(tazjin): Who owns the store?
nix::Store* store_;
ref<nix::Store> store_;
};
std::unique_ptr<WorkerService::Service> NewWorkerService(nix::Store* store) {
return std::make_unique<WorkerServiceImpl>(store);
WorkerService::Service* NewWorkerService(nix::Store& store) {
return new WorkerServiceImpl(store);
}
} // namespace nix::daemon