Consider the following sequence:
1. issue, apply repop
2. replicas and primary commit
Here, repop->waitfor_(ack|disk) are empty, so we mark
repop->done and remove_repop.
3. interval change, repops still in queue are marked aborted
4. activate, last_update_applied = last_update
5. the repop from one enters apply_repop, is not aborted,
and finds that last_update_applied has passed it by.
Fixes #2749
Signed-off-by: Samuel Just <sam.just@inktank.com>
}
// done.
- if (repop->waitfor_ack.empty() && repop->waitfor_disk.empty()) {
+ if (repop->waitfor_ack.empty() && repop->waitfor_disk.empty() &&
+ repop->applied) {
repop->done = true;
calc_min_last_complete_ondisk();