33e8b0f975
This part of the store API needs to carry a handle to the log sink from now on, so that it can be passed in as appropriate from the gRPC handlers. In all places where there is no such handler available at the moment, the discarding log sink has been inserted. This can be used as a convenient grep target in the future. Change-Id: I26628e30b4c6437dccdf8f722ca2e8ed827dfc19 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1797 Tested-by: BuildkiteCI Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: glittershark <grfn@gws.fyi>
128 lines
4.4 KiB
C++
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;
|
|
|
|
absl::Status buildPaths(std::ostream& log_sink, const PathSet& paths,
|
|
BuildMode build_mode) override;
|
|
|
|
virtual BuildResult buildDerivation(const Path& drvPath,
|
|
const BasicDerivation& drv,
|
|
BuildMode buildMode) 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
|