tvl-depot/third_party/nix/src/libstore/rpc-store.hh
Griffin Smith e440f60b6c feat(tvix): Implement all remaining RPC calls
Implement all remaining RPC calls on the RpcSstore client, remove a few
stub methods we had added that weren't actually present in the old
RemoteStore implementation, and add one more RPC call for getBuildLog
that is present in the store API, but that we hadn't added as a
stub *or* to the proto.

Fixes: #29
Change-Id: Id827f51a393ece4bc7bbecaf38aee9eb4b329770
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1692
Reviewed-by: kanepyork <rikingcoding@gmail.com>
Tested-by: BuildkiteCI
2020-08-09 02:22:44 +00:00

128 lines
4.4 KiB
C++

#pragma once
#include <absl/strings/string_view.h>
#include "libproto/worker.grpc.pb.h"
#include "libproto/worker.pb.h"
#include "libstore/remote-store.hh"
#include "libstore/store-api.hh"
namespace nix::store {
// TODO(grfn): Currently, since the RPCStore is only used for the connection to
// the nix daemon over a unix socket, it inherits from the LocalFSStore since it
// shares a filesystem with the daemon. This will not always be the case, at
// which point we should tease these two things apart.
class RpcStore : public LocalFSStore, public virtual Store {
public:
RpcStore(const Params& params,
std::unique_ptr<nix::proto::WorkerService::Stub> stub)
: Store(params), LocalFSStore(params), stub_(std::move(stub)) {}
RpcStore(std::string uri, const Params& params,
std::unique_ptr<nix::proto::WorkerService::Stub> stub)
: Store(params),
LocalFSStore(params),
uri_(uri),
stub_(std::move(stub)) {}
std::string getUri() override {
if (uri_.has_value()) {
return uri_.value();
} else {
return "daemon";
}
};
virtual PathSet queryAllValidPaths() override;
virtual void queryReferrers(const Path& path, PathSet& referrers) override;
virtual PathSet queryValidDerivers(const Path& path) override;
virtual PathSet queryDerivationOutputs(const Path& path) override;
virtual StringSet queryDerivationOutputNames(const Path& path) override;
virtual Path queryPathFromHashPart(const std::string& hashPart) override;
virtual PathSet querySubstitutablePaths(const PathSet& paths) override;
virtual void querySubstitutablePathInfos(
const PathSet& paths, SubstitutablePathInfos& infos) override;
virtual bool wantMassQuery() override { return true; }
virtual void addToStore(const ValidPathInfo& info, Source& narSource,
RepairFlag repair = NoRepair,
CheckSigsFlag checkSigs = CheckSigs,
std::shared_ptr<FSAccessor> accessor = 0) override;
virtual Path addToStore(const std::string& name, const Path& srcPath,
bool recursive = true, HashType hashAlgo = htSHA256,
PathFilter& filter = defaultPathFilter,
RepairFlag repair = NoRepair) override;
virtual Path addTextToStore(const std::string& name, const std::string& s,
const PathSet& references,
RepairFlag repair = NoRepair) override;
virtual void buildPaths(const PathSet& paths,
BuildMode buildMode = bmNormal) override;
virtual BuildResult buildDerivation(const Path& drvPath,
const BasicDerivation& drv,
BuildMode buildMode = bmNormal) override;
virtual void ensurePath(const Path& path) override;
virtual void addTempRoot(const Path& path) override;
virtual void addIndirectRoot(const Path& path) override;
virtual void syncWithGC() override;
virtual Roots findRoots(bool censor) override;
virtual void collectGarbage(const GCOptions& options,
GCResults& results) override;
virtual void optimiseStore() override;
virtual bool verifyStore(bool checkContents,
RepairFlag repair = NoRepair) override;
virtual void addSignatures(const Path& storePath,
const StringSet& sigs) override;
virtual void queryMissing(const PathSet& targets, PathSet& willBuild,
PathSet& willSubstitute, PathSet& unknown,
unsigned long long& downloadSize,
unsigned long long& narSize) override;
virtual std::shared_ptr<std::string> getBuildLog(const Path& path) override;
void connect() override{};
virtual unsigned int getProtocol() override;
protected:
virtual bool isValidPathUncached(const Path& path) override;
virtual PathSet queryValidPaths(
const PathSet& paths,
SubstituteFlag maybeSubstitute = NoSubstitute) override;
virtual void queryPathInfoUncached(
const Path& path,
Callback<std::shared_ptr<ValidPathInfo>> callback) noexcept override;
private:
std::optional<std::string> uri_;
std::unique_ptr<nix::proto::WorkerService::Stub> stub_;
void const SuccessOrThrow(const grpc::Status& status,
const absl::string_view& call = "") const;
};
} // namespace nix::store