Skip to content

Commit cf8542e

Browse files
committed
change logic of create_seek_to_key() of SsTableIterator
1 parent 3dfe831 commit cf8542e

File tree

4 files changed

+45
-36
lines changed

4 files changed

+45
-36
lines changed

mini-lsm-starter/src/compact.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,25 +136,25 @@ impl LsmStorageInner {
136136
let builder_inner = sst_builder.as_mut().unwrap();
137137

138138
if is_same_as_prevkey && iter.key().ts() < min_ts {
139-
println!(
140-
"prev_key: {:?}, iter.key(): {:?}, ts: {:?}, min_ts: {:?}",
141-
prev_key,
142-
iter.key(),
143-
iter.key().ts(),
144-
min_ts
145-
);
139+
// println!(
140+
// "prev_key: {:?}, iter.key(): {:?}, ts: {:?}, min_ts: {:?}",
141+
// prev_key,
142+
// iter.key(),
143+
// iter.key().ts(),
144+
// min_ts
145+
// );
146146
iter.next()?;
147147
continue;
148148
}
149149

150150
if !is_same_as_prevkey && iter.key().ts() <= min_ts && iter.value().is_empty() {
151-
println!(
152-
"delete key: {:?}, value: {:?}, ts: {:?}, min_ts: {:?}",
153-
iter.key(),
154-
iter.value(),
155-
iter.key().ts(),
156-
min_ts
157-
);
151+
// println!(
152+
// "delete key: {:?}, value: {:?}, ts: {:?}, min_ts: {:?}",
153+
// iter.key(),
154+
// iter.value(),
155+
// iter.key().ts(),
156+
// min_ts
157+
// );
158158
prev_key.clear();
159159
prev_key.extend(iter.key().key_ref());
160160
iter.next()?;

mini-lsm-starter/src/mvcc/watermark.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,9 @@ impl Watermark {
3434
self.readers.len()
3535
}
3636
}
37+
38+
impl Default for Watermark {
39+
fn default() -> Self {
40+
Self::new()
41+
}
42+
}

mini-lsm-starter/src/table.rs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -257,26 +257,22 @@ impl SsTable {
257257
/// Note: You may want to make use of the `first_key` stored in `BlockMeta`.
258258
/// You may also assume the key-value pairs stored in each consecutive block are sorted.
259259
pub fn find_block_idx(&self, key: KeySlice) -> usize {
260-
// self.block_meta
261-
// .partition_point(|meta| meta.first_key.as_key_slice() <= key)
262-
// .saturating_sub(1)
263-
let mut final_idx: usize = 0;
264-
let mut prevmeta_lastkey = KeySlice::from(key);
265-
for meta in self.block_meta.iter() {
266-
if meta.first_key.as_key_slice() <= key {
267-
final_idx += 1;
268-
} else if meta.first_key.key_ref() <= key.key_ref() && prevmeta_lastkey < key {
269-
final_idx += 1;
270-
} else {
271-
// println!("key is {:?} ts={:?}, meta.first_key is {:?} ts={:?}, meta.last_key is {:?} ts={:?}", key.to_key_vec().into_key_bytes(), key.ts(), meta.first_key, meta.first_key.ts(), meta.last_key, meta.last_key.ts());
272-
break;
273-
}
274-
prevmeta_lastkey = meta.last_key.as_key_slice();
275-
}
276-
match final_idx {
277-
0 => 0,
278-
_ => final_idx - 1,
279-
}
260+
self.block_meta
261+
.partition_point(|meta| meta.first_key.as_key_slice() <= key)
262+
.saturating_sub(1)
263+
// let mut final_idx: usize = 0;
264+
// for meta in self.block_meta.iter() {
265+
// if meta.first_key.as_key_slice() <= key {
266+
// final_idx += 1;
267+
// } else {
268+
// println!("key is {:?} ts={:?}, meta.first_key is {:?} ts={:?}, meta.last_key is {:?} ts={:?}", key.to_key_vec().into_key_bytes(), key.ts(), meta.first_key, meta.first_key.ts(), meta.last_key, meta.last_key.ts());
269+
// break;
270+
// }
271+
// }
272+
// match final_idx {
273+
// 0 => 0,
274+
// _ => final_idx - 1,
275+
// }
280276
}
281277

282278
/// Get number of data blocks.

mini-lsm-starter/src/table/iterator.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,16 @@ impl SsTableIterator {
5353

5454
/// Create a new iterator and seek to the first key-value pair which >= `key`.
5555
pub fn create_and_seek_to_key(table: Arc<SsTable>, key: KeySlice) -> Result<Self> {
56-
let blk_idx = table.find_block_idx(key);
56+
let mut blk_idx = table.find_block_idx(key);
5757
let block = table.read_block_cached(blk_idx)?;
58-
let block_iter = BlockIterator::create_and_seek_to_key(block, key);
58+
let mut block_iter = BlockIterator::create_and_seek_to_key(block, key);
59+
if !block_iter.is_valid() {
60+
blk_idx += 1;
61+
if blk_idx < table.num_of_blocks() {
62+
block_iter =
63+
BlockIterator::create_and_seek_to_key(table.read_block_cached(blk_idx)?, key);
64+
}
65+
}
5966
Ok(Self {
6067
table,
6168
blk_iter: block_iter,

0 commit comments

Comments
 (0)