From 4677d6f177f653dc12961228b0e3daf271140d7f Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Wed, 3 Jun 2026 15:30:44 +0200 Subject: [PATCH] refactor: improve resource cleanup and index packing Explicitly close file handles and remove temporary artifacts after serialization to prevent disk space leaks. Additionally, compact internal matrix structures immediately upon loading the KmerIndex to improve memory efficiency and prepare for downstream operations. --- src/obicompactvec/src/bitmatrix.rs | 4 ++++ src/obicompactvec/src/intmatrix.rs | 4 ++++ src/obikindex/src/rebuild.rs | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/obicompactvec/src/bitmatrix.rs b/src/obicompactvec/src/bitmatrix.rs index ead53af..5fd426b 100644 --- a/src/obicompactvec/src/bitmatrix.rs +++ b/src/obicompactvec/src/bitmatrix.rs @@ -190,6 +190,10 @@ pub fn pack_bit_matrix(dir: &Path) -> io::Result<()> { file.write_all(&(n_cols as u64).to_le_bytes())?; for &off in &offsets { file.write_all(&off.to_le_bytes())?; } for data in &col_files { file.write_all(data)?; } + drop(file); + + for c in 0..n_cols { fs::remove_file(col_path(dir, c))?; } + fs::remove_file(dir.join("meta.json"))?; Ok(()) } diff --git a/src/obicompactvec/src/intmatrix.rs b/src/obicompactvec/src/intmatrix.rs index 5fa1cc4..d1421e5 100644 --- a/src/obicompactvec/src/intmatrix.rs +++ b/src/obicompactvec/src/intmatrix.rs @@ -293,6 +293,10 @@ pub fn pack_compact_int_matrix(dir: &Path) -> io::Result<()> { file.write_all(&(n_cols as u64).to_le_bytes())?; for &off in &offsets { file.write_all(&off.to_le_bytes())?; } for data in &col_files { file.write_all(data)?; } + drop(file); + + for c in 0..n_cols { fs::remove_file(col_path(dir, c))?; } + fs::remove_file(dir.join("meta.json"))?; Ok(()) } diff --git a/src/obikindex/src/rebuild.rs b/src/obikindex/src/rebuild.rs index 95dc4b8..c7ac4fd 100644 --- a/src/obikindex/src/rebuild.rs +++ b/src/obikindex/src/rebuild.rs @@ -112,6 +112,8 @@ impl KmerIndex { // Write SENTINEL_INDEXED — output is ready to use. fs::File::create(output.join(SENTINEL_INDEXED))?; - KmerIndex::open(output) + let idx = KmerIndex::open(output)?; + idx.pack_matrices()?; + Ok(idx) } }