public void testGetManagementPlaneStatus() throws Exception { // with the name zzzzz the mgr created here should never be promoted by the alphabetical // strategy! tickerAdvance(Duration.FIVE_SECONDS); persister.delta( ManagementPlaneSyncRecordDeltaImpl.builder() .node( newManagerMemento( "zzzzzzz_node1", ManagementNodeState.STANDBY, tickerCurrentMillis())) .build()); long zzzTime = tickerCurrentMillis(); tickerAdvance(Duration.FIVE_SECONDS); manager.start(HighAvailabilityMode.AUTO); ManagementPlaneSyncRecord memento = manager.getManagementPlaneSyncState(); // Note can assert timestamp because not "real" time; it's using our own Ticker assertEquals(memento.getMasterNodeId(), ownNodeId); assertEquals( memento.getManagementNodes().keySet(), ImmutableSet.of(ownNodeId, "zzzzzzz_node1")); assertEquals(memento.getManagementNodes().get(ownNodeId).getNodeId(), ownNodeId); assertEquals( memento.getManagementNodes().get(ownNodeId).getStatus(), ManagementNodeState.MASTER); assertEquals( memento.getManagementNodes().get(ownNodeId).getTimestampUtc(), tickerCurrentMillis()); assertEquals(memento.getManagementNodes().get("zzzzzzz_node1").getNodeId(), "zzzzzzz_node1"); assertEquals( memento.getManagementNodes().get("zzzzzzz_node1").getStatus(), ManagementNodeState.STANDBY); assertEquals(memento.getManagementNodes().get("zzzzzzz_node1").getTimestampUtc(), zzzTime); }
@Test public void testGetManagementPlaneSyncStateInfersTimedOutNodeAsFailed() throws Exception { persister.delta( ManagementPlaneSyncRecordDeltaImpl.builder() .node(newManagerMemento(ownNodeId, ManagementNodeState.STANDBY, tickerCurrentMillis())) .node(newManagerMemento("node1", ManagementNodeState.MASTER, tickerCurrentMillis())) .setMaster("node1") .build()); manager.start(HighAvailabilityMode.AUTO); ManagementPlaneSyncRecord state = manager.getManagementPlaneSyncState(); assertEquals(state.getManagementNodes().get("node1").getStatus(), ManagementNodeState.MASTER); assertEquals( state.getManagementNodes().get(ownNodeId).getStatus(), ManagementNodeState.STANDBY); // Simulate passage of time; ticker used by this HA-manager so it will "correctly" publish // its own heartbeat with the new time; but node1's record is now out-of-date. tickerAdvance(Duration.seconds(31)); ManagementPlaneSyncRecord state2 = manager.getManagementPlaneSyncState(); assertEquals(state2.getManagementNodes().get("node1").getStatus(), ManagementNodeState.FAILED); assertNotEquals( state.getManagementNodes().get(ownNodeId).getStatus(), ManagementNodeState.FAILED); }