feat(3p/nix): Start implementing RPC store client

Add a stub class for wrapping a gRPC client to the new, proto-backed nix
store protocol, along with several methods implemented but several left
throwing a not implemented exception.

Paired-With: Vincent Ambo <mail@tazj.in>
Paired-With: Perry Lorier <isomer@tvl.fyi>
Change-Id: Id943d4f6d75084b8498786d580e6c9f7c92c104d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1436
Tested-by: BuildkiteCI
Reviewed-by: kanepyork <rikingcoding@gmail.com>
This commit is contained in:
Griffin Smith 2020-07-25 13:49:03 -04:00 committed by glittershark
parent dcaba9de64
commit b10970a66f
5 changed files with 450 additions and 16 deletions

View file

@ -7,11 +7,13 @@
#include <absl/strings/numbers.h>
#include <absl/strings/str_split.h>
#include <glog/logging.h>
#include <grpcpp/create_channel.h>
#include "libstore/crypto.hh"
#include "libstore/derivations.hh"
#include "libstore/globals.hh"
#include "libstore/nar-info-disk-cache.hh"
#include "libstore/rpc-store.hh"
#include "libutil/json.hh"
#include "libutil/thread-pool.hh"
#include "libutil/util.hh"
@ -978,23 +980,28 @@ StoreType getStoreType(const std::string& uri, const std::string& stateDir) {
}
}
static RegisterStoreImplementation regStore([](const std::string& uri,
const Store::Params& params)
-> std::shared_ptr<Store> {
switch (getStoreType(uri, get(params, "state", settings.nixStateDir))) {
case tDaemon:
return std::shared_ptr<Store>(std::make_shared<UDSRemoteStore>(params));
case tLocal: {
Store::Params params2 = params;
if (absl::StartsWith(uri, "/")) {
params2["root"] = uri;
static RegisterStoreImplementation regStore(
[](const std::string& uri,
const Store::Params& params) -> std::shared_ptr<Store> {
switch (getStoreType(uri, get(params, "state", settings.nixStateDir))) {
case tDaemon: {
auto daemon_socket_uri = settings.nixDaemonSocketFile;
auto channel = grpc::CreateChannel(
daemon_socket_uri, grpc::InsecureChannelCredentials());
return std::shared_ptr<Store>(std::make_shared<nix::store::RpcStore>(
params, proto::WorkerService::NewStub(channel)));
}
case tLocal: {
Store::Params params2 = params;
if (absl::StartsWith(uri, "/")) {
params2["root"] = uri;
}
return std::shared_ptr<Store>(std::make_shared<LocalStore>(params2));
}
default:
return nullptr;
}
return std::shared_ptr<Store>(std::make_shared<LocalStore>(params2));
}
default:
return nullptr;
}
});
});
std::list<ref<Store>> getDefaultSubstituters() {
static auto stores([]() {