mirror of
https://github.com/deepseek-ai/3FS
synced 2025-06-26 18:16:45 +00:00
Fix index out of bounds issue in batch_remove (#256)
Some checks failed
Build / build (push) Has been cancelled
Some checks failed
Build / build (push) Has been cancelled
This commit is contained in:
parent
59eccb7fb3
commit
0033c5b0bb
@ -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 _)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user