fix(tvix/castore/object_store): make query pairs object_store opts

We previously called ObjectStoreBlobService::parse_url, which passes an
empty list of options when constructing the ObjectStore.

This is most likely not what we want. The more reasonable thing to do is
pass along the query string (pairs) as options to
`object_store::parse_url_opts`, and remove them from the plain URL we
pass to object_store itself.

Change-Id: Ic2cb1dca2a2980a863165d81baa3323a355cf3fe
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11897
Reviewed-by: Connor Brewster <cbrewster@hey.com>
Autosubmit: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
Florian Klink 2024-06-29 20:09:42 +03:00 committed by flokli
parent d0ef6a50df
commit bba64d8762
2 changed files with 10 additions and 4 deletions

View file

@ -42,10 +42,13 @@ pub async fn from_addr(uri: &str) -> Result<Box<dyn BlobService>, crate::Error>
// parse it back as url, as Url::set_scheme() rejects some of the transitions we want to do. // parse it back as url, as Url::set_scheme() rejects some of the transitions we want to do.
let trimmed_url = { let trimmed_url = {
let s = url.to_string(); let s = url.to_string();
Url::parse(s.strip_prefix("objectstore+").unwrap()).unwrap() let mut url = Url::parse(s.strip_prefix("objectstore+").unwrap()).unwrap();
// trim the query pairs, they might contain credentials or local settings we don't want to send as-is.
url.set_query(None);
url
}; };
Box::new( Box::new(
ObjectStoreBlobService::parse_url(&trimmed_url) ObjectStoreBlobService::parse_url_opts(&trimmed_url, url.query_pairs())
.map_err(|e| Error::StorageError(e.to_string()))?, .map_err(|e| Error::StorageError(e.to_string()))?,
) )
} }

View file

@ -75,10 +75,13 @@ pub async fn from_addr(uri: &str) -> Result<Box<dyn DirectoryService>, crate::Er
// parse it back as url, as Url::set_scheme() rejects some of the transitions we want to do. // parse it back as url, as Url::set_scheme() rejects some of the transitions we want to do.
let trimmed_url = { let trimmed_url = {
let s = url.to_string(); let s = url.to_string();
Url::parse(s.strip_prefix("objectstore+").unwrap()).unwrap() let mut url = Url::parse(s.strip_prefix("objectstore+").unwrap()).unwrap();
// trim the query pairs, they might contain credentials or local settings we don't want to send as-is.
url.set_query(None);
url
}; };
Box::new( Box::new(
ObjectStoreDirectoryService::parse_url(&trimmed_url) ObjectStoreDirectoryService::parse_url_opts(&trimmed_url, url.query_pairs())
.map_err(|e| Error::StorageError(e.to_string()))?, .map_err(|e| Error::StorageError(e.to_string()))?,
) )
} }