about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2023-12-16T21·01+0200
committerclbot <clbot@tvl.fyi>2023-12-16T21·46+0000
commit97dee277b06570cfd9cc661e2e900dcc7ad2ede8 (patch)
tree428610ca81ad027517edeca2ddba89a5e5c026ae
parent6815572274c1e61b19bd386d52030e09289a511c (diff)
refactor(tvix/store/fs): no explicitly required Arc'ed Blob/DirSvc r/7223
Change-Id: Ie55026668cd4a6117e7b07174f5ac6638f93d194
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10374
Tested-by: BuildkiteCI
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
-rw-r--r--tvix/store/src/fs/mod.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/tvix/store/src/fs/mod.rs b/tvix/store/src/fs/mod.rs
index cb2d2154e7..fbd1cb6fc5 100644
--- a/tvix/store/src/fs/mod.rs
+++ b/tvix/store/src/fs/mod.rs
@@ -16,6 +16,7 @@ use fuse_backend_rs::abi::fuse_abi::stat64;
 use fuse_backend_rs::api::filesystem::{Context, FileSystem, FsOptions, ROOT_ID};
 use futures::StreamExt;
 use parking_lot::RwLock;
+use std::ops::Deref;
 use std::{
     collections::HashMap,
     io,
@@ -72,9 +73,9 @@ use self::{
 /// Due to the above being valid across the whole store, and considering the
 /// merkle structure is a DAG, not a tree, this also means we can't do "bucketed
 /// allocation", aka reserve Directory.size inodes for each PathInfo.
-pub struct TvixStoreFs<RN> {
-    blob_service: Arc<dyn BlobService>,
-    directory_service: Arc<dyn DirectoryService>,
+pub struct TvixStoreFs<BS, DS, RN> {
+    blob_service: BS,
+    directory_service: DS,
     root_nodes_provider: RN,
 
     /// Whether to (try) listing elements in the root.
@@ -95,13 +96,15 @@ pub struct TvixStoreFs<RN> {
     tokio_handle: tokio::runtime::Handle,
 }
 
-impl<RN> TvixStoreFs<RN>
+impl<BS, DS, RN> TvixStoreFs<BS, DS, RN>
 where
+    BS: Deref<Target = dyn BlobService> + Clone + Send,
+    DS: Deref<Target = dyn DirectoryService> + Clone + Send + 'static,
     RN: RootNodes + Clone + 'static,
 {
     pub fn new(
-        blob_service: Arc<dyn BlobService>,
-        directory_service: Arc<dyn DirectoryService>,
+        blob_service: BS,
+        directory_service: DS,
         root_nodes_provider: RN,
         list_root: bool,
     ) -> Self {
@@ -262,8 +265,10 @@ where
     }
 }
 
-impl<RN> FileSystem for TvixStoreFs<RN>
+impl<BS, DS, RN> FileSystem for TvixStoreFs<BS, DS, RN>
 where
+    BS: Deref<Target = dyn BlobService> + Clone + Send + 'static,
+    DS: Deref<Target = dyn DirectoryService> + Send + Clone + 'static,
     RN: RootNodes + Clone + 'static,
 {
     type Handle = u64;