@Override public void run() throws Exception { ClusterServiceImpl service = getService(); ClusterStateManager clusterStateManager = service.getClusterStateManager(); getLogger().info(format("Changing cluster state from %s to %s, initiator: %s, transient: %s", clusterStateManager.stateToString(), stateChange, initiator, isTransient)); clusterStateManager.commitClusterState(stateChange, initiator, txnId, isTransient); }
@Override public void run() throws Exception { ClusterServiceImpl service = getService(); ClusterStateManager clusterStateManager = service.getClusterStateManager(); getLogger().info(format("Changing cluster state from %s to %s, initiator: %s, transient: %s", clusterStateManager.stateToString(), stateChange, initiator, isTransient)); clusterStateManager.commitClusterState(stateChange, initiator, txnId, isTransient); }
logger.warning("Cluster state is in transition process. Join is not allowed until " + "transaction is completed -> " + clusterStateManager.stateToString()); return true; + clusterStateManager.stateToString(); logger.warning(message); } else { String message = "Cluster state either is locked or doesn't allow new members to join -> " + clusterStateManager.stateToString() + ". Silently ignored join request of " + target + " because start not completed."; logger.warning(message);
public void commitClusterState(ClusterStateChange stateChange, Address initiator, String txnId, boolean isTransient) { Preconditions.checkNotNull(stateChange); stateChange.validate(); clusterServiceLock.lock(); try { final LockGuard stateLock = getStateLock(); if (!stateLock.allowsUnlock(txnId)) { throw new TransactionException( "Cluster state change [" + state + " -> " + stateChange + "] failed for " + initiator + ", current state: " + stateToString()); } if (stateChange.isOfType(ClusterState.class)) { ClusterState newState = (ClusterState) stateChange.getNewState(); doSetClusterState(newState, isTransient); // if state is changed to allow joins, then remove all members which left while not active. if (newState.isJoinAllowed()) { node.getClusterService().getMembershipManager().removeMembersDeadInNotJoinableState(); } } else if (stateChange.isOfType(Version.class)) { // version is validated on cluster-state-lock, thus we can commit without checking compatibility Version newVersion = (Version) stateChange.getNewState(); logger.info("Cluster version set to " + newVersion); doSetClusterVersion(newVersion); } else { throw new IllegalArgumentException("Illegal ClusterStateChange of type " + stateChange.getType() + "."); } } finally { clusterServiceLock.unlock(); } }
public void commitClusterState(ClusterStateChange stateChange, Address initiator, String txnId, boolean isTransient) { Preconditions.checkNotNull(stateChange); stateChange.validate(); clusterServiceLock.lock(); try { final LockGuard stateLock = getStateLock(); if (!stateLock.allowsUnlock(txnId)) { throw new TransactionException( "Cluster state change [" + state + " -> " + stateChange + "] failed for " + initiator + ", current state: " + stateToString()); } if (stateChange.isOfType(ClusterState.class)) { ClusterState newState = (ClusterState) stateChange.getNewState(); doSetClusterState(newState, isTransient); // if state is changed to allow joins, then remove all members which left while not active. if (newState.isJoinAllowed()) { node.getClusterService().getMembershipManager().removeAllMissingMembers(); } } else if (stateChange.isOfType(Version.class)) { // version is validated on cluster-state-lock, thus we can commit without checking compatibility Version newVersion = (Version) stateChange.getNewState(); logger.info("Cluster version set to " + newVersion); doSetClusterVersion(newVersion); } else { throw new IllegalArgumentException("Illegal ClusterStateChange of type " + stateChange.getType() + "."); } } finally { clusterServiceLock.unlock(); } }
logger.warning("Cluster state is in transition process. Join is not allowed until " + "transaction is completed -> " + clusterStateManager.stateToString()); return true; + clusterStateManager.stateToString(); logger.warning(message); } else { String message = "Cluster state either is locked or doesn't allow new members to join -> " + clusterStateManager.stateToString() + ". Silently ignored join request of " + target + " because start not completed."; logger.warning(message);