Fix index out of bounds issue in batch_remove (#256)
Some checks failed
Build / build (push) Has been cancelled

This commit is contained in:
SF-Zhou 2025-04-24 09:51:17 +08:00 committed by GitHub
parent 59eccb7fb3
commit 0033c5b0bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -657,26 +657,26 @@ impl Engine {
max_count: u64, max_count: u64,
) -> Result<u64> { ) -> Result<u64> {
let chunks = self.meta_store.query_chunks(begin, end, max_count)?; let chunks = self.meta_store.query_chunks(begin, end, max_count)?;
let chunks_len = chunks.len(); let mut offset = 0;
const BATCH_SIZE: Size = Size::mebibyte(1); const BATCH_SIZE: Size = Size::mebibyte(1);
let mut write_batch = RocksDB::new_write_batch(); let mut write_batch = RocksDB::new_write_batch();
let mut persist_end = 0;
for (index, (chunk_id, meta)) in chunks.iter().enumerate() { for (index, (chunk_id, meta)) in chunks.iter().enumerate() {
if write_batch.size_in_bytes() >= BATCH_SIZE.0 as _ { if write_batch.size_in_bytes() >= BATCH_SIZE.0 as _ {
self.meta_store.write(write_batch, true)?; self.meta_store.write(write_batch, true)?;
for i in persist_end..index + 1 {
self.meta_cache.remove(&chunks[i].0);
}
persist_end = index + 1;
write_batch = RocksDB::new_write_batch(); write_batch = RocksDB::new_write_batch();
for (chunk_id, _) in &chunks[offset..index] {
self.meta_cache.remove(chunk_id);
}
offset = index;
} }
self.meta_store self.meta_store
.remove_mut(&chunk_id, &meta, &mut write_batch)?; .remove_mut(&chunk_id, &meta, &mut write_batch)?;
} }
if !write_batch.is_empty() { if !write_batch.is_empty() {
self.meta_store.write(write_batch, true)?; self.meta_store.write(write_batch, true)?;
for i in persist_end..chunks_len { for (chunk_id, _) in &chunks[offset..] {
self.meta_cache.remove(&chunks[i].0); self.meta_cache.remove(chunk_id);
} }
} }
Ok(chunks.len() as _) Ok(chunks.len() as _)