@Override public void masterIsAvailable(HighAvailabilityMemberChangeEvent event) { if (event.getNewState() == event.getOldState() && event.getOldState() == HighAvailabilityMemberState.SLAVE) { clusterMemberAvailability.memberIsAvailable(SLAVE, slaveHaURI, resolveStoreId()); } else { stateChanged(event); } }
@Override public void masterIsElected(HighAvailabilityMemberChangeEvent event) { if (event.getNewState() == event.getOldState() && event.getOldState() == HighAvailabilityMemberState.MASTER) { clusterMemberAvailability.memberIsAvailable(MASTER, masterHaURI, resolveStoreId()); } else { stateChanged(event); } }
private void stateChanged(HighAvailabilityMemberChangeEvent event) { if (event.getNewState() == event.getOldState()) { /* * We get here if for example a new master becomes available while we are already switching. In that case * we don't change state but we must update with the new availableMasterId, but only if it is not null. */ if (event.getServerHaUri() != null) { availableMasterId = event.getServerHaUri(); } return; } availableMasterId = event.getServerHaUri(); currentTargetState = event.getNewState(); switch (event.getNewState()) { case TO_MASTER: if (event.getOldState().equals(HighAvailabilityMemberState.SLAVE)) { clusterMemberAvailability.memberIsUnavailable(SLAVE); } switchToMaster(); break; case TO_SLAVE: switchToSlave(); break; case PENDING: if (event.getOldState().equals(HighAvailabilityMemberState.SLAVE)) { clusterMemberAvailability.memberIsUnavailable(SLAVE); } else if (event.getOldState().equals(HighAvailabilityMemberState.MASTER)) { clusterMemberAvailability.memberIsUnavailable(MASTER); } switchToPending(); break; default: // do nothing } }