From 4415afa9de69b6b893e7f3524997842969d529da Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Thu, 13 Mar 2025 17:02:48 +0100 Subject: [PATCH] refactor(tvix/castore/directory): borrow in SimplePutter This means we don't need to clone self in all implementations using SimplePutter. Change-Id: I11347028801c43c5cc9920c0a9edf47627096bce Reviewed-on: https://cl.tvl.fyi/c/depot/+/13262 Autosubmit: flokli Reviewed-by: edef Tested-by: BuildkiteCI --- tvix/castore/src/directoryservice/bigtable.rs | 7 ++----- tvix/castore/src/directoryservice/combinators.rs | 5 ++--- tvix/castore/src/directoryservice/memory.rs | 7 ++----- tvix/castore/src/directoryservice/simple_putter.rs | 13 ++++++++----- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/tvix/castore/src/directoryservice/bigtable.rs b/tvix/castore/src/directoryservice/bigtable.rs index a5921b587..92fd92826 100644 --- a/tvix/castore/src/directoryservice/bigtable.rs +++ b/tvix/castore/src/directoryservice/bigtable.rs @@ -319,11 +319,8 @@ impl DirectoryService for BigtableDirectoryService { } #[instrument(skip_all, fields(instance_name=%self.instance_name))] - fn put_multiple_start(&self) -> Box<(dyn DirectoryPutter + 'static)> - where - Self: Clone, - { - Box::new(SimplePutter::new(self.clone())) + fn put_multiple_start(&self) -> Box<(dyn DirectoryPutter + '_)> { + Box::new(SimplePutter::new(self)) } } diff --git a/tvix/castore/src/directoryservice/combinators.rs b/tvix/castore/src/directoryservice/combinators.rs index 450c64271..72e972963 100644 --- a/tvix/castore/src/directoryservice/combinators.rs +++ b/tvix/castore/src/directoryservice/combinators.rs @@ -20,7 +20,6 @@ use crate::Error; /// which is useful when far does not support accessing intermediate directories (but near does). /// There is no negative cache. /// Inserts and listings are not implemented for now. -#[derive(Clone)] pub struct Cache { instance_name: String, near: DS1, @@ -143,8 +142,8 @@ where } #[instrument(skip_all)] - fn put_multiple_start(&self) -> Box<(dyn DirectoryPutter + 'static)> { - Box::new(SimplePutter::new((*self).clone())) + fn put_multiple_start(&self) -> Box<(dyn DirectoryPutter + '_)> { + Box::new(SimplePutter::new(self)) } } diff --git a/tvix/castore/src/directoryservice/memory.rs b/tvix/castore/src/directoryservice/memory.rs index a43d7b8d8..e6fdb2570 100644 --- a/tvix/castore/src/directoryservice/memory.rs +++ b/tvix/castore/src/directoryservice/memory.rs @@ -66,11 +66,8 @@ impl DirectoryService for MemoryDirectoryService { } #[instrument(skip_all, fields(instance_name=%self.instance_name))] - fn put_multiple_start(&self) -> Box<(dyn DirectoryPutter + 'static)> - where - Self: Clone, - { - Box::new(SimplePutter::new(self.clone())) + fn put_multiple_start(&self) -> Box<(dyn DirectoryPutter + '_)> { + Box::new(SimplePutter::new(self)) } } diff --git a/tvix/castore/src/directoryservice/simple_putter.rs b/tvix/castore/src/directoryservice/simple_putter.rs index b4daaee61..476003e60 100644 --- a/tvix/castore/src/directoryservice/simple_putter.rs +++ b/tvix/castore/src/directoryservice/simple_putter.rs @@ -10,14 +10,17 @@ use tracing::warn; /// This is an implementation of DirectoryPutter that simply /// inserts individual Directory messages one by one, on close, after /// they successfully validated. -pub struct SimplePutter { - directory_service: DS, +pub struct SimplePutter<'a, DS> { + directory_service: &'a DS, directory_validator: Option>, } -impl SimplePutter { - pub fn new(directory_service: DS) -> Self { +impl<'a, DS> SimplePutter<'a, DS> +where + DS: DirectoryService, +{ + pub fn new(directory_service: &'a DS) -> Self { Self { directory_service, directory_validator: Some(Default::default()), @@ -26,7 +29,7 @@ impl SimplePutter { } #[async_trait] -impl DirectoryPutter for SimplePutter { +impl DirectoryPutter for SimplePutter<'_, DS> { #[instrument(level = "trace", skip_all, fields(directory.digest=%directory.digest()), err)] async fn put(&mut self, directory: Directory) -> Result<(), Error> { match self.directory_validator {