diff options
author | Griffin Smith <grfn@gws.fyi> | 2020-08-04T02·32-0400 |
---|---|---|
committer | glittershark <grfn@gws.fyi> | 2020-08-04T22·49+0000 |
commit | 5feed69260d966d2b38050160ccdcd794d8e6c75 (patch) | |
tree | 9454c2c35def4d3930b2f0da285f0e49743b07c7 /third_party/nix/src | |
parent | d8386d6f7ef7019c931d8b205ee4ecbe52f8ca8d (diff) |
feat(tvix): Implement AddIndirectRoot, SyncWithGC r/1583
Implement RPC handlers and client methods for the AddWithRoot and SyncWithGC calls. With this and sandboxing disabled, the following derivation is now building successfully: derivation { name = "test"; builder = "/bin/sh"; args = [ "-c" "echo 1 > $out" ]; system = "x86_64-linux"; } Co-authored-by: Vincent Ambo <mail@tazj.in> Change-Id: I245dca0dfca882e2eae5d93364287a8b79fead71 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1637 Reviewed-by: tazjin <mail@tazj.in> Reviewed-by: kanepyork <rikingcoding@gmail.com> Tested-by: BuildkiteCI
Diffstat (limited to 'third_party/nix/src')
-rw-r--r-- | third_party/nix/src/libstore/rpc-store.cc | 9 | ||||
-rw-r--r-- | third_party/nix/src/nix-daemon/nix-daemon-proto.cc | 25 |
2 files changed, 32 insertions, 2 deletions
diff --git a/third_party/nix/src/libstore/rpc-store.cc b/third_party/nix/src/libstore/rpc-store.cc index 5a0a2c98969a..f0abdd42efa9 100644 --- a/third_party/nix/src/libstore/rpc-store.cc +++ b/third_party/nix/src/libstore/rpc-store.cc @@ -15,6 +15,7 @@ #include <grpcpp/impl/codegen/status.h> #include <grpcpp/impl/codegen/sync_stream.h> #include <grpcpp/security/credentials.h> +#include <sys/ucontext.h> #include "libproto/worker.grpc.pb.h" #include "libproto/worker.pb.h" @@ -355,11 +356,15 @@ void RpcStore::addTempRoot(const Path& path) { } void RpcStore::addIndirectRoot(const Path& path) { - throw Unsupported(absl::StrCat("Not implemented ", __func__)); + ClientContext ctx; + google::protobuf::Empty response; + SuccessOrThrow(stub_->AddIndirectRoot(&ctx, StorePath(path), &response)); } void RpcStore::syncWithGC() { - throw Unsupported(absl::StrCat("Not implemented ", __func__)); + ClientContext ctx; + google::protobuf::Empty response; + SuccessOrThrow(stub_->SyncWithGC(&ctx, kEmpty, &response)); } Roots RpcStore::findRoots(bool censor) { diff --git a/third_party/nix/src/nix-daemon/nix-daemon-proto.cc b/third_party/nix/src/nix-daemon/nix-daemon-proto.cc index 2a21c7f91c6f..b3ecc9d5b9a1 100644 --- a/third_party/nix/src/nix-daemon/nix-daemon-proto.cc +++ b/third_party/nix/src/nix-daemon/nix-daemon-proto.cc @@ -1,5 +1,6 @@ #include "nix-daemon-proto.hh" +#include <filesystem> #include <sstream> #include <absl/strings/str_cat.h> @@ -227,6 +228,30 @@ class WorkerServiceImpl final : public WorkerService::Service { return Status::OK; } + Status AddIndirectRoot(grpc::ServerContext*, + const nix::proto::StorePath* request, + google::protobuf::Empty*) override { + auto path = std::filesystem::canonical(request->path()); + ASSERT_INPUT_STORE_PATH(path); + + return HandleExceptions( + [&]() -> Status { + store_->addIndirectRoot(path); + return Status::OK; + }, + __FUNCTION__); + } + + Status SyncWithGC(grpc::ServerContext*, const google::protobuf::Empty*, + google::protobuf::Empty*) override { + return HandleExceptions( + [&]() -> Status { + store_->syncWithGC(); + return Status::OK; + }, + __FUNCTION__); + } + Status QuerySubstitutablePathInfos( grpc::ServerContext*, const StorePaths* request, nix::proto::SubstitutablePathInfos* response) override { |