feat(tvix/composition): allow urls as anonymous stores

This allows specifying an url in place of a named reference to another
composition entry, if the castore crate has been compiled with the
 xp-store-composition feature.

Example: `--directory-service-addr cache://?near=memory://&far=memory://`

This would be equivalent to the instantiation via toml file:

```toml
[memory1]
type = "memory"

[memory2]
type = "memory"

[default]
type = "cache"
near = "memory1"
far = "memory2"
```

Note that each anonymous url causes a distinct instance to be created.

Change-Id: Iee5a07a94b063b5e767c704d9cad0114fa843164
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12146
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
Yureka 2024-08-07 16:50:38 +02:00 committed by yuka
parent ba4e02c3ac
commit 52bb3c6d02
9 changed files with 151 additions and 91 deletions

View file

@ -44,7 +44,10 @@ pub async fn from_addr(
})?
.0;
let path_info_service = path_info_service_config
.build("anonymous", context.unwrap_or(&CompositionContext::blank()))
.build(
"anonymous",
context.unwrap_or(&CompositionContext::blank(&REG)),
)
.await?;
Ok(path_info_service)
@ -53,7 +56,7 @@ pub async fn from_addr(
#[cfg(test)]
mod tests {
use super::from_addr;
use crate::composition::{Composition, DeserializeWithRegistry, ServiceBuilder};
use crate::composition::{Composition, DeserializeWithRegistry, ServiceBuilder, REG};
use lazy_static::lazy_static;
use rstest::rstest;
use tempfile::TempDir;
@ -125,7 +128,7 @@ mod tests {
)]
#[tokio::test]
async fn test_from_addr_tokio(#[case] uri_str: &str, #[case] exp_succeed: bool) {
let mut comp = Composition::default();
let mut comp = Composition::new(&REG);
comp.extend(vec![(
"default".into(),
DeserializeWithRegistry(Box::new(MemoryBlobServiceConfig {})

View file

@ -188,7 +188,7 @@ pub async fn construct_services_from_configs(
),
Box<dyn std::error::Error + Send + Sync>,
> {
let mut comp = Composition::default();
let mut comp = Composition::new(&REG);
comp.extend(configs.blobservices);
comp.extend(configs.directoryservices);