/** * @return {@code True} if cluster was in active state. */ boolean clusterActive() { return state.active() && !state.transition(); } }
/** Whether cluster is active at this moment or not. Also returns {@code true} if cluster is being activated. */ private boolean isActive() { return ctx.state().clusterState().active(); }
/** */ private void onStateRestored(BaselineTopology blt) { DiscoveryDataClusterState state = globalState; if (!state.active() && !state.transition() && state.baselineTopology() == null) { DiscoveryDataClusterState newState = DiscoveryDataClusterState.createState(false, blt); globalState = newState; } }
/** * @param msg State change message. * @param state Current cluster state. * @return {@code True} if states are equivalent. */ protected static boolean isEquivalent(ChangeGlobalStateMessage msg, DiscoveryDataClusterState state) { return (msg.activate() == state.active() && BaselineTopology.equals(msg.baselineTopology(), state.baselineTopology())); }
/** * Merging config or resaving it if it needed. * * @param patchesToApply Patches which need to apply. * @param cachesToSave Caches which need to resave. * @param hasSchemaPatchConflict {@code true} if we have conflict during making patch. */ private void updateRegisteredCachesIfNeeded(Map<DynamicCacheDescriptor, QuerySchemaPatch> patchesToApply, Collection<DynamicCacheDescriptor> cachesToSave, boolean hasSchemaPatchConflict) { //Skip merge of config if least one conflict was found. if (!hasSchemaPatchConflict && isMergeConfigSupports(ctx.discovery().localNode())) { boolean isClusterActive = ctx.state().clusterState().active(); //Merge of config for cluster only for inactive grid. if (!isClusterActive && !patchesToApply.isEmpty()) { for (Map.Entry<DynamicCacheDescriptor, QuerySchemaPatch> entry : patchesToApply.entrySet()) { if (entry.getKey().applySchemaPatch(entry.getValue())) saveCacheConfiguration(entry.getKey()); } for (DynamicCacheDescriptor descriptor : cachesToSave) { saveCacheConfiguration(descriptor); } } else if (patchesToApply.isEmpty()) { for (DynamicCacheDescriptor descriptor : cachesToSave) { saveCacheConfiguration(descriptor); } } } }
/** * Checks cluster state and handles given event. * <pre> * - if cluster is active, then adds event in deployment queue; * - if cluster state in transition, them adds to pending events; * - if cluster is inactive, then ignore event; * </pre> * <b>Should be called from discovery thread.</b> * * @param evt Discovery event. * @param discoCache Discovery cache. * @param depActions Services deployment actions. */ private void checkClusterStateAndAddTask(@NotNull DiscoveryEvent evt, @NotNull DiscoCache discoCache, @Nullable ServiceDeploymentActions depActions) { if (discoCache.state().transition()) pendingEvts.add(new PendingEventHolder(evt, discoCache.version(), depActions)); else if (discoCache.state().active()) addTask(evt, discoCache.version(), depActions); else if (log.isDebugEnabled()) log.debug("Ignore event, cluster is inactive, evt=" + evt); }
/** * Executes validation checks of cluster state and BaselineTopology before changing BaselineTopology to new one. */ private void validateBeforeBaselineChange(Collection<? extends BaselineNode> baselineTop) { verifyBaselineTopologySupport(ctx.discovery().discoCache()); if (!ctx.state().clusterState().active()) throw new IgniteException("Changing BaselineTopology on inactive cluster is not allowed."); if (baselineTop != null) { if (baselineTop.isEmpty()) throw new IgniteException("BaselineTopology must contain at least one node."); Collection<Object> onlineNodes = onlineBaselineNodesRequestedForRemoval(baselineTop); if (onlineNodes != null) { if (!onlineNodes.isEmpty()) throw new IgniteException("Removing online nodes from BaselineTopology is not supported: " + onlineNodes); } } }
/** {@inheritDoc} */ @Override @Nullable public IgniteInternalFuture<Boolean> onLocalJoin(DiscoCache discoCache) { final DiscoveryDataClusterState state = globalState; if (state.active()) checkLocalNodeInBaseline(state.baselineTopology()); if (state.transition()) { joinFut = new TransitionOnJoinWaitFuture(state, discoCache); return joinFut; } else if (!ctx.clientNode() && !ctx.isDaemon() && ctx.config().isAutoActivationEnabled() && !state.active() && isBaselineSatisfied(state.baselineTopology(), discoCache.serverNodes())) changeGlobalState0(true, state.baselineTopology(), false); return null; }
/** * Callback invoked from discovery thread when discovery message is received. * * @param type Event type. * @param customMsg Custom message instance. * @param node Event node. * @param topVer Topology version. * @param state Cluster state. */ void onDiscoveryEvent(int type, @Nullable DiscoveryCustomMessage customMsg, ClusterNode node, AffinityTopologyVersion topVer, DiscoveryDataClusterState state) { if (type == EVT_NODE_JOINED && node.isLocal()) lastAffVer = null; if ((state.transition() || !state.active()) && !DiscoveryCustomEvent.requiresCentralizedAffinityAssignment(customMsg)) return; if ((!node.isClient() && (type == EVT_NODE_FAILED || type == EVT_NODE_JOINED || type == EVT_NODE_LEFT)) || DiscoveryCustomEvent.requiresCentralizedAffinityAssignment(customMsg)) { synchronized (mux) { assert lastAffVer == null || topVer.compareTo(lastAffVer) > 0 : "lastAffVer=" + lastAffVer + ", topVer=" + topVer + ", customMsg=" + customMsg; lastAffVer = topVer; } } }
CacheJoinNodeDiscoveryData nodeData = (CacheJoinNodeDiscoveryData)discoData.joiningNodeData(); boolean isGridActive = ctx.state().clusterState().active();
/** * @param clientData Discovery data. * @param clientNodeId Client node ID. */ private void processClientReconnectData(CacheClientReconnectDiscoveryData clientData, UUID clientNodeId) { DiscoveryDataClusterState state = ctx.state().clusterState(); if (state.active() && !state.transition()) { for (CacheClientReconnectDiscoveryData.CacheInfo cacheInfo : clientData.clientCaches().values()) { String cacheName = cacheInfo.config().getName(); if (surviveReconnect(cacheName)) ctx.discovery().addClientNode(cacheName, clientNodeId, false); else { DynamicCacheDescriptor desc = registeredCaches.get(cacheName); if (desc != null && desc.deploymentId().equals(cacheInfo.deploymentId())) ctx.discovery().addClientNode(cacheName, clientNodeId, cacheInfo.nearCache()); } } } }
", servers=" + srvNodesNum + ", clients=" + clientNodesNum + ", state=" + (state.active() ? "ACTIVE" : "INACTIVE") + ", CPUs=" + totalCpus + ", offheap=" + offheap + "GB" + + ", offline=" + bltOffline + ']'); if (!state.active() && ctx.config().isAutoActivationEnabled()) { String offlineConsistentIds = "";
boolean active = ctx.state().clusterState().active();
boolean active = state.active() && !state.transition();
if (!curState.transition() && curState.active() == activate && (!activate || BaselineTopology.equals(curState.baselineTopology(), blt))) return new GridFinishedFuture<>();
if (!ctx.state().clusterState().active()) { U.quietAndInfo(log, ">>> Ignite cluster is not active (limited functionality available). " + "Use control.(sh|bat) script or IgniteCluster interface to activate.");
DiscoveryDataClusterState state = ctx.state().clusterState(); if (state.active() && !state.transition()) { ExchangeActions exchangeActions = new ExchangeActions();
DiscoveryDataClusterState clusterState = crd.context().state().clusterState(); return clusterState.transition() && !clusterState.active(); }, getTestTimeout());