diff options
author | Florian Klink <flokli@flokli.de> | 2024-01-12T10·18+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-01-12T20·37+0000 |
commit | b59df53774acc654ea4b23f02ccf5529587bceff (patch) | |
tree | fa35191cd12dbca2478884616de2527eb89066e2 /tvix/store/src/pathinfoservice/memory.rs | |
parent | 7d51193f7db8d6126ee2970eadf009a5d87b694f (diff) |
refactor(tvix/store/pathinfoservice): make more generic r/7371
We don't need Arcs in most of the cases, we're fine with some container. Change-Id: Ic4f8acb5b9d93e2b0923bb607463fb91e9d0e4fe Reviewed-on: https://cl.tvl.fyi/c/depot/+/10606 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Diffstat (limited to 'tvix/store/src/pathinfoservice/memory.rs')
-rw-r--r-- | tvix/store/src/pathinfoservice/memory.rs | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/tvix/store/src/pathinfoservice/memory.rs b/tvix/store/src/pathinfoservice/memory.rs index 6f96c083476c..9f657a9c625b 100644 --- a/tvix/store/src/pathinfoservice/memory.rs +++ b/tvix/store/src/pathinfoservice/memory.rs @@ -11,18 +11,15 @@ use tvix_castore::proto as castorepb; use tvix_castore::Error; use tvix_castore::{blobservice::BlobService, directoryservice::DirectoryService}; -pub struct MemoryPathInfoService { +pub struct MemoryPathInfoService<BS, DS> { db: Arc<RwLock<HashMap<[u8; 20], PathInfo>>>, - blob_service: Arc<dyn BlobService>, - directory_service: Arc<dyn DirectoryService>, + blob_service: BS, + directory_service: DS, } -impl MemoryPathInfoService { - pub fn new( - blob_service: Arc<dyn BlobService>, - directory_service: Arc<dyn DirectoryService>, - ) -> Self { +impl<BS, DS> MemoryPathInfoService<BS, DS> { + pub fn new(blob_service: BS, directory_service: DS) -> Self { Self { db: Default::default(), blob_service, @@ -32,7 +29,11 @@ impl MemoryPathInfoService { } #[async_trait] -impl PathInfoService for MemoryPathInfoService { +impl<BS, DS> PathInfoService for MemoryPathInfoService<BS, DS> +where + BS: AsRef<dyn BlobService> + Send + Sync, + DS: AsRef<dyn DirectoryService> + Send + Sync, +{ async fn get(&self, digest: [u8; 20]) -> Result<Option<PathInfo>, Error> { let db = self.db.read().unwrap(); @@ -65,13 +66,9 @@ impl PathInfoService for MemoryPathInfoService { &self, root_node: &castorepb::node::Node, ) -> Result<(u64, [u8; 32]), Error> { - calculate_size_and_sha256( - root_node, - self.blob_service.clone(), - self.directory_service.clone(), - ) - .await - .map_err(|e| Error::StorageError(e.to_string())) + calculate_size_and_sha256(root_node, &self.blob_service, &self.directory_service) + .await + .map_err(|e| Error::StorageError(e.to_string())) } fn list(&self) -> Pin<Box<dyn Stream<Item = Result<PathInfo, Error>> + Send>> { |