assert(ms_can_fast_dispatch(op->get_req()));
const MOSDFastDispatchOp *m = static_cast<const MOSDFastDispatchOp*>(
op->get_req());
- if (m->get_map_epoch() > osdmap->get_epoch()) {
+ if (m->get_min_epoch() > osdmap->get_epoch()) {
break;
}
session->waiting_on_map.erase(i++);
epoch_t epoch = get_osdmap()->get_epoch();
auto p = waiting_for_map.begin();
while (p != waiting_for_map.end()) {
- if (op_must_wait_for_map(epoch, p->second.front())) {
+ if (epoch < p->second.front()->min_epoch) {
dout(20) << __func__ << " " << p->first << " front op "
<< p->second.front() << " must still wait, doing nothing"
<< dendl;
op->mark_delayed("waiting_for_map not empty");
return;
}
- if (op_must_wait_for_map(get_osdmap()->get_epoch(), op)) {
- dout(20) << __func__ << " queue on waiting_for_map "
- << op->get_source() << dendl;
+ if (!have_same_or_newer_map(op->min_epoch)) {
+ dout(20) << __func__ << " min " << op->min_epoch
+ << ", queue on waiting_for_map " << op->get_source() << dendl;
waiting_for_map[op->get_source()].push_back(op);
op->mark_delayed("op must wait for map");
return;