Skip to content

Commit

Permalink
Merge pull request #24 from rustbase/hotfix/update-index
Browse files Browse the repository at this point in the history
fix: update index on flush
  • Loading branch information
peeeuzin authored Feb 19, 2023
2 parents 24eb8cd + 4b8cb18 commit 504b5ac
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 50 deletions.
1 change: 1 addition & 0 deletions src/storage/lsm/index/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub fn write_index(path: &path::Path, index: &HashMap<String, String>) {
let mut file = fs::File::create(_path).unwrap();
file.write_all(&doc).unwrap();

file.sync_data().unwrap();
file.flush().unwrap();
}

Expand Down
94 changes: 44 additions & 50 deletions src/storage/lsm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,18 +116,14 @@ impl Lsm {
});
}

let mut memtable = self.memtable.write().unwrap();

if memtable.contains_key(&key.to_string()) {
memtable.remove(&key.to_string());
let value = self.memtable.write().unwrap().remove(&key.to_string());
self.dense_index.write().unwrap().remove(&key.to_string());
self.bloom_filter.write().unwrap().delete(key);

drop(memtable);
} else {
self.dense_index.write().unwrap().remove(&key.to_string());
if let Some(value) = value {
self.memtable_size += mem::size_of_val(&value);
}

self.bloom_filter.write().unwrap().delete(key);

Ok(())
}

Expand Down Expand Up @@ -160,38 +156,37 @@ impl Lsm {

pub fn flush(&mut self) -> Result<()> {
let memtable = self.get_memtable();

if memtable.is_empty() {
return Ok(());
}

let mut dense_index = self.dense_index.write().unwrap();

let segments = sstable::Segment::from_tree(&memtable, &self.lsm_config.sstable_path);

for token in segments.1 {
dense_index.insert(token.0, token.1);
}
if memtable.is_empty() {
index::write_index(&self.lsm_config.sstable_path, dense_index.deref());
filter::write_filter(
&self.lsm_config.sstable_path,
self.bloom_filter.read().unwrap().deref(),
);

index::write_index(&self.lsm_config.sstable_path, dense_index.deref());
Ok(())
} else {
let segments = sstable::Segment::from_tree(&memtable, &self.lsm_config.sstable_path);

let mut keys = Vec::new();
for token in segments.1 {
dense_index.insert(token.0, token.1);
}

for segment in dense_index.deref() {
keys.push(segment.0.clone());
}
index::write_index(&self.lsm_config.sstable_path, dense_index.deref());

drop(dense_index);
drop(dense_index);

filter::write_filter(
&self.lsm_config.sstable_path,
self.bloom_filter.read().unwrap().deref(),
);
filter::write_filter(
&self.lsm_config.sstable_path,
self.bloom_filter.read().unwrap().deref(),
);

self.memtable.write().unwrap().clear();
self.memtable_size = 0;
self.memtable.write().unwrap().clear();
self.memtable_size = 0;

Ok(())
Ok(())
}
}

pub fn get_memtable(&self) -> BTreeMap<String, bson::Bson> {
Expand Down Expand Up @@ -243,27 +238,26 @@ impl Drop for Lsm {
let memtable = self.memtable.read().unwrap();
let mut dense_index = self.dense_index.write().unwrap();

if memtable.is_empty() {
return;
}

let segments = sstable::Segment::from_tree(memtable.deref(), &self.lsm_config.sstable_path);
if memtable.len() == 0 {
index::write_index(&self.lsm_config.sstable_path, dense_index.deref());
filter::write_filter(
&self.lsm_config.sstable_path,
self.bloom_filter.read().unwrap().deref(),
);
} else {
let segments =
sstable::Segment::from_tree(memtable.deref(), &self.lsm_config.sstable_path);

for token in segments.1 {
dense_index.insert(token.0, token.1);
}
for token in segments.1 {
dense_index.insert(token.0, token.1);
}

let mut keys = Vec::new();
index::write_index(&self.lsm_config.sstable_path, dense_index.deref());

for segment in dense_index.deref() {
keys.push(segment.0.clone());
filter::write_filter(
&self.lsm_config.sstable_path,
self.bloom_filter.read().unwrap().deref(),
);
}

index::write_index(&self.lsm_config.sstable_path, dense_index.deref());

filter::write_filter(
&self.lsm_config.sstable_path,
self.bloom_filter.read().unwrap().deref(),
);
}
}

0 comments on commit 504b5ac

Please sign in to comment.