diff --git a/src/mon/Paxos.cc b/src/mon/Paxos.cc index 347810775c0..fa3e2089842 100644 --- a/src/mon/Paxos.cc +++ b/src/mon/Paxos.cc @@ -328,6 +328,15 @@ bool Paxos::store_state(MMonPaxos *m) // apply. decode_append_transaction(t, it->second); } + + // discard obsolete uncommitted value? + if (uncommitted_v && uncommitted_v <= last_committed) { + dout(10) << " forgetting obsolete uncommitted value " << uncommitted_v + << " pn " << uncommitted_pn << dendl; + uncommitted_v = 0; + uncommitted_pn = 0; + uncommitted_value.clear(); + } } if (!t.empty()) { dout(30) << __func__ << " transaction dump:\n"; @@ -425,7 +434,7 @@ void Paxos::handle_last(MMonPaxos *last) // did this person send back an accepted but uncommitted value? if (last->uncommitted_pn) { - if (last->uncommitted_pn > uncommitted_pn && + if (last->uncommitted_pn >= uncommitted_pn && last->last_committed >= last_committed && last->last_committed + 1 >= uncommitted_v) { uncommitted_v = last->last_committed+1;