forked from lix-project/lix
Always send the realisations as JSON
Align all the worker protocol with `buildDerivation` which inlines the realisations as one opaque json blob. That way we don’t have to bother changing the remote store protocol when the definition of `Realisation` changes, as long as we keep the json backwards-compatible
This commit is contained in:
parent
19396f2a8a
commit
7616268812
|
@ -885,10 +885,15 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
|
|
||||||
case wopRegisterDrvOutput: {
|
case wopRegisterDrvOutput: {
|
||||||
logger->startWork();
|
logger->startWork();
|
||||||
|
if (GET_PROTOCOL_MINOR(clientVersion) < 31) {
|
||||||
auto outputId = DrvOutput::parse(readString(from));
|
auto outputId = DrvOutput::parse(readString(from));
|
||||||
auto outputPath = StorePath(readString(from));
|
auto outputPath = StorePath(readString(from));
|
||||||
store->registerDrvOutput(Realisation{
|
store->registerDrvOutput(Realisation{
|
||||||
.id = outputId, .outPath = outputPath});
|
.id = outputId, .outPath = outputPath});
|
||||||
|
} else {
|
||||||
|
auto realisation = worker_proto::read(*store, from, Phantom<Realisation>());
|
||||||
|
store->registerDrvOutput(realisation);
|
||||||
|
}
|
||||||
logger->stopWork();
|
logger->stopWork();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -898,9 +903,15 @@ static void performOp(TunnelLogger * logger, ref<Store> store,
|
||||||
auto outputId = DrvOutput::parse(readString(from));
|
auto outputId = DrvOutput::parse(readString(from));
|
||||||
auto info = store->queryRealisation(outputId);
|
auto info = store->queryRealisation(outputId);
|
||||||
logger->stopWork();
|
logger->stopWork();
|
||||||
|
if (GET_PROTOCOL_MINOR(clientVersion) < 31) {
|
||||||
std::set<StorePath> outPaths;
|
std::set<StorePath> outPaths;
|
||||||
if (info) outPaths.insert(info->outPath);
|
if (info) outPaths.insert(info->outPath);
|
||||||
worker_proto::write(*store, to, outPaths);
|
worker_proto::write(*store, to, outPaths);
|
||||||
|
} else {
|
||||||
|
std::set<Realisation> realisations;
|
||||||
|
if (info) realisations.insert(*info);
|
||||||
|
worker_proto::write(*store, to, realisations);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -653,8 +653,12 @@ void RemoteStore::registerDrvOutput(const Realisation & info)
|
||||||
{
|
{
|
||||||
auto conn(getConnection());
|
auto conn(getConnection());
|
||||||
conn->to << wopRegisterDrvOutput;
|
conn->to << wopRegisterDrvOutput;
|
||||||
|
if (GET_PROTOCOL_MINOR(conn->daemonVersion) < 31) {
|
||||||
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 {
|
||||||
|
worker_proto::write(*this, conn->to, info);
|
||||||
|
}
|
||||||
conn.processStderr();
|
conn.processStderr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -664,10 +668,17 @@ std::optional<const Realisation> RemoteStore::queryRealisation(const DrvOutput &
|
||||||
conn->to << wopQueryRealisation;
|
conn->to << wopQueryRealisation;
|
||||||
conn->to << id.to_string();
|
conn->to << id.to_string();
|
||||||
conn.processStderr();
|
conn.processStderr();
|
||||||
|
if (GET_PROTOCOL_MINOR(conn->daemonVersion) < 31) {
|
||||||
auto outPaths = worker_proto::read(*this, conn->from, Phantom<std::set<StorePath>>{});
|
auto outPaths = worker_proto::read(*this, conn->from, Phantom<std::set<StorePath>>{});
|
||||||
if (outPaths.empty())
|
if (outPaths.empty())
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
return {Realisation{.id = id, .outPath = *outPaths.begin()}};
|
return {Realisation{.id = id, .outPath = *outPaths.begin()}};
|
||||||
|
} else {
|
||||||
|
auto realisations = worker_proto::read(*this, conn->from, Phantom<std::set<Realisation>>{});
|
||||||
|
if (realisations.empty())
|
||||||
|
return std::nullopt;
|
||||||
|
return *realisations.begin();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void writeDerivedPaths(RemoteStore & store, ConnectionHandle & conn, const std::vector<DerivedPath> & reqs)
|
static void writeDerivedPaths(RemoteStore & store, ConnectionHandle & conn, const std::vector<DerivedPath> & reqs)
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace nix {
|
||||||
#define WORKER_MAGIC_1 0x6e697863
|
#define WORKER_MAGIC_1 0x6e697863
|
||||||
#define WORKER_MAGIC_2 0x6478696f
|
#define WORKER_MAGIC_2 0x6478696f
|
||||||
|
|
||||||
#define PROTOCOL_VERSION (1 << 8 | 30)
|
#define PROTOCOL_VERSION (1 << 8 | 31)
|
||||||
#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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue