# ignite-654
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/3821f002 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/3821f002 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/3821f002 Branch: refs/heads/ignite-424 Commit: 3821f002956b14f7404b8943e320909f3d6c0067 Parents: 768ca6a Author: sboikov <sboi...@gridgain.com> Authored: Tue Mar 31 10:20:51 2015 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Tue Mar 31 10:38:54 2015 +0300 ---------------------------------------------------------------------- .../ignite/internal/GridKernalContextImpl.java | 6 +++--- .../org/apache/ignite/internal/IgniteKernal.java | 7 +++++++ .../internal/managers/GridManagerAdapter.java | 4 ++++ .../distributed/dht/GridPartitionedGetFuture.java | 3 ++- .../cache/distributed/near/GridNearGetFuture.java | 3 ++- .../org/apache/ignite/spi/IgniteSpiAdapter.java | 16 +++++++++++++--- .../org/apache/ignite/spi/IgniteSpiContext.java | 5 +++++ .../communication/tcp/TcpCommunicationSpi.java | 13 ++++--------- .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java | 14 +++++++++----- .../cache/GridCacheAbstractFailoverSelfTest.java | 2 +- .../ignite/testframework/GridSpiTestContext.java | 18 +++++++++--------- 11 files changed, 59 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java index 0c3f41f..059a576 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java @@ -319,6 +319,7 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable * @param cfg Grid configuration. * @param gw Kernal gateway. * @param utilityCachePool Utility cache pool. + * @param marshCachePool Marshaller cache pool. * @param execSvc Public executor service. * @param sysExecSvc System executor service. * @param p2pExecSvc P2P executor service. @@ -387,6 +388,7 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable /** * @param comp Manager to add. + * @param addToList If {@code true} component is added to components list. */ public void add(GridComponent comp, boolean addToList) { assert comp != null; @@ -495,9 +497,7 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable /** {@inheritDoc} */ @Override public boolean isStopping() { - GridKernalState state = gw.getState(); - - return state == GridKernalState.STOPPING || state == GridKernalState.STOPPED; + return ((IgniteKernal)grid).isStopping(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index c9c3b8d..6899af9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -1671,6 +1671,13 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { } /** + * @return {@code True} if node started shutdown sequence. + */ + public boolean isStopping() { + return stopGuard.get(); + } + + /** * @param cancel Whether or not to cancel running jobs. */ private void stop0(boolean cancel) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java index b965ea3..982ca86 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java @@ -281,6 +281,10 @@ public abstract class GridManagerAdapter<T extends IgniteSpi> implements GridMan for (final IgniteSpi spi : spis) { try { spi.onContextInitialized(new IgniteSpiContext() { + @Override public boolean isStopping() { + return ctx.isStopping(); + } + @Override public Collection<ClusterNode> remoteNodes() { return ctx.discovery().remoteNodes(); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java index 9b23dd2..da2105d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java @@ -607,7 +607,8 @@ public class GridPartitionedGetFuture<K, V> extends GridCompoundIdentityFuture<M if (log.isDebugEnabled()) log.debug("Remote node left grid while sending or waiting for reply (will retry): " + this); - final AffinityTopologyVersion updTopVer = new AffinityTopologyVersion(cctx.discovery().topologyVersion()); + final AffinityTopologyVersion updTopVer = + new AffinityTopologyVersion(Math.max(topVer.topologyVersion() + 1, cctx.discovery().topologyVersion())); final GridFutureRemapTimeoutObject timeout = new GridFutureRemapTimeoutObject(this, cctx.kernalContext().config().getNetworkTimeout(), http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java index 615d02e..b1017d8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java @@ -725,7 +725,8 @@ public final class GridNearGetFuture<K, V> extends GridCompoundIdentityFuture<Ma if (log.isDebugEnabled()) log.debug("Remote node left grid while sending or waiting for reply (will retry): " + this); - final AffinityTopologyVersion updTopVer = new AffinityTopologyVersion(cctx.discovery().topologyVersion()); + final AffinityTopologyVersion updTopVer = + new AffinityTopologyVersion(Math.max(topVer.topologyVersion() + 1, cctx.discovery().topologyVersion())); final GridFutureRemapTimeoutObject timeout = new GridFutureRemapTimeoutObject(this, cctx.kernalContext().config().getNetworkTimeout(), http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java index 2235895..bb66872 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java @@ -62,7 +62,7 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement private String name; /** Grid SPI context. */ - private volatile IgniteSpiContext spiCtx = new GridDummySpiContext(null); + private volatile IgniteSpiContext spiCtx = new GridDummySpiContext(null, false); /** Discovery listener. */ private GridLocalEventListener paramsLsnr; @@ -185,7 +185,7 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement ClusterNode locNode = spiCtx == null ? null : spiCtx.localNode(); // Set dummy no-op context. - spiCtx = new GridDummySpiContext(locNode); + spiCtx = new GridDummySpiContext(locNode, true); } /** @@ -523,13 +523,18 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement /** */ private final ClusterNode locNode; + /** */ + private final boolean stopping; + /** * Create temp SPI context. * * @param locNode Local node. + * @param stopping Node stopping flag. */ - GridDummySpiContext(ClusterNode locNode) { + GridDummySpiContext(ClusterNode locNode, boolean stopping) { this.locNode = locNode; + this.stopping = stopping; } /** {@inheritDoc} */ @@ -688,5 +693,10 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement @Override public MessageFactory messageFactory() { return null; } + + /** {@inheritDoc} */ + @Override public boolean isStopping() { + return stopping; + } } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java index cdc5492..75b637d 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java @@ -346,4 +346,9 @@ public interface IgniteSpiContext { * @return Message factory. */ public MessageFactory messageFactory(); + + /** + * @return {@code True} if node started shutdown sequence. + */ + public boolean isStopping(); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java index 01eb72f..0ab0cf2 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java @@ -257,7 +257,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter clients.remove(id, rmv)) { rmv.forceClose(); - if (!stopping) { + if (!getSpiContext().isStopping()) { GridNioRecoveryDescriptor recoveryData = ses.recoveryDescriptor(); if (recoveryData != null) { @@ -695,9 +695,6 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter /** Context initialization latch. */ private final CountDownLatch ctxInitLatch = new CountDownLatch(1); - /** Stopping flag. */ - private volatile boolean stopping; - /** metrics listener. */ private final GridNioMetricsListener metricsLsnr = new GridNioMetricsListener() { @Override public void onBytesSent(int bytesCnt) { @@ -1463,7 +1460,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter /** {@inheritDoc} */ @Override public void spiStop() throws IgniteSpiException { - assert stopping; + assert getSpiContext().isStopping(); unregisterMBean(); @@ -1498,8 +1495,6 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter /** {@inheritDoc} */ @Override protected void onContextDestroyed0() { - stopping = true; - if (ctxInitLatch.getCount() > 0) // Safety. ctxInitLatch.countDown(); @@ -1624,8 +1619,8 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter GridCommunicationClient client = clients.get(nodeId); if (client == null) { - if (stopping) - throw new IgniteSpiException("Grid is stopping."); + if (getSpiContext().isStopping()) + throw new IgniteSpiException("Node is stopping."); // Do not allow concurrent connects. GridFutureAdapter<GridCommunicationClient> fut = new ConnectFuture(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java index 03cf665..02d373c 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java @@ -4695,14 +4695,18 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov // Ping. if (msg instanceof TcpDiscoveryPingRequest) { - TcpDiscoveryPingRequest req = (TcpDiscoveryPingRequest)msg; + if (!getSpiContext().isStopping()) { + TcpDiscoveryPingRequest req = (TcpDiscoveryPingRequest)msg; - TcpDiscoveryPingResponse res = new TcpDiscoveryPingResponse(locNodeId); + TcpDiscoveryPingResponse res = new TcpDiscoveryPingResponse(locNodeId); - if (req.clientNodeId() != null) - res.clientExists(clientMsgWorkers.containsKey(req.clientNodeId())); + if (req.clientNodeId() != null) + res.clientExists(clientMsgWorkers.containsKey(req.clientNodeId())); - writeToSocket(sock, res); + writeToSocket(sock, res); + } + else if (log.isDebugEnabled()) + log.debug("Ignore ping request, node is stopping."); return; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFailoverSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFailoverSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFailoverSelfTest.java index 42b3293..4025265 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFailoverSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFailoverSelfTest.java @@ -46,7 +46,7 @@ public abstract class GridCacheAbstractFailoverSelfTest extends GridCacheAbstrac private static final int ENTRY_CNT = 100; /** */ - private static final int TOP_CHANGE_CNT = 5; + private static final int TOP_CHANGE_CNT = 10; /** */ private static final int TOP_CHANGE_THREAD_CNT = 3; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3821f002/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java index 80e5c42..a754910 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java @@ -24,7 +24,6 @@ import org.apache.ignite.internal.*; import org.apache.ignite.internal.direct.*; import org.apache.ignite.internal.managers.communication.*; import org.apache.ignite.internal.managers.eventstorage.*; -import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.lang.*; import org.apache.ignite.plugin.extensions.communication.*; @@ -108,8 +107,7 @@ public class GridSpiTestContext implements IgniteSpiContext { } /** {@inheritDoc} */ - @Nullable @Override - public ClusterNode node(UUID nodeId) { + @Nullable @Override public ClusterNode node(UUID nodeId) { if (locNode != null && locNode.id().equals(nodeId)) return locNode; @@ -240,9 +238,8 @@ public class GridSpiTestContext implements IgniteSpiContext { public void updateAllMetrics() { notifyListener(new DiscoveryEvent(locNode, "Metrics updated", EVT_NODE_METRICS_UPDATED, locNode)); - for (ClusterNode node : rmtNodes) { + for (ClusterNode node : rmtNodes) notifyListener(new DiscoveryEvent(locNode, "Metrics updated", EVT_NODE_METRICS_UPDATED, node)); - } } /** @@ -290,9 +287,8 @@ public class GridSpiTestContext implements IgniteSpiContext { */ @SuppressWarnings("deprecation") public void triggerMessage(ClusterNode node, Object msg) { - for (GridMessageListener lsnr : msgLsnrs) { + for (GridMessageListener lsnr : msgLsnrs) lsnr.onMessage(node.id(), msg); - } } /** {@inheritDoc} */ @@ -333,9 +329,8 @@ public class GridSpiTestContext implements IgniteSpiContext { assert typeSet != null; if (types != null) { - for (int type : types) { + for (int type : types) typeSet.add(type); - } } } @@ -519,6 +514,11 @@ public class GridSpiTestContext implements IgniteSpiContext { return factory; } + /** {@inheritDoc} */ + @Override public boolean isStopping() { + return false; + } + /** * @param cacheName Cache name. * @return Map representing cache.