1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-08 19:46:02 +01:00

Daemon protocol: Use the WorkerProto serializer for store paths

This commit is contained in:
Eelco Dolstra 2025-10-16 16:57:43 +02:00
parent 0503a862ef
commit d782c5e586
2 changed files with 53 additions and 48 deletions

View file

@ -312,7 +312,7 @@ static void performOp(
switch (op) {
case WorkerProto::Op::IsValidPath: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
bool result = store->isValidPath(path);
logger->stopWork();
@ -339,7 +339,7 @@ static void performOp(
}
case WorkerProto::Op::HasSubstitutes: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
StorePathSet paths; // FIXME
paths.insert(path);
@ -359,7 +359,7 @@ static void performOp(
}
case WorkerProto::Op::QueryPathHash: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
auto hash = store->queryPathInfo(path)->narHash;
logger->stopWork();
@ -371,7 +371,7 @@ static void performOp(
case WorkerProto::Op::QueryReferrers:
case WorkerProto::Op::QueryValidDerivers:
case WorkerProto::Op::QueryDerivationOutputs: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
StorePathSet paths;
if (op == WorkerProto::Op::QueryReferences)
@ -389,7 +389,7 @@ static void performOp(
}
case WorkerProto::Op::QueryDerivationOutputNames: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
auto names = store->readDerivation(path).outputNames();
logger->stopWork();
@ -398,7 +398,7 @@ static void performOp(
}
case WorkerProto::Op::QueryDerivationOutputMap: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
auto outputs = store->queryPartialDerivationOutputMap(path);
logger->stopWork();
@ -407,11 +407,11 @@ static void performOp(
}
case WorkerProto::Op::QueryDeriver: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
auto info = store->queryPathInfo(path);
logger->stopWork();
conn.to << (info->deriver ? store->printStorePath(*info->deriver) : "");
WorkerProto::write(*store, conn, info->deriver);
break;
}
@ -420,7 +420,7 @@ static void performOp(
logger->startWork();
auto path = store->queryPathFromHashPart(hashPart);
logger->stopWork();
conn.to << (path ? store->printStorePath(*path) : "");
WorkerProto::write(*store, conn, path);
break;
}
@ -505,7 +505,7 @@ static void performOp(
store->addToStoreFromDump(*dumpSource, baseName, FileSerialisationMethod::NixArchive, method, hashAlgo);
logger->stopWork();
conn.to << store->printStorePath(path);
WorkerProto::write(*store, wconn, path);
}
break;
}
@ -542,7 +542,7 @@ static void performOp(
NoRepair);
});
logger->stopWork();
conn.to << store->printStorePath(path);
WorkerProto::write(*store, wconn, path);
break;
}
@ -591,7 +591,7 @@ static void performOp(
}
case WorkerProto::Op::BuildDerivation: {
auto drvPath = store->parseStorePath(readString(conn.from));
auto drvPath = WorkerProto::Serialise<StorePath>::read(*store, rconn);
BasicDerivation drv;
/*
* Note: unlike wopEnsurePath, this operation reads a
@ -668,7 +668,7 @@ static void performOp(
}
case WorkerProto::Op::EnsurePath: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
store->ensurePath(path);
logger->stopWork();
@ -677,7 +677,7 @@ static void performOp(
}
case WorkerProto::Op::AddTempRoot: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
store->addTempRoot(path);
logger->stopWork();
@ -733,8 +733,10 @@ static void performOp(
conn.to << size;
for (auto & [target, links] : roots)
for (auto & link : links)
conn.to << link << store->printStorePath(target);
for (auto & link : links) {
conn.to << link;
WorkerProto::write(*store, wconn, target);
}
break;
}
@ -799,7 +801,7 @@ static void performOp(
}
case WorkerProto::Op::QuerySubstitutablePathInfo: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
SubstitutablePathInfos infos;
store->querySubstitutablePathInfos({{path, std::nullopt}}, infos);
@ -808,7 +810,8 @@ static void performOp(
if (i == infos.end())
conn.to << 0;
else {
conn.to << 1 << (i->second.deriver ? store->printStorePath(*i->second.deriver) : "");
conn.to << 1;
WorkerProto::write(*store, wconn, i->second.deriver);
WorkerProto::write(*store, wconn, i->second.references);
conn.to << i->second.downloadSize << i->second.narSize;
}
@ -829,8 +832,8 @@ static void performOp(
logger->stopWork();
conn.to << infos.size();
for (auto & i : infos) {
conn.to << store->printStorePath(i.first)
<< (i.second.deriver ? store->printStorePath(*i.second.deriver) : "");
WorkerProto::write(*store, wconn, i.first);
WorkerProto::write(*store, wconn, i.second.deriver);
WorkerProto::write(*store, wconn, i.second.references);
conn.to << i.second.downloadSize << i.second.narSize;
}
@ -846,7 +849,7 @@ static void performOp(
}
case WorkerProto::Op::QueryPathInfo: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
std::shared_ptr<const ValidPathInfo> info;
logger->startWork();
info = store->queryPathInfo(path);
@ -880,7 +883,7 @@ static void performOp(
}
case WorkerProto::Op::AddSignatures: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
StringSet sigs = readStrings<StringSet>(conn.from);
logger->startWork();
store->addSignatures(path, sigs);
@ -890,7 +893,7 @@ static void performOp(
}
case WorkerProto::Op::NarFromPath: {
auto path = store->parseStorePath(readString(conn.from));
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
logger->startWork();
logger->stopWork();
dumpPath(store->toRealPath(path), conn.to);
@ -899,12 +902,11 @@ static void performOp(
case WorkerProto::Op::AddToStoreNar: {
bool repair, dontCheckSigs;
auto path = store->parseStorePath(readString(conn.from));
auto deriver = readString(conn.from);
auto path = WorkerProto::Serialise<StorePath>::read(*store, rconn);
auto deriver = WorkerProto::Serialise<std::optional<StorePath>>::read(*store, rconn);
auto narHash = Hash::parseAny(readString(conn.from), HashAlgorithm::SHA256);
ValidPathInfo info{path, narHash};
if (deriver != "")
info.deriver = store->parseStorePath(deriver);
info.deriver = std::move(deriver);
info.references = WorkerProto::Serialise<StorePathSet>::read(*store, rconn);
conn.from >> info.registrationTime >> info.narSize >> info.ultimate;
info.sigs = readStrings<StringSet>(conn.from);