Skip to content

Commit 632fc20

Browse files
committed
fix: calculate end cursor properly
1 parent 52f558e commit 632fc20

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

rumqttd/src/segments/mod.rs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ where
232232
end: (cursor.0, offset),
233233
});
234234
}
235-
// no offset returned -> we reached end / invalid file
235+
// no offset returned -> we reached end
236236
// if len unfulfilled -> try next segment with remaining length
237237
SegmentPosition::Done(next_offset) => {
238238
// this condition is needed in case cursor.1 > 0 (when user provies cursor.1
@@ -276,7 +276,7 @@ where
276276
// debug!("start: {:?}, end: ({}, {}) done", orig_cursor, cursor.0, absolute_offset);
277277
Ok(Position::Done {
278278
start,
279-
end: (cursor.0, absolute_offset),
279+
end: (cursor.0 + 1, absolute_offset),
280280
})
281281
}
282282
}
@@ -690,4 +690,40 @@ mod tests {
690690
}
691691
);
692692
}
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+
}
693729
}

0 commit comments

Comments
 (0)