@@ -232,7 +232,7 @@ where
232
232
end : ( cursor. 0 , offset) ,
233
233
} ) ;
234
234
}
235
- // no offset returned -> we reached end / invalid file
235
+ // no offset returned -> we reached end
236
236
// if len unfulfilled -> try next segment with remaining length
237
237
SegmentPosition :: Done ( next_offset) => {
238
238
// this condition is needed in case cursor.1 > 0 (when user provies cursor.1
@@ -276,7 +276,7 @@ where
276
276
// debug!("start: {:?}, end: ({}, {}) done", orig_cursor, cursor.0, absolute_offset);
277
277
Ok ( Position :: Done {
278
278
start,
279
- end : ( cursor. 0 , absolute_offset) ,
279
+ end : ( cursor. 0 + 1 , absolute_offset) ,
280
280
} )
281
281
}
282
282
}
@@ -690,4 +690,40 @@ mod tests {
690
690
}
691
691
) ;
692
692
}
693
+
694
+ #[ test]
695
+ fn reads_which_end_exactly_at_active_segments_end ( ) {
696
+ let max_segment_size = 1024 ;
697
+ let packet_size: u64 = 1024 ;
698
+ let mut log = CommitLog :: new ( max_segment_size, 1 ) . unwrap ( ) ;
699
+
700
+ log. append ( random_payload ( 0 , packet_size) ) ;
701
+ assert_eq ! ( log. head, 0 ) ;
702
+ assert_eq ! ( log. tail, 0 ) ;
703
+
704
+ let mut out = Vec :: new ( ) ;
705
+ let next = log. readv ( ( 0 , 0 ) , 1 , & mut out) . unwrap ( ) ;
706
+ assert_eq ! (
707
+ next,
708
+ Done {
709
+ start: ( 0 , 0 ) ,
710
+ end: ( 1 , 1 )
711
+ }
712
+ ) ;
713
+
714
+ log. append ( random_payload ( 1 , packet_size) ) ;
715
+ assert_eq ! ( log. head, 1 ) ;
716
+ assert_eq ! ( log. tail, 1 ) ;
717
+
718
+ let mut out = Vec :: new ( ) ;
719
+
720
+ let next = log. readv ( ( 0 , 1 ) , 1 , & mut out) . unwrap ( ) ;
721
+ assert_eq ! (
722
+ next,
723
+ Done {
724
+ start: ( 1 , 1 ) ,
725
+ end: ( 2 , 2 )
726
+ }
727
+ ) ;
728
+ }
693
729
}
0 commit comments