feat(nix-daemon): Implement stubs for QueryReferrers, QueryRealizations
These are required to support certain nix's local-overlay store operations, it's safer to return empty results for these operations than failing with "operation not implemented" errors. Change-Id: Ic9b69d75dd52af5a826bfb6a8b283b082a0f6bcf Reviewed-on: https://cl.tvl.fyi/c/depot/+/12766 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
parent
fa9c067dc9
commit
ccecede70b
1 changed files with 18 additions and 1 deletions
|
@ -5,7 +5,7 @@ use tokio::{
|
||||||
io::{split, AsyncReadExt, AsyncWriteExt, ReadHalf, WriteHalf},
|
io::{split, AsyncReadExt, AsyncWriteExt, ReadHalf, WriteHalf},
|
||||||
sync::Mutex,
|
sync::Mutex,
|
||||||
};
|
};
|
||||||
use tracing::debug;
|
use tracing::{debug, warn};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
types::QueryValidPaths,
|
types::QueryValidPaths,
|
||||||
|
@ -146,6 +146,23 @@ where
|
||||||
let path: StorePath<String> = self.reader.read_value().await?;
|
let path: StorePath<String> = self.reader.read_value().await?;
|
||||||
self.handle(io.query_valid_derivers(&path)).await?
|
self.handle(io.query_valid_derivers(&path)).await?
|
||||||
}
|
}
|
||||||
|
// FUTUREWORK: These are just stubs that return an empty list.
|
||||||
|
// It's important not to return an error for the local-overlay:// store
|
||||||
|
// to work properly. While it will not see certain referrers and realizations
|
||||||
|
// it will not fail on various operations like gc and optimize store. At the
|
||||||
|
// same time, returning an empty list here shouldn't break any of local-overlay store's
|
||||||
|
// invariants.
|
||||||
|
Operation::QueryReferrers | Operation::QueryRealisation => {
|
||||||
|
let _: String = self.reader.read_value().await?;
|
||||||
|
self.handle(async move {
|
||||||
|
warn!(
|
||||||
|
?operation,
|
||||||
|
"This operation is not implemented. Returning empty result..."
|
||||||
|
);
|
||||||
|
Ok(Vec::<StorePath<String>>::new())
|
||||||
|
})
|
||||||
|
.await?
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
return Err(std::io::Error::other(format!(
|
return Err(std::io::Error::other(format!(
|
||||||
"Operation {operation:?} is not implemented"
|
"Operation {operation:?} is not implemented"
|
||||||
|
|
Loading…
Add table
Reference in a new issue