private void assertLockedBy(Address initiator) { assertEquals(IN_TRANSITION, clusterStateManager.getState()); ClusterStateLock stateLock = clusterStateManager.getStateLock(); assertTrue(stateLock.isLocked()); assertEquals(TXN, stateLock.getTransactionId()); assertEquals(initiator, stateLock.getLockOwner()); }
@Test public void test_initialClusterState_rejected() { clusterStateManager.initialClusterState(FROZEN); clusterStateManager.initialClusterState(ACTIVE); assertEquals(FROZEN, clusterStateManager.getState()); }
@Test public void changeLocalClusterState_shouldChangeNodeStateToShuttingDown_whenStateBecomes_PASSIVE() throws Exception { final ClusterState newState = PASSIVE; final Address initiator = newAddress(); clusterStateManager.lockClusterState(newState, initiator, TXN, 10000, 0); clusterStateManager.commitClusterState(newState, initiator, TXN); assertEquals(newState, clusterStateManager.getState()); verify(node, times(1)).changeNodeStateToPassive(); }
@Test public void test_changeLocalClusterState_success() throws Exception { final ClusterState newState = FROZEN; final Address initiator = newAddress(); clusterStateManager.lockClusterState(newState, initiator, TXN, 10000, 0); clusterStateManager.commitClusterState(newState, initiator, TXN); assertEquals(newState, clusterStateManager.getState()); final ClusterStateLock stateLock = clusterStateManager.getStateLock(); assertFalse(stateLock.isLocked()); }
@Test public void changeLocalClusterState_shouldRemoveMembersDeadWhileFrozen_whenStateBecomes_ACTIVE() throws Exception { final ClusterState newState = ACTIVE; final Address initiator = newAddress(); clusterStateManager.initialClusterState(FROZEN); clusterStateManager.lockClusterState(newState, initiator, TXN, 10000, 0); clusterStateManager.commitClusterState(newState, initiator, TXN); assertEquals(newState, clusterStateManager.getState()); verify(clusterService, times(1)).removeMembersDeadWhileClusterIsNotActive(); }
private void removeMember(MemberImpl deadMember) { logger.info("Removing " + deadMember); lock.lock(); try { Map<Address, MemberImpl> members = membersMapRef.get(); final Address deadAddress = deadMember.getAddress(); if (members.containsKey(deadAddress)) { // !!! ORDERED !!! Map<Address, MemberImpl> newMembers = new LinkedHashMap<Address, MemberImpl>(members); newMembers.remove(deadAddress); clusterHeartbeatManager.removeMember(deadMember); setMembersRef(newMembers); if (node.isMaster()) { if (logger.isFinestEnabled()) { logger.finest(deadMember + " is dead, sending remove to all other members..."); } invokeMemberRemoveOperation(deadAddress); } final ClusterState clusterState = clusterStateManager.getState(); if (clusterState == ClusterState.FROZEN || clusterState == ClusterState.PASSIVE) { if (logger.isFinestEnabled()) { logger.finest( deadMember + " is dead, added to members left while cluster is " + clusterState + " state"); } Map<Address, MemberImpl> membersRemovedInNotActiveState = new LinkedHashMap<Address, MemberImpl>(membersRemovedInNotActiveStateRef.get()); membersRemovedInNotActiveState.put(deadAddress, deadMember); membersRemovedInNotActiveStateRef.set( Collections.unmodifiableMap(membersRemovedInNotActiveState)); final InternalPartitionServiceImpl partitionService = node.partitionService; partitionService.cancelReplicaSyncRequestsTo(deadAddress); } else { onMemberRemove(deadMember, newMembers); } // async events sendMembershipEventNotifications( deadMember, unmodifiableSet(new LinkedHashSet<Member>(newMembers.values())), false); } } finally { lock.unlock(); } }
@Override public ClusterState getClusterState() { return clusterStateManager.getState(); }
@Test public void test_initialClusterState_PASSIVE() { clusterStateManager.initialClusterState(PASSIVE); assertEquals(PASSIVE, clusterStateManager.getState()); }
@Test public void test_initialClusterState_FROZEN() { clusterStateManager.initialClusterState(FROZEN); assertEquals(FROZEN, clusterStateManager.getState()); }
@Test public void test_defaultState() { assertEquals(ACTIVE, clusterStateManager.getState()); }