Skip to content

Commit bad4fe0

Browse files
committed
fix: seqno of ingested items that are point read
1 parent a7342b4 commit bad4fe0

2 files changed

Lines changed: 50 additions & 8 deletions

File tree

src/table/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ impl Table {
324324

325325
let block = self.load_data_block(block_handle.as_ref())?;
326326

327-
if let Some(item) = block.point_read(key, seqno) {
327+
if let Some(mut item) = block.point_read(key, seqno) {
328+
item.key.seqno += self.global_seqno();
328329
return Ok(Some(item));
329330
}
330331

src/table/tests.rs

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,17 +1388,16 @@ fn table_global_seqno() -> crate::Result<()> {
13881388
let dir = tempfile::tempdir()?;
13891389
let file = dir.path().join("table_fuzz");
13901390

1391-
let mut writer = crate::table::Writer::new(file.clone(), 0, 0)
1392-
.unwrap()
1391+
let mut writer = crate::table::Writer::new(file.clone(), 0, 0)?
13931392
.use_partitioned_filter()
13941393
.use_data_block_size(1)
13951394
.use_meta_partition_size(1);
13961395

1397-
for item in items.iter().cloned() {
1398-
writer.write(item).unwrap();
1396+
for item in items {
1397+
writer.write(item)?;
13991398
}
14001399

1401-
let _trailer = writer.finish().unwrap();
1400+
let _trailer = writer.finish()?;
14021401

14031402
let table = crate::Table::recover(
14041403
file,
@@ -1411,8 +1410,7 @@ fn table_global_seqno() -> crate::Result<()> {
14111410
true,
14121411
#[cfg(feature = "metrics")]
14131412
Default::default(),
1414-
)
1415-
.unwrap();
1413+
)?;
14161414

14171415
// global seqno is 7, so a1 is = 8 -> can not be read by snapshot=8
14181416
assert!(table
@@ -1429,3 +1427,46 @@ fn table_global_seqno() -> crate::Result<()> {
14291427

14301428
Ok(())
14311429
}
1430+
1431+
#[test]
1432+
#[expect(clippy::unwrap_used)]
1433+
fn table_return_global_seqno() -> crate::Result<()> {
1434+
use crate::ValueType::Value;
1435+
1436+
const SEQNO: SeqNo = 15;
1437+
1438+
let items = [InternalValue::from_components("abc", "abc", 0, Value)];
1439+
1440+
let dir = tempfile::tempdir()?;
1441+
let file = dir.path().join("table_fuzz");
1442+
1443+
let mut writer = crate::table::Writer::new(file.clone(), 0, 0)?;
1444+
1445+
for item in items {
1446+
writer.write(item)?;
1447+
}
1448+
1449+
let _trailer = writer.finish()?;
1450+
1451+
let table = crate::Table::recover(
1452+
file,
1453+
crate::Checksum::from_raw(0),
1454+
SEQNO,
1455+
0,
1456+
Arc::new(crate::Cache::with_capacity_bytes(0)),
1457+
Some(Arc::new(crate::DescriptorTable::new(10))),
1458+
true,
1459+
true,
1460+
#[cfg(feature = "metrics")]
1461+
Default::default(),
1462+
)?;
1463+
1464+
assert_eq!(
1465+
InternalValue::from_components("abc", "abc", SEQNO, Value),
1466+
table
1467+
.get(b"abc", 2 * SEQNO, BloomBuilder::get_hash(b"abc"))?
1468+
.unwrap(),
1469+
);
1470+
1471+
Ok(())
1472+
}

0 commit comments

Comments
 (0)