forked from lix-project/lix
Merge "libstore: remove operations that are never called by supported clients" into main
This commit is contained in:
commit
375f4c0337
|
@ -296,17 +296,6 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WorkerProto::Op::HasSubstitutes: {
|
|
||||||
auto path = store->parseStorePath(readString(from));
|
|
||||||
logger->startWork();
|
|
||||||
StorePathSet paths; // FIXME
|
|
||||||
paths.insert(path);
|
|
||||||
auto res = store->querySubstitutablePaths(paths);
|
|
||||||
logger->stopWork();
|
|
||||||
to << (res.count(path) != 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WorkerProto::Op::QuerySubstitutablePaths: {
|
case WorkerProto::Op::QuerySubstitutablePaths: {
|
||||||
auto paths = WorkerProto::Serialise<StorePathSet>::read(*store, rconn);
|
auto paths = WorkerProto::Serialise<StorePathSet>::read(*store, rconn);
|
||||||
logger->startWork();
|
logger->startWork();
|
||||||
|
@ -316,36 +305,74 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WorkerProto::Op::QueryPathHash: {
|
case WorkerProto::Op::HasSubstitutes: {
|
||||||
auto path = store->parseStorePath(readString(from));
|
throw UnimplementedError("HasSubstitutes is not supported in Lix. This is not used if the declared server protocol is > 1.12 (Nix 1.0, 2012)");
|
||||||
logger->startWork();
|
break;
|
||||||
auto hash = store->queryPathInfo(path)->narHash;
|
}
|
||||||
logger->stopWork();
|
|
||||||
to << hash.to_string(Base16, false);
|
case WorkerProto::Op::QueryPathHash: {
|
||||||
|
throw UnimplementedError("QueryPathHash is not supported in Lix, client usages were removed in 2016 in e0204f8d462041387651af388074491fd0bf36d6");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WorkerProto::Op::QueryReferences: {
|
||||||
|
throw UnimplementedError("QueryReferences is not supported in Lix, client usages were removed in 2016 in e0204f8d462041387651af388074491fd0bf36d6");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WorkerProto::Op::QueryDeriver: {
|
||||||
|
throw UnimplementedError("QueryDeriver is not supported in Lix, client usages were removed in 2016 in e0204f8d462041387651af388074491fd0bf36d6");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WorkerProto::Op::ExportPath: {
|
||||||
|
throw UnimplementedError("ExportPath is not supported in Lix, client usage were removed in 2017 in 27dc76c1a5dbe654465245ff5f6bc22e2c8902da");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WorkerProto::Op::ImportPaths: {
|
||||||
|
throw UnimplementedError("ImportPaths is not supported in Lix. This is not used if the declared server protocol is >= 1.18 (Nix 2.0, 2016)");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WorkerProto::Op::QueryReferences:
|
|
||||||
case WorkerProto::Op::QueryReferrers:
|
case WorkerProto::Op::QueryReferrers:
|
||||||
case WorkerProto::Op::QueryValidDerivers:
|
case WorkerProto::Op::QueryValidDerivers:
|
||||||
case WorkerProto::Op::QueryDerivationOutputs: {
|
case WorkerProto::Op::QueryDerivationOutputs: {
|
||||||
auto path = store->parseStorePath(readString(from));
|
auto path = store->parseStorePath(readString(from));
|
||||||
logger->startWork();
|
logger->startWork();
|
||||||
StorePathSet paths;
|
StorePathSet paths;
|
||||||
if (op == WorkerProto::Op::QueryReferences)
|
|
||||||
for (auto & i : store->queryPathInfo(path)->references)
|
#pragma GCC diagnostic push
|
||||||
paths.insert(i);
|
#pragma GCC diagnostic ignored "-Wswitch-enum"
|
||||||
else if (op == WorkerProto::Op::QueryReferrers)
|
switch (op) {
|
||||||
store->queryReferrers(path, paths);
|
case WorkerProto::Op::QueryReferrers: {
|
||||||
else if (op == WorkerProto::Op::QueryValidDerivers)
|
store->queryReferrers(path, paths);
|
||||||
paths = store->queryValidDerivers(path);
|
break;
|
||||||
else paths = store->queryDerivationOutputs(path);
|
}
|
||||||
|
case WorkerProto::Op::QueryValidDerivers: {
|
||||||
|
paths = store->queryValidDerivers(path);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WorkerProto::Op::QueryDerivationOutputs: {
|
||||||
|
// Only sent if server presents proto version <= 1.21
|
||||||
|
REMOVE_AFTER_DROPPING_PROTO_MINOR(21);
|
||||||
|
paths = store->queryDerivationOutputs(path);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
logger->stopWork();
|
logger->stopWork();
|
||||||
WorkerProto::write(*store, wconn, paths);
|
WorkerProto::write(*store, wconn, paths);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WorkerProto::Op::QueryDerivationOutputNames: {
|
case WorkerProto::Op::QueryDerivationOutputNames: {
|
||||||
|
// Unused in CppNix >= 2.4 (removed in 045b07200c77bf1fe19c0a986aafb531e7e1ba54)
|
||||||
|
REMOVE_AFTER_DROPPING_PROTO_MINOR(31);
|
||||||
auto path = store->parseStorePath(readString(from));
|
auto path = store->parseStorePath(readString(from));
|
||||||
logger->startWork();
|
logger->startWork();
|
||||||
auto names = store->readDerivation(path).outputNames();
|
auto names = store->readDerivation(path).outputNames();
|
||||||
|
@ -363,15 +390,6 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WorkerProto::Op::QueryDeriver: {
|
|
||||||
auto path = store->parseStorePath(readString(from));
|
|
||||||
logger->startWork();
|
|
||||||
auto info = store->queryPathInfo(path);
|
|
||||||
logger->stopWork();
|
|
||||||
to << (info->deriver ? store->printStorePath(*info->deriver) : "");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WorkerProto::Op::QueryPathFromHashPart: {
|
case WorkerProto::Op::QueryPathFromHashPart: {
|
||||||
auto hashPart = readString(from);
|
auto hashPart = readString(from);
|
||||||
logger->startWork();
|
logger->startWork();
|
||||||
|
@ -493,29 +511,6 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WorkerProto::Op::ExportPath: {
|
|
||||||
auto path = store->parseStorePath(readString(from));
|
|
||||||
readInt(from); // obsolete
|
|
||||||
logger->startWork();
|
|
||||||
TunnelSink sink(to);
|
|
||||||
store->exportPath(path, sink);
|
|
||||||
logger->stopWork();
|
|
||||||
to << 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WorkerProto::Op::ImportPaths: {
|
|
||||||
logger->startWork();
|
|
||||||
TunnelSource source(from, to);
|
|
||||||
auto paths = store->importPaths(source,
|
|
||||||
trusted ? NoCheckSigs : CheckSigs);
|
|
||||||
logger->stopWork();
|
|
||||||
Strings paths2;
|
|
||||||
for (auto & i : paths) paths2.push_back(store->printStorePath(i));
|
|
||||||
to << paths2;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WorkerProto::Op::BuildPaths: {
|
case WorkerProto::Op::BuildPaths: {
|
||||||
auto drvs = WorkerProto::Serialise<DerivedPaths>::read(*store, rconn);
|
auto drvs = WorkerProto::Serialise<DerivedPaths>::read(*store, rconn);
|
||||||
BuildMode mode = buildModeFromInteger(readInt(from));
|
BuildMode mode = buildModeFromInteger(readInt(from));
|
||||||
|
@ -666,8 +661,10 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obsolete.
|
// Obsolete since 9947f1646a26b339fff2e02b77798e9841fac7f0 (included in CppNix 2.5.0).
|
||||||
case WorkerProto::Op::SyncWithGC: {
|
case WorkerProto::Op::SyncWithGC: {
|
||||||
|
// CppNix 2.5.0 is 32
|
||||||
|
REMOVE_AFTER_DROPPING_PROTO_MINOR(31);
|
||||||
logger->startWork();
|
logger->startWork();
|
||||||
logger->stopWork();
|
logger->stopWork();
|
||||||
to << 1;
|
to << 1;
|
||||||
|
|
|
@ -307,6 +307,7 @@ StorePathSet RemoteStore::queryDerivationOutputs(const StorePath & path)
|
||||||
if (GET_PROTOCOL_MINOR(getProtocol()) >= 22) {
|
if (GET_PROTOCOL_MINOR(getProtocol()) >= 22) {
|
||||||
return Store::queryDerivationOutputs(path);
|
return Store::queryDerivationOutputs(path);
|
||||||
}
|
}
|
||||||
|
REMOVE_AFTER_DROPPING_PROTO_MINOR(21);
|
||||||
auto conn(getConnection());
|
auto conn(getConnection());
|
||||||
conn->to << WorkerProto::Op::QueryDerivationOutputs << printStorePath(path);
|
conn->to << WorkerProto::Op::QueryDerivationOutputs << printStorePath(path);
|
||||||
conn.processStderr();
|
conn.processStderr();
|
||||||
|
@ -336,6 +337,7 @@ std::map<std::string, std::optional<StorePath>> RemoteStore::queryPartialDerivat
|
||||||
return outputs;
|
return outputs;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
REMOVE_AFTER_DROPPING_PROTO_MINOR(21);
|
||||||
auto & evalStore = evalStore_ ? *evalStore_ : *this;
|
auto & evalStore = evalStore_ ? *evalStore_ : *this;
|
||||||
// Fallback for old daemon versions.
|
// Fallback for old daemon versions.
|
||||||
// For floating-CA derivations (and their co-dependencies) this is an
|
// For floating-CA derivations (and their co-dependencies) this is an
|
||||||
|
@ -530,6 +532,7 @@ void RemoteStore::registerDrvOutput(const Realisation & info)
|
||||||
auto conn(getConnection());
|
auto conn(getConnection());
|
||||||
conn->to << WorkerProto::Op::RegisterDrvOutput;
|
conn->to << WorkerProto::Op::RegisterDrvOutput;
|
||||||
if (GET_PROTOCOL_MINOR(conn->daemonVersion) < 31) {
|
if (GET_PROTOCOL_MINOR(conn->daemonVersion) < 31) {
|
||||||
|
REMOVE_AFTER_DROPPING_PROTO_MINOR(30);
|
||||||
conn->to << info.id.to_string();
|
conn->to << info.id.to_string();
|
||||||
conn->to << std::string(info.outPath.to_string());
|
conn->to << std::string(info.outPath.to_string());
|
||||||
} else {
|
} else {
|
||||||
|
@ -617,6 +620,7 @@ std::vector<KeyedBuildResult> RemoteStore::buildPathsWithResults(
|
||||||
conn.processStderr();
|
conn.processStderr();
|
||||||
return WorkerProto::Serialise<std::vector<KeyedBuildResult>>::read(*this, *conn);
|
return WorkerProto::Serialise<std::vector<KeyedBuildResult>>::read(*this, *conn);
|
||||||
} else {
|
} else {
|
||||||
|
REMOVE_AFTER_DROPPING_PROTO_MINOR(33);
|
||||||
// Avoid deadlock.
|
// Avoid deadlock.
|
||||||
conn_.reset();
|
conn_.reset();
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,11 @@ namespace nix {
|
||||||
#define SERVE_MAGIC_1 0x390c9deb
|
#define SERVE_MAGIC_1 0x390c9deb
|
||||||
#define SERVE_MAGIC_2 0x5452eecb
|
#define SERVE_MAGIC_2 0x5452eecb
|
||||||
|
|
||||||
|
// This must remain at 2.7 (Nix 2.18) forever in Lix, since the protocol
|
||||||
|
// versioning is monotonic, so if we ever change it in the future, it will
|
||||||
|
// break compatibility with any potential CppNix-originated protocol changes.
|
||||||
|
//
|
||||||
|
// Lix intends to replace this protocol entirely.
|
||||||
#define SERVE_PROTOCOL_VERSION (2 << 8 | 7)
|
#define SERVE_PROTOCOL_VERSION (2 << 8 | 7)
|
||||||
#define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
|
#define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
|
||||||
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
|
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
|
||||||
|
|
|
@ -23,6 +23,10 @@ namespace nix {
|
||||||
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
|
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
|
||||||
|
|
||||||
|
|
||||||
|
#define REMOVE_AFTER_DROPPING_PROTO_MINOR(protoMinor) \
|
||||||
|
static_assert(MIN_SUPPORTED_MINOR_WORKER_PROTO_VERSION <= (protoMinor))
|
||||||
|
|
||||||
|
|
||||||
#define STDERR_NEXT 0x6f6c6d67
|
#define STDERR_NEXT 0x6f6c6d67
|
||||||
#define STDERR_READ 0x64617461 // data needed from source
|
#define STDERR_READ 0x64617461 // data needed from source
|
||||||
#define STDERR_WRITE 0x64617416 // data for sink
|
#define STDERR_WRITE 0x64617416 // data for sink
|
||||||
|
@ -136,30 +140,30 @@ struct WorkerProto
|
||||||
enum struct WorkerProto::Op : uint64_t
|
enum struct WorkerProto::Op : uint64_t
|
||||||
{
|
{
|
||||||
IsValidPath = 1,
|
IsValidPath = 1,
|
||||||
HasSubstitutes = 3,
|
HasSubstitutes = 3, // obsolete since 2012, stubbed to error
|
||||||
QueryPathHash = 4, // obsolete
|
QueryPathHash = 4, // obsolete since 2016, stubbed to error
|
||||||
QueryReferences = 5, // obsolete
|
QueryReferences = 5, // obsolete since 2016, stubbed to error
|
||||||
QueryReferrers = 6,
|
QueryReferrers = 6,
|
||||||
AddToStore = 7,
|
AddToStore = 7,
|
||||||
AddTextToStore = 8, // obsolete since 1.25, Nix 3.0. Use WorkerProto::Op::AddToStore
|
AddTextToStore = 8, // obsolete since protocol 1.25, CppNix 2.4. Use WorkerProto::Op::AddToStore
|
||||||
BuildPaths = 9,
|
BuildPaths = 9,
|
||||||
EnsurePath = 10,
|
EnsurePath = 10,
|
||||||
AddTempRoot = 11,
|
AddTempRoot = 11,
|
||||||
AddIndirectRoot = 12,
|
AddIndirectRoot = 12,
|
||||||
SyncWithGC = 13,
|
SyncWithGC = 13, // obsolete since CppNix 2.5.0
|
||||||
FindRoots = 14,
|
FindRoots = 14,
|
||||||
ExportPath = 16, // obsolete
|
ExportPath = 16, // obsolete since 2017, stubbed to error
|
||||||
QueryDeriver = 18, // obsolete
|
QueryDeriver = 18, // obsolete since 2016, stubbed to error
|
||||||
SetOptions = 19,
|
SetOptions = 19,
|
||||||
CollectGarbage = 20,
|
CollectGarbage = 20,
|
||||||
QuerySubstitutablePathInfo = 21,
|
QuerySubstitutablePathInfo = 21,
|
||||||
QueryDerivationOutputs = 22, // obsolete
|
QueryDerivationOutputs = 22, // obsolete since protocol 1.21, CppNix 2.4
|
||||||
QueryAllValidPaths = 23,
|
QueryAllValidPaths = 23,
|
||||||
QueryFailedPaths = 24,
|
QueryFailedPaths = 24, // obsolete, removed
|
||||||
ClearFailedPaths = 25,
|
ClearFailedPaths = 25, // obsolete, removed
|
||||||
QueryPathInfo = 26,
|
QueryPathInfo = 26,
|
||||||
ImportPaths = 27, // obsolete
|
ImportPaths = 27, // obsolete since 2016
|
||||||
QueryDerivationOutputNames = 28, // obsolete
|
QueryDerivationOutputNames = 28, // obsolete since CppNix 2.4
|
||||||
QueryPathFromHashPart = 29,
|
QueryPathFromHashPart = 29,
|
||||||
QuerySubstitutablePathInfos = 30,
|
QuerySubstitutablePathInfos = 30,
|
||||||
QueryValidPaths = 31,
|
QueryValidPaths = 31,
|
||||||
|
|
Loading…
Reference in a new issue