This is an automated email from the ASF dual-hosted git repository. agoncharuk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new 01f0e9e IGNITE-11236 Added distributed metastorage to the list of Ignite features - Fixes #6047. 01f0e9e is described below commit 01f0e9e501a0cd3a8513c801c816e33404031583 Author: ibessonov <bessonov...@gmail.com> AuthorDate: Tue Feb 26 20:59:30 2019 +0300 IGNITE-11236 Added distributed metastorage to the list of Ignite features - Fixes #6047. Signed-off-by: Alexey Goncharuk <alexey.goncha...@gmail.com> --- .../org/apache/ignite/internal/GridComponent.java | 3 + .../org/apache/ignite/internal/IgniteFeatures.java | 25 +++- .../DistributedMetaStorageCasAckMessage.java | 5 +- .../DistributedMetaStorageCasMessage.java | 2 +- .../persistence/DistributedMetaStorageImpl.java | 163 +++++++++++++++++---- .../DistributedMetaStorageUpdateAckMessage.java | 10 +- .../DistributedMetaStorageUpdateMessage.java | 12 +- .../ignite/spi/discovery/tcp/ServerImpl.java | 6 +- .../ignite/spi/discovery/tcp/TcpDiscoveryImpl.java | 2 +- .../tcp/internal/DiscoveryDataPacket.java | 7 +- .../metastorage/DistributedMetaStorageTest.java | 6 +- .../apache/ignite/testframework/GridTestUtils.java | 3 +- .../zk/internal/ZookeeperDiscoveryImpl.java | 2 +- 13 files changed, 188 insertions(+), 58 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java b/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java index 2e86198..31dfcd6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java @@ -77,6 +77,9 @@ public interface GridComponent { /** Distributed MetaStorage processor. */ META_STORAGE; + + /** Cached values array. */ + public static final DiscoveryDataExchangeType[] VALUES = values(); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteFeatures.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteFeatures.java index e7df1e9..011c419 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteFeatures.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteFeatures.java @@ -34,7 +34,10 @@ public enum IgniteFeatures { TCP_COMMUNICATION_SPI_HANDSHAKE_WAIT_MESSAGE(0), /** Cache metrics v2 support. */ - CACHE_METRICS_V2(1); + CACHE_METRICS_V2(1), + + /** Distributed metastorage. */ + DISTRIBUTED_METASTORAGE(2); /** * Unique feature identifier. @@ -64,7 +67,25 @@ public enum IgniteFeatures { public static boolean nodeSupports(ClusterNode clusterNode, IgniteFeatures feature) { final byte[] features = clusterNode.attribute(ATTR_IGNITE_FEATURES); - return features != null && BitSet.valueOf(features).get(feature.getFeatureId()); + if (features == null) + return false; + + int featureId = feature.getFeatureId(); + + // Same as "BitSet.valueOf(features).get(featureId)" + + int byteIdx = featureId >>> 3; + + if (byteIdx >= features.length) + return false; + + int bitIdx = featureId & 0x7; + + boolean res = (features[byteIdx] & (1 << bitIdx)) != 0; + + assert res == BitSet.valueOf(features).get(featureId); + + return res; } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasAckMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasAckMessage.java index a403454..30dda35 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasAckMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasAckMessage.java @@ -29,8 +29,9 @@ class DistributedMetaStorageCasAckMessage extends DistributedMetaStorageUpdateAc private final boolean updated; /** */ - public DistributedMetaStorageCasAckMessage(UUID reqId, boolean active, boolean updated) { - super(reqId, active); + public DistributedMetaStorageCasAckMessage(UUID reqId, String errorMsg, boolean updated) { + super(reqId, errorMsg); + this.updated = updated; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasMessage.java index d5d5f8f..a357277 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasMessage.java @@ -57,7 +57,7 @@ class DistributedMetaStorageCasMessage extends DistributedMetaStorageUpdateMessa /** {@inheritDoc} */ @Override @Nullable public DiscoveryCustomMessage ackMessage() { - return new DistributedMetaStorageCasAckMessage(requestId(), isActive(), matches); + return new DistributedMetaStorageCasAckMessage(requestId(), errorMessage(), matches); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java index 2f67848..c3b3169 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java @@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.metastorage.persistence; import java.io.Serializable; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; @@ -32,13 +33,16 @@ import java.util.function.BiConsumer; import java.util.function.Predicate; import java.util.stream.LongStream; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.failure.FailureContext; import org.apache.ignite.failure.FailureType; import org.apache.ignite.internal.GridKernalContext; +import org.apache.ignite.internal.IgniteFeatures; import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager; +import org.apache.ignite.internal.managers.discovery.IgniteDiscoverySpi; import org.apache.ignite.internal.processors.GridProcessorAdapter; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage; @@ -56,14 +60,17 @@ import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; +import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.apache.ignite.spi.IgniteNodeValidationResult; import org.apache.ignite.spi.discovery.DiscoveryDataBag; +import org.apache.ignite.spi.discovery.DiscoverySpi; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import static org.apache.ignite.IgniteSystemProperties.IGNITE_GLOBAL_METASTORAGE_HISTORY_MAX_BYTES; import static org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType.META_STORAGE; +import static org.apache.ignite.internal.IgniteFeatures.DISTRIBUTED_METASTORAGE; import static org.apache.ignite.internal.processors.cache.GridCacheUtils.isPersistenceEnabled; import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageHistoryItem.EMPTY_ARRAY; import static org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUtil.historyItemPrefix; @@ -83,6 +90,10 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter /** Default upper bound of history size in bytes. */ private static final long DFLT_MAX_HISTORY_BYTES = 100 * 1024 * 1024; + /** Message indicating that clusted is in a mixed state and writing cannot be completed because of that. */ + public static final String NOT_SUPPORTED_MSG = "Ignite cluster has nodes that don't support distributed metastorage" + + " feature. Writing cannot be completed."; + /** Cached subscription processor instance. Exists to make code shorter. */ private final GridInternalSubscriptionProcessor subscrProcessor; @@ -159,9 +170,25 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter subscrProcessor = ctx.internalSubscriptionProcessor(); } + /** + * @return {@code True} if all nodes in the cluster support discributed metastorage feature. + * @see IgniteFeatures#DISTRIBUTED_METASTORAGE + */ + private boolean isSupported() { + DiscoverySpi discoSpi = ctx.config().getDiscoverySpi(); + + if (discoSpi instanceof IgniteDiscoverySpi) + return ((IgniteDiscoverySpi)discoSpi).allNodesSupport(DISTRIBUTED_METASTORAGE); + else { + Collection<ClusterNode> nodes = discoSpi.getRemoteNodes(); + + return IgniteFeatures.allNodesSupports(nodes, DISTRIBUTED_METASTORAGE); + } + } + /** {@inheritDoc} */ @Override public void start() throws IgniteCheckedException { - if (ctx.clientNode()) + if (ctx.clientNode() || ctx.isDaemon()) return; if (isPersistenceEnabled(ctx.config())) { @@ -216,7 +243,7 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter /** {@inheritDoc} */ @Override public void onActivate(GridKernalContext kctx) throws IgniteCheckedException { - if (ctx.clientNode()) + if (ctx.clientNode() || ctx.isDaemon()) return; if (!isPersistenceEnabled(ctx.config())) { @@ -246,7 +273,7 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter /** {@inheritDoc} */ @Override public void onDeActivate(GridKernalContext kctx) { - if (ctx.clientNode()) + if (ctx.clientNode() || ctx.isDaemon()) return; synchronized (innerStateLock) { @@ -444,7 +471,7 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter /** {@inheritDoc} */ @Override public void collectJoiningNodeData(DiscoveryDataBag dataBag) { - if (ctx.clientNode()) + if (ctx.clientNode() || ctx.isDaemon()) return; assert startupExtras != null; @@ -463,7 +490,12 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter hist ); - dataBag.addJoiningNodeData(COMPONENT_ID, data); + try { + dataBag.addJoiningNodeData(COMPONENT_ID, JdkMarshaller.DEFAULT.marshal(data)); + } + catch (IgniteCheckedException e) { + throw new IgniteException(e); + } } /** Returns current baseline topology id of {@code -1} if there's no baseline topology found. */ @@ -478,29 +510,47 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter ClusterNode node, DiscoveryDataBag.JoiningNodeDiscoveryData discoData ) { - if (ctx.clientNode()) + if (ctx.clientNode() || ctx.isDaemon()) return null; - if (!discoData.hasJoiningNodeData() || !isPersistenceEnabled(ctx.config())) - return null; + synchronized (innerStateLock) { + DistributedMetaStorageVersion locVer = getActualVersion(); - DistributedMetaStorageJoiningNodeData joiningData = - (DistributedMetaStorageJoiningNodeData)discoData.joiningNodeData(); + if (!discoData.hasJoiningNodeData()) { + // Joining node doesn't support distributed metastorage feature. - DistributedMetaStorageVersion remoteVer = joiningData.ver; + if (isSupported() && locVer.id > 0 && !(node.isClient() || node.isDaemon())) { + String errorMsg = "Node not supporting distributed metastorage feature" + + " is not allowed to join the cluster"; + + return new IgniteNodeValidationResult(node.id(), errorMsg, errorMsg); + } + else + return null; + } - DistributedMetaStorageHistoryItem[] remoteHist = joiningData.hist; + DistributedMetaStorageJoiningNodeData joiningData = getJoiningNodeData(discoData); - int remoteHistSize = remoteHist.length; + if (joiningData == null) { + String errorMsg = "Cannot unmarshal joining node data"; - int remoteBltId = joiningData.bltId; + return new IgniteNodeValidationResult(node.id(), errorMsg, errorMsg); + } - boolean clusterIsActive = isActive(); + if (!isPersistenceEnabled(ctx.config())) + return null; - String errorMsg; + DistributedMetaStorageVersion remoteVer = joiningData.ver; - synchronized (innerStateLock) { - DistributedMetaStorageVersion locVer = getActualVersion(); + DistributedMetaStorageHistoryItem[] remoteHist = joiningData.hist; + + int remoteHistSize = remoteHist.length; + + int remoteBltId = joiningData.bltId; + + boolean clusterIsActive = isActive(); + + String errorMsg; int locBltId = getBaselineTopologyId(); @@ -572,24 +622,29 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter " Please check the order in which you start cluster nodes."; } } - } - return (errorMsg == null) ? null : new IgniteNodeValidationResult(node.id(), errorMsg, errorMsg); + return (errorMsg == null) ? null : new IgniteNodeValidationResult(node.id(), errorMsg, errorMsg); + } } /** {@inheritDoc} */ @Override public void onJoiningNodeDataReceived(DiscoveryDataBag.JoiningNodeDiscoveryData discoData) { - if (ctx.clientNode()) + if (ctx.clientNode() || ctx.isDaemon()) return; if (!discoData.hasJoiningNodeData()) return; - DistributedMetaStorageJoiningNodeData joiningData = - (DistributedMetaStorageJoiningNodeData)discoData.joiningNodeData(); + DistributedMetaStorageJoiningNodeData joiningData = getJoiningNodeData(discoData); + + if (joiningData == null) + return; DistributedMetaStorageVersion remoteVer = joiningData.ver; + if (!isSupported() && remoteVer.id > 0) + return; + synchronized (innerStateLock) { DistributedMetaStorageVersion actualVer = getActualVersion(); @@ -613,7 +668,7 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter /** {@inheritDoc} */ @Override public void collectGridNodeData(DiscoveryDataBag dataBag) { - if (ctx.clientNode()) + if (ctx.clientNode() || ctx.isDaemon()) return; if (dataBag.commonDataCollectedFor(COMPONENT_ID)) @@ -624,8 +679,13 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter if (!discoData.hasJoiningNodeData()) return; - DistributedMetaStorageJoiningNodeData joiningData = - (DistributedMetaStorageJoiningNodeData)discoData.joiningNodeData(); + if (!isSupported()) + return; + + DistributedMetaStorageJoiningNodeData joiningData = getJoiningNodeData(discoData); + + if (joiningData == null) + return; DistributedMetaStorageVersion remoteVer = joiningData.ver; @@ -697,6 +757,24 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter } } + /** */ + @Nullable private DistributedMetaStorageJoiningNodeData getJoiningNodeData( + DiscoveryDataBag.JoiningNodeDiscoveryData discoData + ) { + byte[] data = (byte[])discoData.joiningNodeData(); + + assert data != null; + + try { + return JdkMarshaller.DEFAULT.unmarshal(data, U.gridClassLoader()); + } + catch (IgniteCheckedException e) { + log.error("Unable to unmarshal joinging node data for distributed metastorage component.", e); + + return null; + } + } + /** * Returns number of all available history items. Might be a history from remote node snapshot or/and deferred * updates from another remote node. Depends on the current node state. @@ -795,10 +873,10 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter /** {@inheritDoc} */ @Override public void onGridDataReceived(DiscoveryDataBag.GridDiscoveryData data) { - DistributedMetaStorageClusterNodeData nodeData = (DistributedMetaStorageClusterNodeData)data.commonData(); + synchronized (innerStateLock) { + DistributedMetaStorageClusterNodeData nodeData = (DistributedMetaStorageClusterNodeData)data.commonData(); - if (nodeData != null) { - synchronized (innerStateLock) { + if (nodeData != null) { if (nodeData.fullData == null) { if (nodeData.updates != null) { for (DistributedMetaStorageHistoryItem update : nodeData.updates) @@ -808,6 +886,10 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter else writeFullDataLater(nodeData); } + else if (!(ctx.clientNode() || ctx.isDaemon()) && getActualVersion().id > 0) { + throw new IgniteException("Cannot join the cluster because it doesn't support distributed metastorage" + + " feature and this node has not empty distributed metastorage data"); + } } } @@ -821,6 +903,9 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter * cluster is not active. */ private GridFutureAdapter<?> startWrite(String key, byte[] valBytes) throws IgniteCheckedException { + if (!isSupported()) + throw new IgniteCheckedException(NOT_SUPPORTED_MSG); + UUID reqId = UUID.randomUUID(); GridFutureAdapter<Boolean> fut = new GridFutureAdapter<>(); @@ -839,6 +924,9 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter */ private GridFutureAdapter<Boolean> startCas(String key, byte[] expValBytes, byte[] newValBytes) throws IgniteCheckedException { + if (!isSupported()) + throw new IgniteCheckedException(NOT_SUPPORTED_MSG); + UUID reqId = UUID.randomUUID(); GridFutureAdapter<Boolean> fut = new GridFutureAdapter<>(); @@ -865,8 +953,17 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter ClusterNode node, DistributedMetaStorageUpdateMessage msg ) { + if (msg.errorMessage() != null) + return; + if (!isActive()) { - msg.setActive(false); + msg.errorMessage("Ignite cluster is not active"); + + return; + } + + if (!isSupported()) { + msg.errorMessage(NOT_SUPPORTED_MSG); return; } @@ -900,7 +997,9 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter GridFutureAdapter<Boolean> fut = updateFuts.remove(msg.requestId()); if (fut != null) { - if (msg.isActive()) { + String errorMsg = msg.errorMessage(); + + if (errorMsg == null) { Boolean res = msg instanceof DistributedMetaStorageCasAckMessage ? ((DistributedMetaStorageCasAckMessage)msg).updated() : null; @@ -908,7 +1007,7 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter fut.onDone(res); } else - fut.onDone(new IllegalStateException("Ignite cluster is not active")); + fut.onDone(new IllegalStateException(errorMsg)); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateAckMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateAckMessage.java index 0e05d93..e930ea8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateAckMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateAckMessage.java @@ -38,12 +38,12 @@ class DistributedMetaStorageUpdateAckMessage implements DiscoveryCustomMessage { private final UUID reqId; /** */ - private final boolean active; + private final String errorMsg; /** */ - public DistributedMetaStorageUpdateAckMessage(UUID reqId, boolean active) { + public DistributedMetaStorageUpdateAckMessage(UUID reqId, String errorMsg) { this.reqId = reqId; - this.active = active; + this.errorMsg = errorMsg; } /** {@inheritDoc} */ @@ -62,8 +62,8 @@ class DistributedMetaStorageUpdateAckMessage implements DiscoveryCustomMessage { } /** */ - public boolean isActive() { - return active; + public String errorMessage() { + return errorMsg; } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateMessage.java index cc3f37f..dafc4a9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateMessage.java @@ -44,7 +44,7 @@ class DistributedMetaStorageUpdateMessage implements DiscoveryCustomMessage { private final byte[] valBytes; /** */ - private boolean active = true; + private String errorMsg; /** */ public DistributedMetaStorageUpdateMessage(UUID reqId, String key, byte[] valBytes) { @@ -79,18 +79,18 @@ class DistributedMetaStorageUpdateMessage implements DiscoveryCustomMessage { } /** */ - public void setActive(boolean active) { - this.active = active; + public void errorMessage(String errorMsg) { + this.errorMsg = errorMsg; } /** */ - protected boolean isActive() { - return active; + protected String errorMessage() { + return errorMsg; } /** {@inheritDoc} */ @Override @Nullable public DiscoveryCustomMessage ackMessage() { - return new DistributedMetaStorageUpdateAckMessage(reqId, active); + return new DistributedMetaStorageUpdateAckMessage(reqId, errorMsg); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java index 7adef67..214641d 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java @@ -152,9 +152,9 @@ import org.jetbrains.annotations.Nullable; import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2; import static org.apache.ignite.IgniteSystemProperties.IGNITE_DISCOVERY_CLIENT_RECONNECT_HISTORY_SIZE; +import static org.apache.ignite.IgniteSystemProperties.IGNITE_EVENT_DRIVEN_SERVICE_PROCESSOR_ENABLED; import static org.apache.ignite.IgniteSystemProperties.IGNITE_NODE_IDS_HISTORY_SIZE; import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID; -import static org.apache.ignite.IgniteSystemProperties.IGNITE_EVENT_DRIVEN_SERVICE_PROCESSOR_ENABLED; import static org.apache.ignite.IgniteSystemProperties.getInteger; import static org.apache.ignite.events.EventType.EVT_NODE_FAILED; import static org.apache.ignite.events.EventType.EVT_NODE_JOINED; @@ -163,12 +163,12 @@ import static org.apache.ignite.events.EventType.EVT_NODE_METRICS_UPDATED; import static org.apache.ignite.events.EventType.EVT_NODE_SEGMENTED; import static org.apache.ignite.failure.FailureType.CRITICAL_ERROR; import static org.apache.ignite.failure.FailureType.SYSTEM_WORKER_TERMINATION; +import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_EVENT_DRIVEN_SERVICE_PROCESSOR_ENABLED; import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_LATE_AFFINITY_ASSIGNMENT; import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_MARSHALLER; import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_MARSHALLER_COMPACT_FOOTER; import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_MARSHALLER_USE_BINARY_STRING_SER_VER_2; import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_MARSHALLER_USE_DFLT_SUID; -import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_EVENT_DRIVEN_SERVICE_PROCESSOR_ENABLED; import static org.apache.ignite.spi.IgnitePortProtocol.TCP; import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.AUTH_FAILED; import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.CHECK_FAILED; @@ -177,9 +177,9 @@ import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState. import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.DISCONNECTED; import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.DISCONNECTING; import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.DUPLICATE_ID; -import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.RING_FAILED; import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.LEFT; import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.LOOPBACK_PROBLEM; +import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.RING_FAILED; import static org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoverySpiState.STOPPING; import static org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessage.STATUS_OK; import static org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessage.STATUS_RECON; diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java index 7e5b7a2..0862614 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java @@ -218,7 +218,7 @@ abstract class TcpDiscoveryImpl { /** * @param feature Feature to check. - * @return {@code True} if all nodes support the given featire, {@code false} otherwise. + * @return {@code true} if all nodes support the given feature, {@code false} otherwise. */ public abstract boolean allNodesSupport(IgniteFeatures feature); diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/DiscoveryDataPacket.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/DiscoveryDataPacket.java index bec8cee..f342503 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/DiscoveryDataPacket.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/DiscoveryDataPacket.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.UUID; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.internal.GridComponent; import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.Marshaller; @@ -284,8 +285,12 @@ public class DiscoveryDataPacket implements Serializable { if (CONTINUOUS_PROC.ordinal() == binEntry.getKey() && X.hasCause(e, ClassNotFoundException.class) && clientNode) U.warn(log, "Failed to unmarshal continuous query remote filter on client node. Can be ignored."); - else + else if (binEntry.getKey() < GridComponent.DiscoveryDataExchangeType.VALUES.length) U.error(log, "Failed to unmarshal discovery data for component: " + binEntry.getKey(), e); + else { + U.warn(log, "Failed to unmarshal discovery data." + + " Component " + binEntry.getKey() + " is not found."); + } } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/metastorage/DistributedMetaStorageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/metastorage/DistributedMetaStorageTest.java index 0e0a448..5161bf3 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/metastorage/DistributedMetaStorageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/metastorage/DistributedMetaStorageTest.java @@ -113,7 +113,7 @@ public class DistributedMetaStorageTest extends GridCommonAbstractTest { public void testMultipleNodes() throws Exception { int cnt = 4; - startGridsMultiThreaded(cnt); + startGrids(cnt); grid(0).cluster().active(true); @@ -139,7 +139,7 @@ public class DistributedMetaStorageTest extends GridCommonAbstractTest { public void testListenersOnWrite() throws Exception { int cnt = 4; - startGridsMultiThreaded(cnt); + startGrids(cnt); grid(0).cluster().active(true); @@ -172,7 +172,7 @@ public class DistributedMetaStorageTest extends GridCommonAbstractTest { public void testListenersOnRemove() throws Exception { int cnt = 4; - startGridsMultiThreaded(cnt); + startGrids(cnt); grid(0).cluster().active(true); diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java index e254c39..29ee741 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java @@ -368,7 +368,8 @@ public final class GridTestUtils { while (t != null) { if (cls == t.getClass() && (msg == null || (t.getMessage() != null && t.getMessage().contains(msg)))) { - log.info("Caught expected exception: " + t.getMessage()); + if (log != null && log.isInfoEnabled()) + log.info("Caught expected exception: " + t.getMessage()); return t; } diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java index b21e335..8d887f9 100644 --- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java +++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java @@ -564,7 +564,7 @@ public class ZookeeperDiscoveryImpl { /** * @param feature Feature to check. - * @return {@code true} if all nodes support the given feature, false otherwise. + * @return {@code true} if all nodes support the given feature, {@code false} otherwise. */ public boolean allNodesSupport(IgniteFeatures feature) { checkState();