private List<SegmentBuffer> getNeedRetryMessages(String subject, String group, String consumerId, long firstNotAckedSequence, long lastPullSequence) {
final int actualNum = (int) (lastPullSequence - firstNotAckedSequence + 1);
final List<SegmentBuffer> needRetryMessages = new ArrayList<>(actualNum);
for (long sequence = firstNotAckedSequence; sequence <= lastPullSequence; sequence++) {
final long consumerLogSequence = storage.getMessageSequenceByPullLog(subject, group, consumerId, sequence);
if (consumerLogSequence < 0) {
LOG.warn("find no consumer log offset for this pull log, subject:{}, group:{}, consumerId:{}, sequence:{}, consumerLogSequence:{}", subject, group, consumerId, sequence, consumerLogSequence);
continue;
}
final GetMessageResult getMessageResult = storage.getMessage(subject, consumerLogSequence);
if (getMessageResult.getStatus() == GetMessageStatus.SUCCESS) {
final List<SegmentBuffer> segmentBuffers = getMessageResult.getSegmentBuffers();
needRetryMessages.addAll(segmentBuffers);
}
}
return needRetryMessages;
}