If requeue is false, we won't have cleared out waiting_for_ondisk; adjust
assert placement as appropriate. Also, make sur we handle the requeue
and !op case properly (although I'm not sure offhand if/when it would
come up).
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
apply_repop(repop);
repop->aborted = true;
- if (requeue && repop->ctx->op) {
- dout(10) << " requeuing " << *repop->ctx->op->request << dendl;
- rq.push_back(repop->ctx->op);
- repop->ctx->op = OpRequestRef();
+ if (requeue) {
+ if (repop->ctx->op) {
+ dout(10) << " requeuing " << *repop->ctx->op->request << dendl;
+ rq.push_back(repop->ctx->op);
+ repop->ctx->op = OpRequestRef();
+ }
// also requeue any dups, interleaved into position
map<eversion_t, list<OpRequestRef> >::iterator p = waiting_for_ondisk.find(repop->v);
if (requeue) {
requeue_ops(rq);
+ assert(waiting_for_ondisk.empty());
}
- assert(waiting_for_ondisk.empty());
+ waiting_for_ondisk.clear();
waiting_for_ack.clear();
}