From cbdcf778620b831bf2b50bc931b4b160e5f9c899 Mon Sep 17 00:00:00 2001 From: Joshua Date: Fri, 14 Apr 2023 11:32:49 -0500 Subject: [PATCH 1/4] Fix bug --- src/rust/engine/fs/store/src/local.rs | 10 ++--- src/rust/engine/fs/store/src/local_tests.rs | 49 +++++++++++++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/rust/engine/fs/store/src/local.rs b/src/rust/engine/fs/store/src/local.rs index 2978607eaa3..0e7c5a4e8b7 100644 --- a/src/rust/engine/fs/store/src/local.rs +++ b/src/rust/engine/fs/store/src/local.rs @@ -308,11 +308,11 @@ impl UnderlyingByteStore for ShardedFSDB { } async fn remove(&self, fingerprint: Fingerprint) -> Result { - Ok( - tokio::fs::remove_file(self.get_path(fingerprint)) - .await - .is_ok(), - ) + let removed = tokio::fs::remove_file(self.get_path(fingerprint)) + .await + .is_ok(); + let _ = self.dest_initializer.lock().remove(&fingerprint); + Ok(removed) } async fn store_bytes_batch( diff --git a/src/rust/engine/fs/store/src/local_tests.rs b/src/rust/engine/fs/store/src/local_tests.rs index 24bcae76240..a7d71581767 100644 --- a/src/rust/engine/fs/store/src/local_tests.rs +++ b/src/rust/engine/fs/store/src/local_tests.rs @@ -548,6 +548,55 @@ async fn garbage_collect_and_compact() { ); } +async fn write_1mb(store: &ByteStore, byte: u8) -> Digest { + let mut bytes = BytesMut::with_capacity(1024 * 1024); + for _ in 0..1024 * 1024 { + bytes.put_u8(byte); + } + let digest = Digest::of_bytes(&bytes); + store + .store_bytes(EntryType::File, digest.hash, bytes.freeze(), false) + .await + .expect("Error storing"); + digest +} + +#[tokio::test] +async fn remove_big_file_and_store_again() { + let dir = TempDir::new().unwrap(); + let store = new_store(dir.path()); + + let digest1 = write_1mb(&store, b'0').await; + let digest2 = write_1mb(&store, b'1').await; + + let size = get_directory_size(dir.path()); + assert!( + size >= 2 * 1024 * 1024, + "Expect size to be at least 2MB but was {size}" + ); + + store.remove(EntryType::File, digest1) + .await + .expect("Error removing"); + store.remove(EntryType::File, digest2) + .await + .expect("Error removing"); + + let size = get_directory_size(dir.path()); + assert!( + size < 2 * 1024 * 1024, + "Expect size to be less than 2MB but was {size}" + ); + + write_1mb(&store, b'0').await; + write_1mb(&store, b'1').await; + let size = get_directory_size(dir.path()); + assert!( + size >= 2 * 1024 * 1024, + "Expect size to be at least 2MB but was {size}" + ); +} + #[tokio::test] async fn entry_type_for_file() { let testdata = TestData::roland(); From 47a88826d3478774303dc6b35196ad89eb5838fa Mon Sep 17 00:00:00 2001 From: Joshua Date: Fri, 14 Apr 2023 11:32:53 -0500 Subject: [PATCH 2/4] fmt --- src/rust/engine/fs/store/src/local_tests.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/rust/engine/fs/store/src/local_tests.rs b/src/rust/engine/fs/store/src/local_tests.rs index a7d71581767..967d8f8d962 100644 --- a/src/rust/engine/fs/store/src/local_tests.rs +++ b/src/rust/engine/fs/store/src/local_tests.rs @@ -575,10 +575,12 @@ async fn remove_big_file_and_store_again() { "Expect size to be at least 2MB but was {size}" ); - store.remove(EntryType::File, digest1) + store + .remove(EntryType::File, digest1) .await .expect("Error removing"); - store.remove(EntryType::File, digest2) + store + .remove(EntryType::File, digest2) .await .expect("Error removing"); From 7c7783863ae78ac54fe8c135d68d3e0e580d930a Mon Sep 17 00:00:00 2001 From: Joshua Date: Fri, 14 Apr 2023 12:10:26 -0500 Subject: [PATCH 3/4] switch order --- src/rust/engine/fs/store/src/local.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rust/engine/fs/store/src/local.rs b/src/rust/engine/fs/store/src/local.rs index 0e7c5a4e8b7..5f2907ea30e 100644 --- a/src/rust/engine/fs/store/src/local.rs +++ b/src/rust/engine/fs/store/src/local.rs @@ -308,10 +308,10 @@ impl UnderlyingByteStore for ShardedFSDB { } async fn remove(&self, fingerprint: Fingerprint) -> Result { + let _ = self.dest_initializer.lock().remove(&fingerprint); let removed = tokio::fs::remove_file(self.get_path(fingerprint)) .await .is_ok(); - let _ = self.dest_initializer.lock().remove(&fingerprint); Ok(removed) } From 697af6f9d88a710b4b0c76e2a33f02296d46f809 Mon Sep 17 00:00:00 2001 From: Joshua Date: Fri, 14 Apr 2023 12:10:57 -0500 Subject: [PATCH 4/4] switch order --- src/rust/engine/fs/store/src/local.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/rust/engine/fs/store/src/local.rs b/src/rust/engine/fs/store/src/local.rs index 5f2907ea30e..bbed39f972e 100644 --- a/src/rust/engine/fs/store/src/local.rs +++ b/src/rust/engine/fs/store/src/local.rs @@ -309,10 +309,11 @@ impl UnderlyingByteStore for ShardedFSDB { async fn remove(&self, fingerprint: Fingerprint) -> Result { let _ = self.dest_initializer.lock().remove(&fingerprint); - let removed = tokio::fs::remove_file(self.get_path(fingerprint)) - .await - .is_ok(); - Ok(removed) + Ok( + tokio::fs::remove_file(self.get_path(fingerprint)) + .await + .is_ok(), + ) } async fn store_bytes_batch(