diff --git a/src/mon/Paxos.cc b/src/mon/Paxos.cc index 6ab254ad3974e..01a519ce77cee 100644 --- a/src/mon/Paxos.cc +++ b/src/mon/Paxos.cc @@ -1418,53 +1418,49 @@ void Paxos::dispatch(MonOpRequestRef op) { ceph_assert(op->is_type_paxos()); op->mark_paxos_event("dispatch"); - PaxosServiceMessage *m = static_cast(op->get_req()); + + if (op->get_req()->get_type() != MSG_MON_PAXOS) { + dout(0) << "Got unexpected message type " << op->get_req()->get_type() + << " in Paxos::dispatch, aborting!" << dendl; + ceph_abort(); + } + + auto *req = op->get_req(); + // election in progress? if (!mon->is_leader() && !mon->is_peon()) { - dout(5) << "election in progress, dropping " << *m << dendl; + dout(5) << "election in progress, dropping " << *req << dendl; return; } // check sanity ceph_assert(mon->is_leader() || - (mon->is_peon() && m->get_source().num() == mon->get_leader())); - - switch (m->get_type()) { - - case MSG_MON_PAXOS: - { - MMonPaxos *pm = reinterpret_cast(m); - - // NOTE: these ops are defined in messages/MMonPaxos.h - switch (pm->op) { - // learner - case MMonPaxos::OP_COLLECT: - handle_collect(op); - break; - case MMonPaxos::OP_LAST: - handle_last(op); - break; - case MMonPaxos::OP_BEGIN: - handle_begin(op); - break; - case MMonPaxos::OP_ACCEPT: - handle_accept(op); - break; - case MMonPaxos::OP_COMMIT: - handle_commit(op); - break; - case MMonPaxos::OP_LEASE: - handle_lease(op); - break; - case MMonPaxos::OP_LEASE_ACK: - handle_lease_ack(op); - break; - default: - ceph_abort(); - } - } + (mon->is_peon() && req->get_source().num() == mon->get_leader())); + + // NOTE: these ops are defined in messages/MMonPaxos.h + switch (req->op) { + // learner + case MMonPaxos::OP_COLLECT: + handle_collect(op); + break; + case MMonPaxos::OP_LAST: + handle_last(op); + break; + case MMonPaxos::OP_BEGIN: + handle_begin(op); + break; + case MMonPaxos::OP_ACCEPT: + handle_accept(op); + break; + case MMonPaxos::OP_COMMIT: + handle_commit(op); + break; + case MMonPaxos::OP_LEASE: + handle_lease(op); + break; + case MMonPaxos::OP_LEASE_ACK: + handle_lease_ack(op); break; - default: ceph_abort(); }