Skip to content

Commit f72e20e

Browse files
authored
Merge pull request #150 from fjall-rs/fix/lockless-ranges
2.7.2
2 parents ae6c310 + 6017725 commit f72e20e

File tree

4 files changed

+32
-3
lines changed

4 files changed

+32
-3
lines changed

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "fjall"
33
description = "LSM-based key-value storage engine"
44
license = "MIT OR Apache-2.0"
5-
version = "2.7.1"
5+
version = "2.7.2"
66
edition = "2021"
77
rust-version = "1.75.0"
88
readme = "README.md"
@@ -28,7 +28,7 @@ __internal_whitebox = []
2828
[dependencies]
2929
byteorder = "1.5.0"
3030
byteview = "0.6.1"
31-
lsm-tree = { version = "2.7.1", default-features = false, features = [] }
31+
lsm-tree = { version = "2.7.2", default-features = false, features = [] }
3232
log = "0.4.21"
3333
std-semaphore = "0.1.0"
3434
tempfile = "3.10.1"

src/batch/mod.rs

+3
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ impl Batch {
147147
.fetch_max(batch_seqno + 1, Ordering::AcqRel);
148148

149149
drop(journal_writer);
150+
151+
log::trace!("batch: Freed journal writer");
152+
150153
drop(partitions);
151154

152155
// IMPORTANT: Add batch size to current write buffer size

src/recovery.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ pub fn recover_sealed_memtables(
190190
partition_lsn.is_some_and(|partition_lsn| partition_lsn >= handle.lsn);
191191

192192
if should_skip_sealed_memtable {
193-
handle.partition.tree.lock_active_memtable().clear();
193+
handle.partition.tree.clear_active_memtable();
194194

195195
log::trace!(
196196
"Partition {} has higher seqno ({partition_lsn:?}), skipping",

tests/write_during_read.rs

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use fjall::{Config, PartitionCreateOptions};
2+
use test_log::test;
3+
4+
#[test]
5+
fn write_during_read() -> fjall::Result<()> {
6+
let folder = tempfile::tempdir()?;
7+
8+
let keyspace = Config::new(&folder).open()?;
9+
10+
let tree = keyspace.open_partition(
11+
"default",
12+
PartitionCreateOptions::default().max_memtable_size(128_000),
13+
)?;
14+
15+
for x in 0u64..50_000 {
16+
tree.insert(x.to_be_bytes(), x.to_be_bytes())?;
17+
}
18+
tree.rotate_memtable_and_wait()?;
19+
20+
for kv in tree.iter() {
21+
let (k, v) = kv?;
22+
tree.insert(k, v.repeat(4))?;
23+
}
24+
25+
Ok(())
26+
}

0 commit comments

Comments
 (0)