aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/daemon.cc113
-rw-r--r--src/libstore/remote-store.cc4
-rw-r--r--src/libstore/serve-protocol.hh5
-rw-r--r--src/libstore/worker-protocol.hh28
4 files changed, 80 insertions, 70 deletions
diff --git a/src/libstore/daemon.cc b/src/libstore/daemon.cc
index c89b5f5b3..6d64644d1 100644
--- a/src/libstore/daemon.cc
+++ b/src/libstore/daemon.cc
@@ -296,17 +296,6 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
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: {
auto paths = WorkerProto::Serialise<StorePathSet>::read(*store, rconn);
logger->startWork();
@@ -316,36 +305,74 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
break;
}
+ case WorkerProto::Op::HasSubstitutes: {
+ throw UnimplementedError("HasSubstitutes is not supported in Lix. This is not used if the declared server protocol is > 1.12 (Nix 1.0, 2012)");
+ break;
+ }
+
case WorkerProto::Op::QueryPathHash: {
- auto path = store->parseStorePath(readString(from));
- logger->startWork();
- auto hash = store->queryPathInfo(path)->narHash;
- logger->stopWork();
- to << hash.to_string(Base16, false);
+ 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;
}
- case WorkerProto::Op::QueryReferences:
case WorkerProto::Op::QueryReferrers:
case WorkerProto::Op::QueryValidDerivers:
case WorkerProto::Op::QueryDerivationOutputs: {
auto path = store->parseStorePath(readString(from));
logger->startWork();
StorePathSet paths;
- if (op == WorkerProto::Op::QueryReferences)
- for (auto & i : store->queryPathInfo(path)->references)
- paths.insert(i);
- else if (op == WorkerProto::Op::QueryReferrers)
- store->queryReferrers(path, paths);
- else if (op == WorkerProto::Op::QueryValidDerivers)
- paths = store->queryValidDerivers(path);
- else paths = store->queryDerivationOutputs(path);
+
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wswitch-enum"
+ switch (op) {
+ case WorkerProto::Op::QueryReferrers: {
+ store->queryReferrers(path, paths);
+ break;
+ }
+ 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();
WorkerProto::write(*store, wconn, paths);
break;
}
case WorkerProto::Op::QueryDerivationOutputNames: {
+ // Unused in CppNix >= 2.4 (removed in 045b07200c77bf1fe19c0a986aafb531e7e1ba54)
+ REMOVE_AFTER_DROPPING_PROTO_MINOR(31);
auto path = store->parseStorePath(readString(from));
logger->startWork();
auto names = store->readDerivation(path).outputNames();
@@ -363,15 +390,6 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
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: {
auto hashPart = readString(from);
logger->startWork();
@@ -493,29 +511,6 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
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: {
auto drvs = WorkerProto::Serialise<DerivedPaths>::read(*store, rconn);
BuildMode mode = buildModeFromInteger(readInt(from));
@@ -666,8 +661,10 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
break;
}
- // Obsolete.
+ // Obsolete since 9947f1646a26b339fff2e02b77798e9841fac7f0 (included in CppNix 2.5.0).
case WorkerProto::Op::SyncWithGC: {
+ // CppNix 2.5.0 is 32
+ REMOVE_AFTER_DROPPING_PROTO_MINOR(31);
logger->startWork();
logger->stopWork();
to << 1;
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 575078289..b2f8a285d 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -307,6 +307,7 @@ StorePathSet RemoteStore::queryDerivationOutputs(const StorePath & path)
if (GET_PROTOCOL_MINOR(getProtocol()) >= 22) {
return Store::queryDerivationOutputs(path);
}
+ REMOVE_AFTER_DROPPING_PROTO_MINOR(21);
auto conn(getConnection());
conn->to << WorkerProto::Op::QueryDerivationOutputs << printStorePath(path);
conn.processStderr();
@@ -336,6 +337,7 @@ std::map<std::string, std::optional<StorePath>> RemoteStore::queryPartialDerivat
return outputs;
}
} else {
+ REMOVE_AFTER_DROPPING_PROTO_MINOR(21);
auto & evalStore = evalStore_ ? *evalStore_ : *this;
// Fallback for old daemon versions.
// For floating-CA derivations (and their co-dependencies) this is an
@@ -530,6 +532,7 @@ void RemoteStore::registerDrvOutput(const Realisation & info)
auto conn(getConnection());
conn->to << WorkerProto::Op::RegisterDrvOutput;
if (GET_PROTOCOL_MINOR(conn->daemonVersion) < 31) {
+ REMOVE_AFTER_DROPPING_PROTO_MINOR(30);
conn->to << info.id.to_string();
conn->to << std::string(info.outPath.to_string());
} else {
@@ -617,6 +620,7 @@ std::vector<KeyedBuildResult> RemoteStore::buildPathsWithResults(
conn.processStderr();
return WorkerProto::Serialise<std::vector<KeyedBuildResult>>::read(*this, *conn);
} else {
+ REMOVE_AFTER_DROPPING_PROTO_MINOR(33);
// Avoid deadlock.
conn_.reset();
diff --git a/src/libstore/serve-protocol.hh b/src/libstore/serve-protocol.hh
index 3f82c8177..742320933 100644
--- a/src/libstore/serve-protocol.hh
+++ b/src/libstore/serve-protocol.hh
@@ -8,6 +8,11 @@ namespace nix {
#define SERVE_MAGIC_1 0x390c9deb
#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 GET_PROTOCOL_MAJOR(x) ((x) & 0xff00)
#define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)
diff --git a/src/libstore/worker-protocol.hh b/src/libstore/worker-protocol.hh
index 5f24c189f..36acf2a8d 100644
--- a/src/libstore/worker-protocol.hh
+++ b/src/libstore/worker-protocol.hh
@@ -23,6 +23,10 @@ namespace nix {
#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_READ 0x64617461 // data needed from source
#define STDERR_WRITE 0x64617416 // data for sink
@@ -136,30 +140,30 @@ struct WorkerProto
enum struct WorkerProto::Op : uint64_t
{
IsValidPath = 1,
- HasSubstitutes = 3,
- QueryPathHash = 4, // obsolete
- QueryReferences = 5, // obsolete
+ HasSubstitutes = 3, // obsolete since 2012, stubbed to error
+ QueryPathHash = 4, // obsolete since 2016, stubbed to error
+ QueryReferences = 5, // obsolete since 2016, stubbed to error
QueryReferrers = 6,
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,
EnsurePath = 10,
AddTempRoot = 11,
AddIndirectRoot = 12,
- SyncWithGC = 13,
+ SyncWithGC = 13, // obsolete since CppNix 2.5.0
FindRoots = 14,
- ExportPath = 16, // obsolete
- QueryDeriver = 18, // obsolete
+ ExportPath = 16, // obsolete since 2017, stubbed to error
+ QueryDeriver = 18, // obsolete since 2016, stubbed to error
SetOptions = 19,
CollectGarbage = 20,
QuerySubstitutablePathInfo = 21,
- QueryDerivationOutputs = 22, // obsolete
+ QueryDerivationOutputs = 22, // obsolete since protocol 1.21, CppNix 2.4
QueryAllValidPaths = 23,
- QueryFailedPaths = 24,
- ClearFailedPaths = 25,
+ QueryFailedPaths = 24, // obsolete, removed
+ ClearFailedPaths = 25, // obsolete, removed
QueryPathInfo = 26,
- ImportPaths = 27, // obsolete
- QueryDerivationOutputNames = 28, // obsolete
+ ImportPaths = 27, // obsolete since 2016
+ QueryDerivationOutputNames = 28, // obsolete since CppNix 2.4
QueryPathFromHashPart = 29,
QuerySubstitutablePathInfos = 30,
QueryValidPaths = 31,