@Override public synchronized void recordNotLeading(PaxosValue value) { if (isSameRound(value) && isLeading) { events.lostLeadershipFor(value); leadershipObserver.ifPresent(LeadershipObserver::lostLeadership); isLeading = false; } }
private synchronized void recordNewRound(PaxosValue round) { if (isLeading) { events.lostLeadershipFor(currentRound); leadershipObserver.ifPresent(LeadershipObserver::lostLeadership); } if (isLeaderFor(round)) { events.gainedLeadershipFor(round); leadershipObserver.ifPresent(LeadershipObserver::gainedLeadership); } currentRound = round; isLeading = isLeaderFor(round); }
@Test public void recordsLeadershipLost() { recorder.recordRound(ROUND_1_LEADING); recorder.recordRound(ROUND_2_NOT_LEADING); verify(events).gainedLeadershipFor(ROUND_1_LEADING); verify(events).lostLeadershipFor(ROUND_1_LEADING); }
@Test public void recordsLeadershipLostBetweenSequentialLeadershipGained() { recorder.recordRound(ROUND_1_LEADING); recorder.recordRound(ROUND_2_LEADING); verify(events).gainedLeadershipFor(ROUND_1_LEADING); verify(events).lostLeadershipFor(ROUND_1_LEADING); verify(events).gainedLeadershipFor(ROUND_2_LEADING); }
@Test public void notifiesObserverIfLostLeadership() { recorder.recordRound(ROUND_1_LEADING); recorder.recordRound(ROUND_2_NOT_LEADING); verify(events).gainedLeadershipFor(ROUND_1_LEADING); verify(events).lostLeadershipFor(ROUND_1_LEADING); verify(observer).gainedLeadership(); verify(observer).lostLeadership(); }
@Test public void cannotGainLeadershipAfterLosingWithOutOfOrderRounds() { recorder.recordRound(ROUND_1_LEADING); recorder.recordRound(ROUND_3_NOT_LEADING); recorder.recordRound(ROUND_2_LEADING); verify(events).gainedLeadershipFor(ROUND_1_LEADING); verify(events).lostLeadershipFor(ROUND_1_LEADING); }
@Test public void reacordsLeadershipGainedAfterLost() { recorder.recordRound(ROUND_1_LEADING); recorder.recordRound(ROUND_2_NOT_LEADING); recorder.recordRound(ROUND_3_LEADING); verify(events).gainedLeadershipFor(ROUND_1_LEADING); verify(events).lostLeadershipFor(ROUND_1_LEADING); verify(events).gainedLeadershipFor(ROUND_3_LEADING); }
@Test public void cannotGainLeadershipAfterLosing() { recorder.recordRound(ROUND_1_LEADING); recorder.recordNotLeading(ROUND_1_LEADING); recorder.recordRound(ROUND_1_LEADING); verify(events).gainedLeadershipFor(ROUND_1_LEADING); verify(events).lostLeadershipFor(ROUND_1_LEADING); }
@Test public void doesNotRecordDuplicateLeadershipLost() { recorder.recordRound(ROUND_1_LEADING); recorder.recordRound(ROUND_2_NOT_LEADING); recorder.recordRound(ROUND_2_NOT_LEADING); recorder.recordRound(ROUND_3_NOT_LEADING); verify(events).gainedLeadershipFor(ROUND_1_LEADING); verify(events).lostLeadershipFor(ROUND_1_LEADING); }
@Override public synchronized void recordNotLeading(PaxosValue value) { if (isSameRound(value) && isLeading) { events.lostLeadershipFor(value); leadershipObserver.ifPresent(LeadershipObserver::lostLeadership); isLeading = false; } }
private synchronized void recordNewRound(PaxosValue round) { if (isLeading) { events.lostLeadershipFor(currentRound); leadershipObserver.ifPresent(LeadershipObserver::lostLeadership); } if (isLeaderFor(round)) { events.gainedLeadershipFor(round); leadershipObserver.ifPresent(LeadershipObserver::gainedLeadership); } currentRound = round; isLeading = isLeaderFor(round); }