@@ -490,20 +490,27 @@ impl<'a> MemKvCursorMut<'a> {
490490 }
491491 }
492492
493- /// Get the first key-value pair >= key, returning owned data
493+ /// Get the first key-value pair >= key, returning owned data.
494+ ///
495+ /// Merges queued operations with committed data, giving precedence to queued
496+ /// ops for read-your-writes consistency.
494497 fn get_range_owned ( & self , key : & MemStoreKey ) -> Option < ( MemStoreKey , Bytes ) > {
498+ // Find the first candidate from both queued ops and committed storage.
495499 let q = self . queued_ops . range ( * key..) . next ( ) ;
496500 let c = if !self . is_cleared { self . table . range ( * key..) . next ( ) } else { None } ;
497501
498502 match ( q, c) {
499503 ( None , None ) => None ,
504+
505+ // Both sources have candidates - pick the smaller key, preferring
506+ // queued ops on ties for read-your-writes consistency.
500507 ( Some ( ( qk, queued) ) , Some ( ( ck, current) ) ) => {
501508 if qk <= ck {
502- // Queued operation takes precedence
503509 match queued {
504510 QueuedKvOp :: Put { value } => Some ( ( * qk, value. clone ( ) ) ) ,
505511 QueuedKvOp :: Delete => {
506- // Skip deleted entry and look for next
512+ // This key is marked deleted; increment to skip it
513+ // and recurse to find the next valid entry.
507514 let mut next_key = * qk;
508515 for i in ( 0 ..next_key. len ( ) ) . rev ( ) {
509516 if next_key[ i] < u8:: MAX {
@@ -519,9 +526,12 @@ impl<'a> MemKvCursorMut<'a> {
519526 Some ( ( * ck, current. clone ( ) ) )
520527 }
521528 }
529+
530+ // Only queued ops have a candidate.
522531 ( Some ( ( qk, queued) ) , None ) => match queued {
523532 QueuedKvOp :: Put { value } => Some ( ( * qk, value. clone ( ) ) ) ,
524533 QueuedKvOp :: Delete => {
534+ // Increment past the deleted key and recurse.
525535 let mut next_key = * qk;
526536 for i in ( 0 ..next_key. len ( ) ) . rev ( ) {
527537 if next_key[ i] < u8:: MAX {
@@ -533,14 +543,20 @@ impl<'a> MemKvCursorMut<'a> {
533543 self . get_range_owned ( & next_key)
534544 }
535545 } ,
546+
547+ // Only committed storage has a candidate.
536548 ( None , Some ( ( ck, current) ) ) => Some ( ( * ck, current. clone ( ) ) ) ,
537549 }
538550 }
539551
540- /// Get the first key-value pair > key (strictly greater), returning owned data
552+ /// Get the first key-value pair > key (strictly greater), returning owned data.
553+ ///
554+ /// Similar to `get_range_owned` but uses exclusive bounds for cursor
555+ /// navigation (read_next).
541556 fn get_range_exclusive_owned ( & self , key : & MemStoreKey ) -> Option < ( MemStoreKey , Bytes ) > {
542557 use core:: ops:: Bound ;
543558
559+ // Find candidates strictly greater than the given key.
544560 let q = self . queued_ops . range ( ( Bound :: Excluded ( * key) , Bound :: Unbounded ) ) . next ( ) ;
545561 let c = if !self . is_cleared {
546562 self . table . range ( ( Bound :: Excluded ( * key) , Bound :: Unbounded ) ) . next ( )
@@ -550,31 +566,33 @@ impl<'a> MemKvCursorMut<'a> {
550566
551567 match ( q, c) {
552568 ( None , None ) => None ,
569+
570+ // Both sources have candidates.
553571 ( Some ( ( qk, queued) ) , Some ( ( ck, current) ) ) => {
554572 if qk <= ck {
555- // Queued operation takes precedence
556573 match queued {
557574 QueuedKvOp :: Put { value } => Some ( ( * qk, value. clone ( ) ) ) ,
558- QueuedKvOp :: Delete => {
559- // This key is deleted, recurse to find the next one
560- self . get_range_exclusive_owned ( qk)
561- }
575+ // Deleted in queue; skip and recurse.
576+ QueuedKvOp :: Delete => self . get_range_exclusive_owned ( qk) ,
562577 }
563578 } else {
564- // Check if the current key has a delete queued
579+ // Committed key is smaller, but check if it's been deleted.
565580 if let Some ( QueuedKvOp :: Delete ) = self . queued_ops . get ( ck) {
566581 self . get_range_exclusive_owned ( ck)
567582 } else {
568583 Some ( ( * ck, current. clone ( ) ) )
569584 }
570585 }
571586 }
587+
588+ // Only queued ops have a candidate.
572589 ( Some ( ( qk, queued) ) , None ) => match queued {
573590 QueuedKvOp :: Put { value } => Some ( ( * qk, value. clone ( ) ) ) ,
574591 QueuedKvOp :: Delete => self . get_range_exclusive_owned ( qk) ,
575592 } ,
593+
594+ // Only committed storage has a candidate; verify not deleted.
576595 ( None , Some ( ( ck, current) ) ) => {
577- // Check if the current key has a delete queued
578596 if let Some ( QueuedKvOp :: Delete ) = self . queued_ops . get ( ck) {
579597 self . get_range_exclusive_owned ( ck)
580598 } else {
@@ -584,28 +602,39 @@ impl<'a> MemKvCursorMut<'a> {
584602 }
585603 }
586604
587- /// Get the last key-value pair < key, returning owned data
605+ /// Get the last key-value pair < key, returning owned data.
606+ ///
607+ /// Reverse iteration for cursor navigation (read_prev). Merges queued ops
608+ /// with committed data, preferring the larger key (closest to search key).
588609 fn get_range_reverse_owned ( & self , key : & MemStoreKey ) -> Option < ( MemStoreKey , Bytes ) > {
610+ // Find candidates strictly less than the given key, scanning backwards.
589611 let q = self . queued_ops . range ( ..* key) . next_back ( ) ;
590612 let c = if !self . is_cleared { self . table . range ( ..* key) . next_back ( ) } else { None } ;
591613
592614 match ( q, c) {
593615 ( None , None ) => None ,
616+
617+ // Both sources have candidates - pick the larger key (closest to
618+ // search position), preferring queued ops on ties.
594619 ( Some ( ( qk, queued) ) , Some ( ( ck, current) ) ) => {
595620 if qk >= ck {
596- // Queued operation takes precedence
597621 match queued {
598622 QueuedKvOp :: Put { value } => Some ( ( * qk, value. clone ( ) ) ) ,
623+ // Deleted; recurse to find the previous valid entry.
599624 QueuedKvOp :: Delete => self . get_range_reverse_owned ( qk) ,
600625 }
601626 } else {
602627 Some ( ( * ck, current. clone ( ) ) )
603628 }
604629 }
630+
631+ // Only queued ops have a candidate.
605632 ( Some ( ( qk, queued) ) , None ) => match queued {
606633 QueuedKvOp :: Put { value } => Some ( ( * qk, value. clone ( ) ) ) ,
607634 QueuedKvOp :: Delete => self . get_range_reverse_owned ( qk) ,
608635 } ,
636+
637+ // Only committed storage has a candidate.
609638 ( None , Some ( ( ck, current) ) ) => Some ( ( * ck, current. clone ( ) ) ) ,
610639 }
611640 }
0 commit comments