You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/07/07 09:34:04 UTC

[01/46] ignite git commit: GG-12411 Backport [GG-12339] to 8.1.2 GG-12339 Improve logging of snasphot operation

Repository: ignite
Updated Branches:
  refs/heads/ignite-2.1 f9f13cf08 -> 31e9d3b17


GG-12411 Backport [GG-12339] to 8.1.2
GG-12339 Improve logging of snasphot operation


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/32409009
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/32409009
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/32409009

Branch: refs/heads/ignite-2.1
Commit: 3240900902fd302d1d40bf43af5b15be4a0cbef7
Parents: 5037604
Author: EdShangGG <es...@gridgain.com>
Authored: Thu Jun 29 19:13:34 2017 +0300
Committer: EdShangGG <es...@gridgain.com>
Committed: Thu Jun 29 19:13:34 2017 +0300

----------------------------------------------------------------------
 .../FinishSnapshotOperationAckDiscoveryMessage.java         | 9 +++++++++
 .../cache/persistence/GridCacheOffheapManager.java          | 4 ++++
 2 files changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/32409009/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
index 1e5ed42..83c512a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
@@ -74,4 +74,13 @@ public class FinishSnapshotOperationAckDiscoveryMessage implements DiscoveryCust
     public boolean success() {
         return success;
     }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return "FinishSnapshotOperationAckDiscoveryMessage{" +
+            "id=" + id +
+            ", opId=" + opId +
+            ", success=" + success +
+            '}';
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/32409009/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 4e322b9..84b1efe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -318,6 +318,10 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
 
                                         io.setNextSnapshotTag(metaPageAddr, nextSnapshotTag + 1);
 
+                                        if (log != null && log.isDebugEnabled())
+                                            log.debug("Save next snapshot before checkpoint start for grId = " + grpId
+                                                + ", nextSnapshotTag = " + nextSnapshotTag);
+
                                         if (PageHandler.isWalDeltaRecordNeeded(pageMem, grpId, metaPageId,
                                             metaPage, wal, null))
                                             wal.log(new MetaPageUpdateNextSnapshotId(grpId, metaPageId,


[30/46] ignite git commit: IGNITE-4901 Decrease logging level for DataStremer retry

Posted by vo...@apache.org.
IGNITE-4901 Decrease logging level for DataStremer retry


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c3401cbd
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c3401cbd
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c3401cbd

Branch: refs/heads/ignite-2.1
Commit: c3401cbd009d7b9cfc8aed0cc9c3f34fb5f433db
Parents: 740b0b2
Author: Alexey Kukushkin <Al...@yahoo.com>
Authored: Thu Jul 6 12:44:27 2017 +0300
Committer: Alexey Kukushkin <Al...@yahoo.com>
Committed: Thu Jul 6 12:44:27 2017 +0300

----------------------------------------------------------------------
 .../datastreamer/DataStreamProcessor.java       |   3 +-
 .../datastreamer/DataStreamerImpl.java          |  14 ++-
 .../datastreamer/DataStreamerImplSelfTest.java  | 123 ++++++++++++++++++-
 3 files changed, 132 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c3401cbd/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessor.java
index 789f0d2..84d536f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessor.java
@@ -22,6 +22,7 @@ import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
+import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 import org.apache.ignite.internal.managers.communication.GridIoManager;
 import org.apache.ignite.internal.managers.communication.GridMessageListener;
 import org.apache.ignite.internal.managers.deployment.GridDeployment;
@@ -340,7 +341,7 @@ public class DataStreamProcessor<K, V> extends GridProcessorAdapter {
                 AffinityTopologyVersion topVer = fut.topologyVersion();
 
                 if (!allowOverwrite && !topVer.equals(req.topologyVersion())) {
-                    Exception err = new IgniteCheckedException(
+                    Exception err = new ClusterTopologyCheckedException(
                         "DataStreamer will retry data transfer at stable topology " +
                             "[reqTop=" + req.topologyVersion() + ", topVer=" + topVer + ", node=remote]");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c3401cbd/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
index ae441de..df51fac 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
@@ -1782,10 +1782,16 @@ public class DataStreamerImpl<K, V> implements IgniteDataStreamer<K, V>, Delayed
                 try {
                     GridPeerDeployAware jobPda0 = jobPda;
 
-                    err = new IgniteCheckedException("DataStreamer request failed [node=" + nodeId + "]",
-                        (Throwable)U.unmarshal(ctx,
-                            errBytes,
-                            U.resolveClassLoader(jobPda0 != null ? jobPda0.classLoader() : null, ctx.config())));
+                    final Throwable cause = U.unmarshal(
+                        ctx,
+                        errBytes,
+                        U.resolveClassLoader(jobPda0 != null ? jobPda0.classLoader() : null, ctx.config()));
+
+                    final String msg = "DataStreamer request failed [node=" + nodeId + "]";
+
+                    err = cause instanceof ClusterTopologyCheckedException ?
+                        new ClusterTopologyCheckedException(msg, cause) :
+                        new IgniteCheckedException(msg, cause);
                 }
                 catch (IgniteCheckedException e) {
                     f.onDone(null, new IgniteCheckedException("Failed to unmarshal response.", e));

http://git-wip-us.apache.org/repos/asf/ignite/blob/c3401cbd/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImplSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImplSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImplSelfTest.java
index 6d10312..e72a9b4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImplSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImplSelfTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.datastreamer;
 
+import java.io.StringWriter;
 import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.Callable;
@@ -25,17 +26,29 @@ import javax.cache.CacheException;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.CacheServerNotFoundException;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.managers.communication.GridIoMessage;
+import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteFuture;
+import org.apache.ignite.lang.IgniteInClosure;
+import org.apache.ignite.plugin.extensions.communication.Message;
+import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.apache.log4j.Appender;
+import org.apache.log4j.Logger;
+import org.apache.log4j.SimpleLayout;
+import org.apache.log4j.WriterAppender;
 
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -50,12 +63,18 @@ public class DataStreamerImplSelfTest extends GridCommonAbstractTest {
     /** Number of keys to load via data streamer. */
     private static final int KEYS_COUNT = 1000;
 
+    /** Next nodes after MAX_CACHE_COUNT start without cache */
+    private static final int MAX_CACHE_COUNT = 4;
+
     /** Started grid counter. */
     private static int cnt;
 
     /** No nodes filter. */
     private static volatile boolean noNodesFilter;
 
+    /** Indicates whether we need to make the topology stale */
+    private static boolean needStaleTop = false;
+
     /** {@inheritDoc} */
     @Override protected void afterTest() throws Exception {
         super.afterTest();
@@ -72,8 +91,9 @@ public class DataStreamerImplSelfTest extends GridCommonAbstractTest {
 
         cfg.setDiscoverySpi(discoSpi);
 
-        // Forth node goes without cache.
-        if (cnt < 4)
+        cfg.setCommunicationSpi(new StaleTopologyCommunicationSpi());
+
+        if (cnt < MAX_CACHE_COUNT)
             cfg.setCacheConfiguration(cacheConfiguration());
 
         cnt++;
@@ -232,6 +252,44 @@ public class DataStreamerImplSelfTest extends GridCommonAbstractTest {
     }
 
     /**
+     * Cluster topology mismatch shall result in DataStreamer retrying cache update with the latest topology and
+     * no error logged to the console.
+     *
+     * @throws Exception if failed
+     */
+    public void testRetryWhenTopologyMismatch() throws Exception {
+        final int KEY = 1;
+        final String VAL = "1";
+
+        cnt = 0;
+
+        StringWriter logWriter = new StringWriter();
+        Appender logAppender = new WriterAppender(new SimpleLayout(), logWriter);
+
+        Logger.getRootLogger().addAppender(logAppender);
+
+        startGrids(MAX_CACHE_COUNT - 1); // cache-enabled nodes
+
+        try (Ignite ignite = startGrid(MAX_CACHE_COUNT);
+             IgniteDataStreamer<Integer, String> streamer = ignite.dataStreamer(DEFAULT_CACHE_NAME)) {
+
+            needStaleTop = true; // simulate stale topology for the next action
+
+            streamer.addData(KEY, VAL);
+        } finally {
+            needStaleTop = false;
+
+            logWriter.flush();
+
+            Logger.getRootLogger().removeAppender(logAppender);
+
+            logAppender.close();
+        }
+
+        assertFalse(logWriter.toString().contains("DataStreamer will retry data transfer at stable topology"));
+    }
+
+    /**
      * Gets cache configuration.
      *
      * @return Cache configuration.
@@ -248,4 +306,63 @@ public class DataStreamerImplSelfTest extends GridCommonAbstractTest {
 
         return cacheCfg;
     }
-}
+
+    /**
+     * Simulate stale (not up-to-date) topology
+     */
+    private static class StaleTopologyCommunicationSpi extends TcpCommunicationSpi {
+        /** {@inheritDoc} */
+        @Override public void sendMessage(ClusterNode node, Message msg, IgniteInClosure<IgniteException> ackC) {
+            // Send stale topology only in the first request to avoid indefinitely getting failures.
+            if (needStaleTop) {
+                if (msg instanceof GridIoMessage) {
+                    GridIoMessage ioMsg = (GridIoMessage)msg;
+
+                    Message appMsg = ioMsg.message();
+
+                    if (appMsg != null && appMsg instanceof DataStreamerRequest) {
+                        DataStreamerRequest req = (DataStreamerRequest)appMsg;
+
+                        AffinityTopologyVersion validTop = req.topologyVersion();
+
+                        // Simulate situation when a node did not receive the latest "node joined" topology update causing
+                        // topology mismatch
+                        AffinityTopologyVersion staleTop = new AffinityTopologyVersion(
+                            validTop.topologyVersion() - 1,
+                            validTop.minorTopologyVersion());
+
+                        appMsg = new DataStreamerRequest(
+                            req.requestId(),
+                            req.responseTopicBytes(),
+                            req.cacheName(),
+                            req.updaterBytes(),
+                            req.entries(),
+                            req.ignoreDeploymentOwnership(),
+                            req.skipStore(),
+                            req.keepBinary(),
+                            req.deploymentMode(),
+                            req.sampleClassName(),
+                            req.userVersion(),
+                            req.participants(),
+                            req.classLoaderId(),
+                            req.forceLocalDeployment(),
+                            staleTop);
+
+                        msg = new GridIoMessage(
+                            GridTestUtils.<Byte>getFieldValue(ioMsg, "plc"),
+                            GridTestUtils.getFieldValue(ioMsg, "topic"),
+                            GridTestUtils.<Integer>getFieldValue(ioMsg, "topicOrd"),
+                            appMsg,
+                            GridTestUtils.<Boolean>getFieldValue(ioMsg, "ordered"),
+                            ioMsg.timeout(),
+                            ioMsg.skipOnTimeout());
+
+                        needStaleTop = false;
+                    }
+                }
+            }
+
+            super.sendMessage(node, msg, ackC);
+        }
+    }
+}
\ No newline at end of file


[15/46] ignite git commit: Merge remote-tracking branch 'community/ignite-2.1.2' into ignite-2.1.2

Posted by vo...@apache.org.
Merge remote-tracking branch 'community/ignite-2.1.2' into ignite-2.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0f9a895a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0f9a895a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0f9a895a

Branch: refs/heads/ignite-2.1
Commit: 0f9a895a04cd4a4f6be8e006fc2afd6f720b2215
Parents: 58a937e 301f310
Author: sboikov <sb...@gridgain.com>
Authored: Wed Jul 5 14:25:16 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Jul 5 14:25:16 2017 +0300

----------------------------------------------------------------------
 .../cpp/odbc-test/src/queries_test.cpp          | 61 ++++++++++++++++++++
 modules/platforms/cpp/odbc/src/odbc.cpp         |  2 +-
 modules/platforms/cpp/odbc/src/statement.cpp    |  3 -
 3 files changed, 62 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[02/46] ignite git commit: GG-12407: Backport [GG-12364] to 8.1.2

Posted by vo...@apache.org.
GG-12407: Backport [GG-12364] to 8.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/68c0281d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/68c0281d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/68c0281d

Branch: refs/heads/ignite-2.1
Commit: 68c0281dc0f1784f5de2c8ca68c7c2a89f93c397
Parents: 3240900
Author: Ivan Rakov <iv...@gmail.com>
Authored: Fri Jun 30 18:35:50 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Fri Jun 30 18:35:50 2017 +0300

----------------------------------------------------------------------
 .../persistence/GridCacheOffheapManager.java     | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/68c0281d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 84b1efe..a890fa1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -186,22 +186,22 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
             IgniteWriteAheadLogManager wal = this.ctx.wal();
 
             if (size > 0 || updCntr > 0) {
-                int state = -1;
+                GridDhtPartitionState state = null;
 
                 if (!grp.isLocal()) {
                     if (beforeDestroy)
-                        state = GridDhtPartitionState.EVICTED.ordinal();
+                        state = GridDhtPartitionState.EVICTED;
                     else {
                         // localPartition will not acquire writeLock here because create=false.
                         GridDhtLocalPartition part = grp.topology().localPartition(store.partId(),
                             AffinityTopologyVersion.NONE, false);
 
                         if (part != null && part.state() != GridDhtPartitionState.EVICTED)
-                            state = part.state().ordinal();
+                            state = part.state();
                     }
 
                     // Do not save meta for evicted partitions on next checkpoints.
-                    if (state == -1)
+                    if (state == null)
                         return false;
                 }
 
@@ -229,8 +229,8 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
                         changed |= io.setGlobalRemoveId(pageAddr, rmvId);
                         changed |= io.setSize(pageAddr, size);
 
-                        if (state != -1)
-                            changed |= io.setPartitionState(pageAddr, (byte)state);
+                        if (state != null)
+                            changed |= io.setPartitionState(pageAddr, (byte)state.ordinal());
                         else
                             assert grp.isLocal() : grp.cacheOrGroupName();
 
@@ -327,8 +327,9 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
                                             wal.log(new MetaPageUpdateNextSnapshotId(grpId, metaPageId,
                                                 nextSnapshotTag + 1));
 
-                                        addPartition(ctx.partitionStatMap(), metaPageAddr, io, grpId, PageIdAllocator.INDEX_PARTITION,
-                                            this.ctx.kernalContext().cache().context().pageStore().pages(grpId, PageIdAllocator.INDEX_PARTITION));
+                                        if (state == GridDhtPartitionState.OWNING)
+                                            addPartition(ctx.partitionStatMap(), metaPageAddr, io, grpId, PageIdAllocator.INDEX_PARTITION,
+                                                    this.ctx.kernalContext().cache().context().pageStore().pages(grpId, PageIdAllocator.INDEX_PARTITION));
                                     }
                                     finally {
                                         pageMem.writeUnlock(grpId, metaPageId, metaPage, null, true);
@@ -361,7 +362,7 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
                                 rmvId,
                                 size,
                                 cntrsPageId,
-                                (byte)state,
+                                (byte)state.ordinal(),
                                 pageCnt
                             ));
                     }


[42/46] ignite git commit: 2.1 Added test.

Posted by vo...@apache.org.
2.1 Added test.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/64d6c98d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/64d6c98d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/64d6c98d

Branch: refs/heads/ignite-2.1
Commit: 64d6c98d88656132e89977806ca0e9152eb62427
Parents: 9c6a65e
Author: sboikov <sb...@gridgain.com>
Authored: Thu Jul 6 15:55:21 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Jul 6 15:55:21 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/IgniteCacheGroupsTest.java | 60 ++++++++++++++++++++
 1 file changed, 60 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/64d6c98d/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
index 7b420cc..d3269c3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
@@ -3631,6 +3631,66 @@ public class IgniteCacheGroupsTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
+    public void testDataCleanup() throws Exception {
+        Ignite node = startGrid(0);
+
+        IgniteCache cache0 = node.createCache(cacheConfiguration(GROUP1, "c0", PARTITIONED, ATOMIC, 1, false));
+
+        for (int i = 0; i < 100; i++)
+            assertNull(cache0.get(i));
+
+        for (int i = 0; i < 100; i++)
+            cache0.put(i, i);
+
+        List<CacheConfiguration> ccfgs = new ArrayList<>();
+
+        ccfgs.add(cacheConfiguration(GROUP1, "c1", PARTITIONED, ATOMIC, 1, false));
+        ccfgs.add(cacheConfiguration(GROUP1, "c1", PARTITIONED, ATOMIC, 1, true));
+        ccfgs.add(cacheConfiguration(GROUP1, "c1", PARTITIONED, TRANSACTIONAL, 1, false));
+        ccfgs.add(cacheConfiguration(GROUP1, "c1", PARTITIONED, TRANSACTIONAL, 1, true));
+
+        for (CacheConfiguration ccfg : ccfgs) {
+            IgniteCache cache = node.createCache(ccfg);
+
+            for (int i = 0; i < 100; i++)
+                assertNull(cache.get(i));
+
+            for (int i = 0; i < 100; i++)
+                cache.put(i, i);
+
+            for (int i = 0; i < 100; i++)
+                assertEquals(i, cache.get(i));
+
+            node.destroyCache(ccfg.getName());
+
+            cache = node.createCache(ccfg);
+
+            for (int i = 0; i < 100; i++)
+                assertNull(cache.get(i));
+
+            node.destroyCache(ccfg.getName());
+        }
+
+        for (int i = 0; i < 100; i++)
+            assertEquals(i, cache0.get(i));
+
+        node.destroyCache(cache0.getName());
+
+        cache0 = node.createCache(cacheConfiguration(GROUP1, "c0", PARTITIONED, ATOMIC, 1, false));
+
+        for (int i = 0; i < 100; i++)
+            assertNull(cache0.get(i));
+
+        for (int i = 0; i < 100; i++)
+            cache0.put(i, i);
+
+        for (int i = 0; i < 100; i++)
+            assertEquals(i, cache0.get(i));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testRestartsAndCacheCreateDestroy() throws Exception {
         final int SRVS = 5;
 


[07/46] ignite git commit: Fixed updateCounter when node is removed (backport of 4fedd0fe)

Posted by vo...@apache.org.
Fixed updateCounter when node is removed (backport of 4fedd0fe)


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ace80299
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ace80299
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ace80299

Branch: refs/heads/ignite-2.1
Commit: ace802990822fa9a68ddb9824a159dacedc05901
Parents: c475f27
Author: Ivan Rakov <iv...@gmail.com>
Authored: Tue Jul 4 17:45:37 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Tue Jul 4 17:45:37 2017 +0300

----------------------------------------------------------------------
 .../cache/distributed/dht/GridDhtPartitionTopologyImpl.java     | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ace80299/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
index a6f1831..f24dd45 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
@@ -1934,12 +1934,11 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
         ClusterNode loc = ctx.localNode();
 
         if (node2part != null) {
-            if (loc.equals(oldest) && !node2part.nodeId().equals(loc.id())) {
-                updateSeq.setIfGreater(node2part.updateSequence());
+            updateSeq.setIfGreater(node2part.updateSequence());
 
+            if (loc.equals(oldest) && !node2part.nodeId().equals(loc.id()))
                 node2part = new GridDhtPartitionFullMap(loc.id(), loc.order(), updateSeq.incrementAndGet(),
                     node2part, false);
-            }
             else
                 node2part = new GridDhtPartitionFullMap(node2part, node2part.updateSequence());
 


[20/46] ignite git commit: IGNITE-5576: Added Compute::Run() for C++

Posted by vo...@apache.org.
IGNITE-5576: Added Compute::Run() for C++

(cherry picked from commit 80c95ff79f344daf1fca3f094733a24bac2a218d)


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/29d532e8
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/29d532e8
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/29d532e8

Branch: refs/heads/ignite-2.1
Commit: 29d532e8be971ccac40ece00fc84a6a6bffdad0f
Parents: ad42f62
Author: Igor Sapego <is...@gridgain.com>
Authored: Wed Jul 5 18:51:27 2017 +0300
Committer: Igor Sapego <is...@gridgain.com>
Committed: Wed Jul 5 18:51:58 2017 +0300

----------------------------------------------------------------------
 .../core-test/config/cache-query-default.xml    |  18 ++
 .../cpp/core-test/src/compute_test.cpp          | 176 +++++++++++++++++++
 .../cpp/core/include/ignite/compute/compute.h   |  35 +++-
 .../include/ignite/impl/compute/compute_impl.h  |  42 +++++
 .../ignite/impl/compute/compute_job_holder.h    |  73 ++++++++
 .../ignite/impl/compute/compute_job_result.h    | 112 ++++++++++++
 .../ignite/impl/compute/compute_task_holder.h   |  85 +++++++++
 7 files changed, 539 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/29d532e8/modules/platforms/cpp/core-test/config/cache-query-default.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/config/cache-query-default.xml b/modules/platforms/cpp/core-test/config/cache-query-default.xml
index 38636e5..16f601d 100644
--- a/modules/platforms/cpp/core-test/config/cache-query-default.xml
+++ b/modules/platforms/cpp/core-test/config/cache-query-default.xml
@@ -94,6 +94,12 @@
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeSynchronizationMode" value="FULL_SYNC"/>
 
+                    <property name="affinity">
+                        <bean class="org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction">
+                            <property name="partitions" value="256"/>
+                        </bean>
+                    </property>
+
                     <property name="queryEntities">
                         <list>
                             <bean class="org.apache.ignite.cache.QueryEntity">
@@ -115,6 +121,12 @@
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeSynchronizationMode" value="FULL_SYNC"/>
 
+                    <property name="affinity">
+                        <bean class="org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction">
+                            <property name="partitions" value="256"/>
+                        </bean>
+                    </property>
+
                     <!-- Configure type metadata to enable queries. -->
                     <property name="queryEntities">
                         <list>
@@ -132,6 +144,12 @@
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeSynchronizationMode" value="FULL_SYNC"/>
 
+                    <property name="affinity">
+                        <bean class="org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction">
+                            <property name="partitions" value="256"/>
+                        </bean>
+                    </property>
+
                     <!-- Configure type metadata to enable queries. -->
                     <property name="queryEntities">
                         <list>

http://git-wip-us.apache.org/repos/asf/ignite/blob/29d532e8/modules/platforms/cpp/core-test/src/compute_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/compute_test.cpp b/modules/platforms/cpp/core-test/src/compute_test.cpp
index d3b1183..8c57ef1 100644
--- a/modules/platforms/cpp/core-test/src/compute_test.cpp
+++ b/modules/platforms/cpp/core-test/src/compute_test.cpp
@@ -146,6 +146,49 @@ struct Func2 : ComputeFunc<std::string>
     IgniteError err;
 };
 
+struct Func3 : ComputeFunc<void>
+{
+    Func3() :
+        a(), b(), err()
+    {
+        // No-op.
+    }
+
+    Func3(int32_t a, int32_t b) :
+        a(a), b(b), err()
+    {
+        // No-op.
+    }
+
+    Func3(IgniteError err) :
+        a(), b(), err(err)
+    {
+        // No-op.
+    }
+
+    virtual void Call()
+    {
+        boost::this_thread::sleep_for(boost::chrono::milliseconds(200));
+
+        if (err.GetCode() != IgniteError::IGNITE_SUCCESS)
+            throw err;
+
+        std::stringstream tmp;
+
+        tmp << a << '.' << b;
+
+        res = tmp.str();
+    }
+
+    int32_t a;
+    int32_t b;
+    IgniteError err;
+
+    static std::string res;
+};
+
+std::string Func3::res;
+
 namespace ignite
 {
     namespace binary
@@ -235,6 +278,49 @@ namespace ignite
                 dst.err = reader.ReadObject<IgniteError>("err");
             }
         };
+
+        template<>
+        struct BinaryType<Func3>
+        {
+            static int32_t GetTypeId()
+            {
+                return GetBinaryStringHashCode("Func3");
+            }
+
+            static void GetTypeName(std::string& dst)
+            {
+                dst = "Func3";
+            }
+
+            static int32_t GetFieldId(const char* name)
+            {
+                return GetBinaryStringHashCode(name);
+            }
+
+            static bool IsNull(const Func3& obj)
+            {
+                return false;
+            }
+
+            static void GetNull(Func3& dst)
+            {
+                dst = Func3(0, 0);
+            }
+
+            static void Write(BinaryWriter& writer, const Func3& obj)
+            {
+                writer.WriteInt32("a", obj.a);
+                writer.WriteInt32("b", obj.b);
+                writer.WriteObject<IgniteError>("err", obj.err);
+            }
+
+            static void Read(BinaryReader& reader, Func3& dst)
+            {
+                dst.a = reader.ReadInt32("a");
+                dst.b = reader.ReadInt32("b");
+                dst.err = reader.ReadObject<IgniteError>("err");
+            }
+        };
     }
 }
 
@@ -244,6 +330,7 @@ IGNITE_EXPORTED_CALL void IgniteModuleInit1(IgniteBindingContext& context)
 
     binding.RegisterComputeFunc<Func1>();
     binding.RegisterComputeFunc<Func2>();
+    binding.RegisterComputeFunc<Func3>();
 }
 
 BOOST_FIXTURE_TEST_SUITE(ComputeTestSuite, ComputeTestSuiteFixture)
@@ -334,4 +421,93 @@ BOOST_AUTO_TEST_CASE(IgniteCallTestRemoteError)
     BOOST_CHECK_EXCEPTION(res.GetValue(), IgniteError, IsTestError);
 }
 
+BOOST_AUTO_TEST_CASE(IgniteRunSyncLocal)
+{
+    Compute compute = node.GetCompute();
+
+    BOOST_CHECKPOINT("Running");
+    compute.Run(Func3(8, 5));
+
+    BOOST_CHECK_EQUAL(Func3::res, "8.5");
+}
+
+BOOST_AUTO_TEST_CASE(IgniteRunAsyncLocal)
+{
+    Compute compute = node.GetCompute();
+
+    BOOST_CHECKPOINT("Running");
+    Future<void> res = compute.RunAsync(Func3(312, 245));
+
+    BOOST_CHECK(!res.IsReady());
+
+    BOOST_CHECKPOINT("Waiting with timeout");
+    res.WaitFor(100);
+
+    BOOST_CHECK(!res.IsReady());
+
+    res.GetValue();
+
+    BOOST_CHECK_EQUAL(Func3::res, "312.245");
+}
+
+BOOST_AUTO_TEST_CASE(IgniteRunSyncLocalError)
+{
+    Compute compute = node.GetCompute();
+
+    BOOST_CHECKPOINT("Running");
+
+    BOOST_CHECK_EXCEPTION(compute.Run(Func3(MakeTestError())), IgniteError, IsTestError);
+}
+
+BOOST_AUTO_TEST_CASE(IgniteRunAsyncLocalError)
+{
+    Compute compute = node.GetCompute();
+
+    BOOST_CHECKPOINT("Running");
+    Future<void> res = compute.RunAsync(Func3(MakeTestError()));
+
+    BOOST_CHECK(!res.IsReady());
+
+    BOOST_CHECKPOINT("Waiting with timeout");
+    res.WaitFor(100);
+
+    BOOST_CHECK(!res.IsReady());
+
+    BOOST_CHECK_EXCEPTION(res.GetValue(), IgniteError, IsTestError);
+}
+
+BOOST_AUTO_TEST_CASE(IgniteRunTestRemote)
+{
+    Ignite node2 = MakeNode("ComputeNode2");
+    Compute compute = node.GetCompute();
+
+    BOOST_CHECKPOINT("Running");
+    compute.CallAsync<std::string>(Func2(8, 5));
+
+    compute.Run(Func3(42, 24));
+
+    BOOST_CHECK_EQUAL(Func3::res, "42.24");
+}
+
+BOOST_AUTO_TEST_CASE(IgniteRunTestRemoteError)
+{
+    Ignite node2 = MakeNode("ComputeNode2");
+    Compute compute = node.GetCompute();
+
+    BOOST_CHECKPOINT("Running");
+    compute.CallAsync<std::string>(Func2(8, 5));
+
+    Future<void> res = compute.RunAsync(Func3(MakeTestError()));
+
+    BOOST_CHECK(!res.IsReady());
+
+    BOOST_CHECKPOINT("Waiting with timeout");
+    res.WaitFor(100);
+
+    BOOST_CHECK(!res.IsReady());
+
+    BOOST_CHECK_EXCEPTION(res.GetValue(), IgniteError, IsTestError);
+}
+
+
 BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/29d532e8/modules/platforms/cpp/core/include/ignite/compute/compute.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/compute/compute.h b/modules/platforms/cpp/core/include/ignite/compute/compute.h
index b079569..75c8c85 100644
--- a/modules/platforms/cpp/core/include/ignite/compute/compute.h
+++ b/modules/platforms/cpp/core/include/ignite/compute/compute.h
@@ -94,7 +94,7 @@ namespace ignite
              * @tparam R Call return type. BinaryType should be specialized for
              *  the type if it is not primitive. Should not be void. For
              *  non-returning methods see Compute::Run().
-             * @tparam F Compute function type. Should implement ComputeFunc
+             * @tparam F Compute function type. Should implement ComputeFunc<R>
              *  class.
              * @param func Compute function to call.
              * @return Computation result.
@@ -113,7 +113,7 @@ namespace ignite
              * @tparam R Call return type. BinaryType should be specialized for
              *  the type if it is not primitive. Should not be void. For
              *  non-returning methods see Compute::Run().
-             * @tparam F Compute function type. Should implement ComputeFunc
+             * @tparam F Compute function type. Should implement ComputeFunc<R>
              *  class.
              * @param func Compute function to call.
              * @return Future that can be used to access computation result once
@@ -126,6 +126,37 @@ namespace ignite
                 return impl.Get()->CallAsync<R, F>(func);
             }
 
+            /**
+             * Runs provided ComputeFunc on a node within the underlying cluster
+             * group.
+             *
+             * @tparam F Compute function type. Should implement ComputeFunc<void>
+             *  class.
+             * @param action Compute function to call.
+             * @throw IgniteError in case of error.
+             */
+            template<typename F>
+            void Run(const F& action)
+            {
+                return impl.Get()->RunAsync<F>(action).GetValue();
+            }
+
+            /**
+             * Asyncronuously runs provided ComputeFunc on a node within the
+             * underlying cluster group.
+             *
+             * @tparam F Compute function type. Should implement ComputeFunc<void>
+             *  class.
+             * @param action Compute function to call.
+             * @return Future that can be used to wait for action to complete.
+             * @throw IgniteError in case of error.
+             */
+            template<typename F>
+            Future<void> RunAsync(const F& action)
+            {
+                return impl.Get()->RunAsync<F>(action);
+            }
+
         private:
             /** Implementation. */
             common::concurrent::SharedPointer<impl::compute::ComputeImpl> impl;

http://git-wip-us.apache.org/repos/asf/ignite/blob/29d532e8/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h
index 389c571..63f9a46 100644
--- a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h
+++ b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_impl.h
@@ -108,6 +108,48 @@ namespace ignite
                     return promise.GetFuture();
                 }
 
+                /**
+                 * Asyncronuously runs provided ComputeFunc on a node within
+                 * the underlying cluster group.
+                 *
+                 * @tparam F Compute action type. Should implement ComputeAction
+                 *  class.
+                 * @param action Compute action to call.
+                 * @return Future that can be used to wait for action to complete.
+                 * @throw IgniteError in case of error.
+                 */
+                template<typename F>
+                Future<void> RunAsync(const F& action)
+                {
+                    common::concurrent::SharedPointer<interop::InteropMemory> mem = GetEnvironment().AllocateMemory();
+                    interop::InteropOutputStream out(mem.Get());
+                    binary::BinaryWriterImpl writer(&out, GetEnvironment().GetTypeManager());
+
+                    common::concurrent::SharedPointer<ComputeJobHolder> job(new ComputeJobHolderImpl<F, void>(action));
+
+                    int64_t jobHandle = GetEnvironment().GetHandleRegistry().Allocate(job);
+
+                    ComputeTaskHolderImpl<F, void>* taskPtr = new ComputeTaskHolderImpl<F, void>(jobHandle);
+                    common::concurrent::SharedPointer<ComputeTaskHolder> task(taskPtr);
+
+                    int64_t taskHandle = GetEnvironment().GetHandleRegistry().Allocate(task);
+
+                    writer.WriteInt64(taskHandle);
+                    writer.WriteInt32(1);
+                    writer.WriteInt64(jobHandle);
+                    writer.WriteObject<F>(action);
+
+                    out.Synchronize();
+
+                    jobject target = InStreamOutObject(Operation::Unicast, *mem.Get());
+                    std::auto_ptr<common::Cancelable> cancelable(new CancelableImpl(GetEnvironmentPointer(), target));
+
+                    common::Promise<void>& promise = taskPtr->GetPromise();
+                    promise.SetCancelTarget(cancelable);
+
+                    return promise.GetFuture();
+                }
+
             private:
                 IGNITE_NO_COPY_ASSIGNMENT(ComputeImpl);
             };

http://git-wip-us.apache.org/repos/asf/ignite/blob/29d532e8/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_holder.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_holder.h b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_holder.h
index e218e36..9f35a11 100644
--- a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_holder.h
+++ b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_holder.h
@@ -132,6 +132,79 @@ namespace ignite
                 /** Job. */
                 JobType job;
             };
+
+            /**
+             * Compute job holder. Internal class.
+             * Specialisation for void return type
+             *
+             * @tparam F Actual job type.
+             */
+            template<typename F>
+            class ComputeJobHolderImpl<F, void> : public ComputeJobHolder
+            {
+            public:
+                typedef F JobType;
+
+                /**
+                 * Constructor.
+                 *
+                 * @param job Job.
+                 */
+                ComputeJobHolderImpl(JobType job) :
+                    job(job)
+                {
+                    // No-op.
+                }
+
+                /**
+                 * Destructor.
+                 */
+                virtual ~ComputeJobHolderImpl()
+                {
+                    // No-op.
+                }
+
+                const ComputeJobResult<void>& GetResult()
+                {
+                    return res;
+                }
+
+                virtual void ExecuteLocal()
+                {
+                    try
+                    {
+                        job.Call();
+                        res.SetResult();
+                    }
+                    catch (const IgniteError& err)
+                    {
+                        res.SetError(err);
+                    }
+                    catch (const std::exception& err)
+                    {
+                        res.SetError(IgniteError(IgniteError::IGNITE_ERR_STD, err.what()));
+                    }
+                    catch (...)
+                    {
+                        res.SetError(IgniteError(IgniteError::IGNITE_ERR_UNKNOWN,
+                            "Unknown error occurred during call."));
+                    }
+                }
+
+                virtual void ExecuteRemote(binary::BinaryWriterImpl& writer)
+                {
+                    ExecuteLocal();
+
+                    res.Write(writer);
+                }
+
+            private:
+                /** Result. */
+                ComputeJobResult<void> res;
+
+                /** Job. */
+                JobType job;
+            };
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/29d532e8/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_result.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_result.h b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_result.h
index 5bcb762..0874522 100644
--- a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_result.h
+++ b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_job_result.h
@@ -27,6 +27,8 @@
 #include <sstream>
 
 #include <ignite/common/promise.h>
+#include <ignite/impl/binary/binary_reader_impl.h>
+#include <ignite/impl/binary/binary_writer_impl.h>
 
 namespace ignite
 {
@@ -154,6 +156,116 @@ namespace ignite
                 /** Erorr. */
                 IgniteError err;
             };
+
+            /**
+             * Used to hold compute job result.
+             */
+            template<>
+            class ComputeJobResult<void>
+            {
+            public:
+                /**
+                 * Default constructor.
+                 */
+                ComputeJobResult() :
+                    err()
+                {
+                    // No-op.
+                }
+
+                /**
+                 * Mark as complete.
+                 */
+                void SetResult()
+                {
+                    err = IgniteError();
+                }
+
+                /**
+                 * Set error.
+                 *
+                 * @param error Error to set.
+                 */
+                void SetError(const IgniteError error)
+                {
+                    err = error;
+                }
+
+                /**
+                 * Set promise to a state which corresponds to result.
+                 *
+                 * @param promise Promise, which state to set.
+                 */
+                void SetPromise(common::Promise<void>& promise)
+                {
+                    if (err.GetCode() != IgniteError::IGNITE_SUCCESS)
+                        promise.SetError(err);
+                    else
+                        promise.SetValue();
+                }
+
+                /**
+                 * Write using writer.
+                 *
+                 * @param writer Writer.
+                 */
+                void Write(binary::BinaryWriterImpl& writer)
+                {
+                    if (err.GetCode() != IgniteError::IGNITE_SUCCESS)
+                    {
+                        // Fail
+                        writer.WriteBool(false);
+
+                        // Native Exception
+                        writer.WriteBool(true);
+
+                        writer.WriteObject<IgniteError>(err);
+                    }
+                    else
+                    {
+                        // Success
+                        writer.WriteBool(true);
+
+                        writer.WriteNull();
+                    }
+                }
+
+                /**
+                 * Read using reader.
+                 *
+                 * @param reader Reader.
+                 */
+                void Read(binary::BinaryReaderImpl& reader)
+                {
+                    bool success = reader.ReadBool();
+
+                    if (success)
+                        err = IgniteError();
+                    else
+                    {
+                        bool native = reader.ReadBool();
+
+                        if (native)
+                            err = reader.ReadObject<IgniteError>();
+                        else
+                        {
+                            std::stringstream buf;
+
+                            buf << reader.ReadObject<std::string>() << " : ";
+                            buf << reader.ReadObject<std::string>() << ", ";
+                            buf << reader.ReadObject<std::string>();
+
+                            std::string msg = buf.str();
+
+                            err = IgniteError(IgniteError::IGNITE_ERR_GENERIC, msg.c_str());
+                        }
+                    }
+                }
+
+            private:
+                /** Erorr. */
+                IgniteError err;
+            };
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/29d532e8/modules/platforms/cpp/core/include/ignite/impl/compute/compute_task_holder.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_task_holder.h b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_task_holder.h
index bdd7513..f627f27 100644
--- a/modules/platforms/cpp/core/include/ignite/impl/compute/compute_task_holder.h
+++ b/modules/platforms/cpp/core/include/ignite/impl/compute/compute_task_holder.h
@@ -206,6 +206,91 @@ namespace ignite
                 /** Task result promise. */
                 common::Promise<ResultType> promise;
             };
+
+            /**
+             * Compute task holder type-specific implementation.
+             */
+            template<typename F>
+            class ComputeTaskHolderImpl<F, void> : public ComputeTaskHolder
+            {
+            public:
+                typedef F JobType;
+
+                /**
+                 * Constructor.
+                 *
+                 * @param handle Job handle.
+                 */
+                ComputeTaskHolderImpl(int64_t handle) :
+                    ComputeTaskHolder(handle)
+                {
+                    // No-op.
+                }
+
+                /**
+                 * Destructor.
+                 */
+                virtual ~ComputeTaskHolderImpl()
+                {
+                    // No-op.
+                }
+
+                /**
+                 * Process local job result.
+                 *
+                 * @param job Job.
+                 * @return Policy.
+                 */
+                virtual int32_t JobResultLocal(ComputeJobHolder& job)
+                {
+                    typedef ComputeJobHolderImpl<JobType, void> ActualComputeJobHolder;
+
+                    ActualComputeJobHolder& job0 = static_cast<ActualComputeJobHolder&>(job);
+
+                    res = job0.GetResult();
+
+                    return ComputeJobResultPolicy::WAIT;
+                }
+
+                /**
+                 * Process remote job result.
+                 *
+                 * @param job Job.
+                 * @param reader Reader for stream with result.
+                 * @return Policy.
+                 */
+                virtual int32_t JobResultRemote(ComputeJobHolder& job, binary::BinaryReaderImpl& reader)
+                {
+                    res.Read(reader);
+
+                    return ComputeJobResultPolicy::WAIT;
+                }
+
+                /**
+                 * Reduce results of related jobs.
+                 */
+                virtual void Reduce()
+                {
+                    res.SetPromise(promise);
+                }
+
+                /**
+                 * Get result promise.
+                 *
+                 * @return Reference to result promise.
+                 */
+                common::Promise<void>& GetPromise()
+                {
+                    return promise;
+                }
+
+            private:
+                /** Result. */
+                ComputeJobResult<void> res;
+
+                /** Task result promise. */
+                common::Promise<void> promise;
+            };
         }
     }
 }


[08/46] ignite git commit: Added page type check when saving cache metadata (backport of d38fd8d6)

Posted by vo...@apache.org.
Added page type check when saving cache metadata (backport of d38fd8d6)


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/54084f56
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/54084f56
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/54084f56

Branch: refs/heads/ignite-2.1
Commit: 54084f566dc642afac88f48a5efc3319d70e46fb
Parents: ace8029
Author: Ivan Rakov <iv...@gmail.com>
Authored: Tue Jul 4 18:01:09 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Tue Jul 4 18:01:09 2017 +0300

----------------------------------------------------------------------
 .../cache/persistence/GridCacheOffheapManager.java        | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/54084f56/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index ed008be..0bb2250 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -314,9 +314,11 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
                                     long metaPageAddr = pageMem.writeLock(grpId, metaPageId, metaPage);
 
                                     try {
-                                        long nextSnapshotTag = io.getNextSnapshotTag(metaPageAddr);
+                                        PageMetaIO metaIo = PageMetaIO.getPageIO(metaPageAddr);
 
-                                        io.setNextSnapshotTag(metaPageAddr, nextSnapshotTag + 1);
+                                        long nextSnapshotTag = metaIo.getNextSnapshotTag(metaPageAddr);
+
+                                        metaIo.setNextSnapshotTag(metaPageAddr, nextSnapshotTag + 1);
 
                                         if (log != null && log.isDebugEnabled())
                                             log.debug("Save next snapshot before checkpoint start for grId = " + grpId
@@ -328,7 +330,7 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
                                                 nextSnapshotTag + 1));
 
                                         if (state == GridDhtPartitionState.OWNING)
-                                            addPartition(ctx.partitionStatMap(), metaPageAddr, io, grpId, PageIdAllocator.INDEX_PARTITION,
+                                            addPartition(ctx.partitionStatMap(), metaPageAddr, metaIo, grpId, PageIdAllocator.INDEX_PARTITION,
                                                     this.ctx.kernalContext().cache().context().pageStore().pages(grpId, PageIdAllocator.INDEX_PARTITION));
                                     }
                                     finally {
@@ -407,7 +409,7 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
     private static void addPartition(
         Map<T2<Integer, Integer>, T2<Integer, Integer>> map,
         long pageAddr,
-        PagePartitionMetaIO io,
+        PageMetaIO io,
         int cacheId,
         int partition,
         int pages


[25/46] ignite git commit: Fixed missing SUID.

Posted by vo...@apache.org.
Fixed missing SUID.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/dd30e584
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/dd30e584
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/dd30e584

Branch: refs/heads/ignite-2.1
Commit: dd30e584afd841f0fa0923cefbe49bee2fa1ede1
Parents: 09dff9b
Author: devozerov <vo...@gridgain.com>
Authored: Wed Jul 5 22:07:04 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Wed Jul 5 22:07:04 2017 +0300

----------------------------------------------------------------------
 .../internal/pagemem/snapshot/SnapshotCheckParameters.java       | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/dd30e584/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java
index e95e79d..58cb240 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java
@@ -14,6 +14,7 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
+
 package org.apache.ignite.internal.pagemem.snapshot;
 
 import java.io.File;
@@ -25,6 +26,9 @@ import org.jetbrains.annotations.Nullable;
  * Tuple for passing optional parameters of {@link SnapshotOperationType#CHECK}.
  */
 public class SnapshotCheckParameters implements Serializable {
+    /** */
+    private static final long serialVersionUID = 0L;
+
     /** Optional paths. */
     private final Collection<File> optionalPaths;
 


[10/46] ignite git commit: Merge branch 'ignite-2.1' into ignite-2.1.2-merge-ea11

Posted by vo...@apache.org.
Merge branch 'ignite-2.1' into ignite-2.1.2-merge-ea11

# Conflicts:
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b223076c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b223076c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b223076c

Branch: refs/heads/ignite-2.1
Commit: b223076c4b5d09fadfd160f2d6db9210334fe90b
Parents: 54084f5 ee7566b
Author: Ivan Rakov <iv...@gmail.com>
Authored: Tue Jul 4 20:23:05 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Tue Jul 4 20:23:05 2017 +0300

----------------------------------------------------------------------
 .../jdbc2/JdbcPreparedStatementSelfTest.java    |  35 ++
 .../jdbc/JdbcPreparedStatementSelfTest.java     |  35 ++
 .../thin/JdbcThinPreparedStatementSelfTest.java |  35 ++
 .../apache/ignite/internal/IgniteKernal.java    |  11 +-
 .../internal/jdbc/JdbcPreparedStatement.java    |   6 +-
 .../jdbc/thin/JdbcThinPreparedStatement.java    |   2 -
 .../internal/jdbc2/JdbcPreparedStatement.java   |  12 +-
 .../checkpoint/GridCheckpointManager.java       |   2 +-
 .../managers/communication/GridIoManager.java   |  10 +-
 .../communication/GridMessageListener.java      |   3 +-
 .../deployment/GridDeploymentCommunication.java |   4 +-
 .../eventstorage/GridEventStorageManager.java   |   4 +-
 .../affinity/GridAffinityAssignmentCache.java   |   8 +-
 .../cache/CacheAffinitySharedManager.java       |  26 +-
 .../processors/cache/ClusterCachesInfo.java     |  16 +-
 .../cache/DynamicCacheChangeRequest.java        |   1 +
 .../processors/cache/ExchangeActions.java       | 109 ++++-
 .../processors/cache/GridCacheAdapter.java      |   4 +
 .../processors/cache/GridCacheIoManager.java    |  85 ++--
 .../GridCachePartitionExchangeManager.java      |  49 ++-
 .../processors/cache/GridCacheProcessor.java    |  83 ++--
 .../cache/binary/BinaryMetadataTransport.java   |   4 +-
 .../dht/GridClientPartitionTopology.java        |   5 +-
 .../dht/GridDhtPartitionTopologyImpl.java       |  13 +-
 .../dht/preloader/GridDhtPartitionMap.java      |  13 +-
 .../GridDhtPartitionsExchangeFuture.java        |  13 +-
 .../distributed/near/GridNearCacheAdapter.java  |   4 +-
 .../GridCacheDatabaseSharedManager.java         |   6 +-
 .../persistence/IgniteCacheSnapshotManager.java |   8 +
 .../persistence/tree/io/TrackingPageIO.java     |  12 +-
 .../wal/FileWriteAheadLogManager.java           |   6 +-
 .../cache/transactions/IgniteTxManager.java     |   2 +-
 .../processors/cluster/ClusterProcessor.java    |   2 +-
 .../cluster/GridClusterStateProcessor.java      |   7 -
 .../continuous/GridContinuousProcessor.java     |   4 +-
 .../datastreamer/DataStreamProcessor.java       |   2 +-
 .../datastreamer/DataStreamerImpl.java          |   2 +-
 .../GridCacheAtomicSequenceImpl.java            |  52 ++-
 .../processors/igfs/IgfsDataManager.java        |   2 +-
 .../igfs/IgfsFragmentizerManager.java           |   4 +-
 .../processors/job/GridJobProcessor.java        |   8 +-
 .../GridMarshallerMappingProcessor.java         |   4 +-
 .../utils/PlatformConfigurationUtils.java       |   8 +-
 .../processors/query/GridQueryProcessor.java    |   2 +-
 .../handlers/task/GridTaskCommandHandler.java   |   4 +-
 .../processors/task/GridTaskProcessor.java      |   6 +-
 .../internal/util/GridPartitionStateMap.java    |  60 ++-
 .../visor/cache/VisorCacheConfiguration.java    |  11 +-
 .../visor/node/VisorBasicConfiguration.java     |   2 +-
 .../node/VisorMemoryPolicyConfiguration.java    |   2 +-
 .../visor/node/VisorNodeDataCollectorJob.java   |  32 +-
 .../node/VisorNodeDataCollectorJobResult.java   |  73 +++-
 .../visor/node/VisorNodeDataCollectorTask.java  |  14 +-
 .../node/VisorNodeDataCollectorTaskResult.java  |  28 +-
 .../visor/node/VisorPersistenceMetrics.java     | 214 +++++++++
 .../visor/service/VisorServiceTask.java         |  10 +-
 .../jobstealing/JobStealingCollisionSpi.java    |   2 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |   5 +
 .../messages/TcpDiscoveryAbstractMessage.java   |   8 +-
 ...idCommunicationManagerListenersSelfTest.java |   2 +-
 .../GridCommunicationSendMessageSelfTest.java   |   2 +-
 .../cache/GridCachePartitionedGetSelfTest.java  |   2 +-
 ...lerCacheClientRequestsMappingOnMissTest.java |   6 +-
 ...naryObjectMetadataExchangeMultinodeTest.java |   6 +-
 ...titionedAtomicSequenceMultiThreadedTest.java |  32 ++
 .../CacheLateAffinityAssignmentTest.java        |  81 +++-
 .../near/GridCacheNearEvictionSelfTest.java     |   5 +-
 .../near/GridCacheNearMetricsSelfTest.java      |  29 +-
 .../GridCachePartitionedNodeRestartTest.java    |   5 -
 ...DeadlockDetectionMessageMarshallingTest.java |   2 +-
 .../communication/GridIoManagerBenchmark.java   |   4 +-
 .../communication/GridIoManagerBenchmark0.java  |  12 +-
 .../communication/GridCacheMessageSelfTest.java |   2 +-
 .../testframework/GridSpiTestContext.java       |   5 +-
 .../testsuites/IgniteUtilSelfTestSuite.java     |   3 +
 .../ignite/util/GridPartitionMapSelfTest.java   | 162 +++++++
 .../hadoop/shuffle/HadoopShuffle.java           |   2 +-
 .../query/h2/opt/GridH2IndexBase.java           |   2 +-
 .../query/h2/twostep/GridMapQueryExecutor.java  |   2 +-
 .../h2/twostep/GridReduceQueryExecutor.java     |   2 +-
 .../Cache/CacheConfigurationTest.cs             |  21 +
 .../Cache/Configuration/CacheConfiguration.cs   |  75 +++-
 .../Apache.Ignite.Core/IgniteConfiguration.cs   |   7 +-
 .../Apache.Ignite.Core/Impl/IgniteUtils.cs      |  12 +-
 modules/web-console/frontend/.eslintrc          |   2 +-
 modules/web-console/frontend/app/app.js         |   4 +
 .../app/components/bs-select-menu/style.scss    |   1 +
 .../grid-column-selector/component.js           |  29 ++
 .../grid-column-selector/controller.js          | 111 +++++
 .../grid-column-selector/controller.spec.js     | 435 +++++++++++++++++++
 .../components/grid-column-selector/index.js    |  24 +
 .../components/grid-column-selector/style.scss  |  24 +
 .../grid-column-selector/template.pug           |  28 ++
 .../list-of-registered-users.categories.js      |  22 +-
 .../list-of-registered-users.column-defs.js     |   4 +-
 .../list-of-registered-users.controller.js      |  46 --
 .../list-of-registered-users.scss               |   3 +
 .../list-of-registered-users.tpl.pug            |  26 +-
 .../components/pcbProtectFromBsSelectRender.js  |  32 --
 .../components/page-configure-basic/index.js    |   2 -
 .../page-configure-basic/template.pug           |   4 +-
 .../protect-from-bs-select-render/directive.js  |  32 ++
 .../protect-from-bs-select-render/index.js      |  24 +
 .../frontend/app/filters/duration.filter.js     |   2 +-
 .../helpers/jade/form/form-field-checkbox.pug   |   2 +-
 .../frontend/app/helpers/jade/mixins.pug        |   1 -
 .../generator/ConfigurationGenerator.js         |   9 +-
 .../frontend/app/modules/sql/sql.controller.js  |  21 +-
 .../states/configuration/caches/affinity.pug    |  18 +-
 .../states/configuration/caches/general.pug     |  50 +--
 .../frontend/app/primitives/btn/index.scss      |   8 +-
 .../frontend/app/primitives/dropdown/index.pug  |   2 +-
 .../frontend/app/primitives/tooltip/index.pug   |   5 +-
 .../app/primitives/ui-grid-settings/index.pug   |  33 --
 .../frontend/public/stylesheets/style.scss      |  17 +
 .../web-console/frontend/views/sql/sql.tpl.pug  |   6 +-
 116 files changed, 2149 insertions(+), 555 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b223076c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index cbbfca0,0f859eb..f4524ef
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@@ -2114,32 -2119,24 +2119,27 @@@ public class GridCacheProcessor extend
      ) {
          initCacheProxies(topVer, err);
  
-         if (exchActions != null && exchActions.systemCachesStarting() && exchActions.newClusterState() == null) {
+         if (exchActions == null)
+             return;
+ 
 -        if (exchActions.systemCachesStarting() && exchActions.newClusterState() == null)
++        if (exchActions.systemCachesStarting() && exchActions.newClusterState() == null) {
              ctx.dataStructures().restoreStructuresState(ctx);
  
 +            ctx.service().updateUtilityCache();
 +        }
 +
-         if (exchActions != null && err == null) {
-             Collection<IgniteBiTuple<CacheGroupContext, Boolean>> stoppedGrps = null;
- 
-             boolean forceCheckpoint = false;
- 
-             for (ExchangeActions.ActionData action : exchActions.cacheStopRequests()) {
-                 GridCacheContext<?, ?> stopCtx;
-                 boolean destroy;
- 
-                 if (!forceCheckpoint){
-                     try {
-                         sharedCtx.database().waitForCheckpoint("caches stop");
-                     }
-                     catch (IgniteCheckedException e) {
-                         U.error(log, "Failed to wait for checkpoint finish during cache stop.", e);
-                     }
- 
-                     forceCheckpoint = true;
+         if (err == null) {
+             // Force checkpoint if there is any cache stop request
+             if (exchActions.cacheStopRequests().size() > 0) {
+                 try {
+                     sharedCtx.database().waitForCheckpoint("caches stop");
+                 }
+                 catch (IgniteCheckedException e) {
+                     U.error(log, "Failed to wait for checkpoint finish during cache stop.", e);
                  }
+             }
  
+             for (ExchangeActions.ActionData action : exchActions.cacheStopRequests()) {
                  stopGateway(action.request());
  
                  sharedCtx.database().checkpointReadLock();

http://git-wip-us.apache.org/repos/asf/ignite/blob/b223076c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/b223076c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
----------------------------------------------------------------------


[22/46] ignite git commit: IGNITE-5604 - Expand WAL iterator buffer if record size is greater than current buffer size - Fixes #2244.

Posted by vo...@apache.org.
IGNITE-5604 - Expand WAL iterator buffer if record size is greater than current buffer size - Fixes #2244.

Signed-off-by: Alexey Goncharuk <al...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/69357c5d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/69357c5d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/69357c5d

Branch: refs/heads/ignite-2.1
Commit: 69357c5d8be431aa51fc3add9e345807fe984fee
Parents: 905e34d
Author: Dmitriy Govorukhin <dm...@gmail.com>
Authored: Wed Jul 5 19:24:47 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Jul 5 19:24:47 2017 +0300

----------------------------------------------------------------------
 .../rendezvous/RendezvousAffinityFunction.java  |   4 -
 .../wal/AbstractWalRecordsIterator.java         |  14 ++-
 .../persistence/wal/ByteBufferExpander.java     |  47 +++++++++
 .../cache/persistence/wal/FileInput.java        |  20 +++-
 .../wal/FileWriteAheadLogManager.java           |   2 +-
 .../db/wal/IgniteWalRecoveryTest.java           | 100 ++++++++++++++-----
 6 files changed, 146 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/69357c5d/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
index 1bd0587..0fb20ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
@@ -17,10 +17,6 @@
 
 package org.apache.ignite.cache.affinity.rendezvous;
 
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;

http://git-wip-us.apache.org/repos/asf/ignite/blob/69357c5d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalRecordsIterator.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalRecordsIterator.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalRecordsIterator.java
index 7dc0a28..f4bace1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalRecordsIterator.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/AbstractWalRecordsIterator.java
@@ -22,7 +22,6 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.channels.FileChannel;
 import org.apache.ignite.IgniteCheckedException;
@@ -41,8 +40,8 @@ import org.jetbrains.annotations.Nullable;
  * Iterator over WAL segments. This abstract class provides most functionality for reading records in log.
  * Subclasses are to override segment switching functionality
  */
-public abstract class AbstractWalRecordsIterator extends GridCloseableIteratorAdapter<IgniteBiTuple<WALPointer, WALRecord>>
-    implements WALIterator {
+public abstract class AbstractWalRecordsIterator
+    extends GridCloseableIteratorAdapter<IgniteBiTuple<WALPointer, WALRecord>> implements WALIterator {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -73,7 +72,7 @@ public abstract class AbstractWalRecordsIterator extends GridCloseableIteratorAd
     @NotNull private final RecordSerializer serializer;
 
     /** Utility buffer for reading records */
-    private final ByteBuffer buf;
+    private final ByteBufferExpander buf;
 
     /**
      * @param log Logger
@@ -85,15 +84,14 @@ public abstract class AbstractWalRecordsIterator extends GridCloseableIteratorAd
         @NotNull final IgniteLogger log,
         @NotNull final GridCacheSharedContext sharedCtx,
         @NotNull final RecordSerializer serializer,
-        final int bufSize) {
+        final int bufSize
+    ) {
         this.log = log;
         this.sharedCtx = sharedCtx;
         this.serializer = serializer;
 
         // Do not allocate direct buffer for iterator.
-        buf = ByteBuffer.allocate(bufSize);
-        buf.order(ByteOrder.nativeOrder());
-
+        buf = new ByteBufferExpander(bufSize, ByteOrder.nativeOrder());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/69357c5d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java
new file mode 100644
index 0000000..75d3a98
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java
@@ -0,0 +1,47 @@
+package org.apache.ignite.internal.processors.cache.persistence.wal;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+/**
+ * ByteBuffer wrapper for dynamically expand buffer size.
+ */
+public class ByteBufferExpander {
+    /** Byte buffer */
+    private ByteBuffer buf;
+
+    public ByteBufferExpander(int initSize, ByteOrder order) {
+        ByteBuffer buffer = ByteBuffer.allocate(initSize);
+        buffer.order(order);
+
+        this.buf = buffer;
+    }
+
+    /**
+     * Current byte buffer.
+     *
+     * @return Current byteBuffer.
+     */
+    public ByteBuffer buffer() {
+        return buf;
+    }
+
+    /**
+     * Expands current byte buffer to the requested size.
+     *
+     * @return ByteBuffer with requested size.
+     */
+    public ByteBuffer expand(int size) {
+        ByteBuffer newBuf = ByteBuffer.allocate(size);
+
+        newBuf.order(buf.order());
+
+        newBuf.put(buf);
+
+        newBuf.flip();
+
+        buf = newBuf;
+
+        return newBuf;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/69357c5d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileInput.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileInput.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileInput.java
index e2d7cba..00c7c02 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileInput.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileInput.java
@@ -42,6 +42,9 @@ public final class FileInput implements ByteBufferBackedDataInput {
     /** */
     private long pos;
 
+    /** */
+    private ByteBufferExpander expBuf;
+
     /**
      * @param ch  Channel to read from
      * @param buf Buffer for reading blocks of data into
@@ -58,6 +61,16 @@ public final class FileInput implements ByteBufferBackedDataInput {
     }
 
     /**
+     * @param ch Channel to read from
+     * @param expBuf ByteBufferWrapper with ability expand buffer dynamically.
+     */
+    public FileInput(FileChannel ch, ByteBufferExpander expBuf) throws IOException {
+        this(ch, expBuf.buffer());
+
+        this.expBuf = expBuf;
+    }
+
+    /**
      * Clear buffer.
      */
     private void clearBuffer() {
@@ -96,8 +109,11 @@ public final class FileInput implements ByteBufferBackedDataInput {
         if (available >= requested)
             return;
 
-        if (buf.capacity() < requested)
-            throw new IOException("Requested size is greater than buffer: " + requested);
+        if (buf.capacity() < requested) {
+            buf = expBuf.expand(requested);
+
+            assert available == buf.remaining();
+        }
 
         buf.compact();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/69357c5d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
index 8993112..162f43d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
@@ -2327,7 +2327,7 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl
             super(log,
                 cctx,
                 serializer,
-                Math.min(16 * tlbSize, psCfg.getWalRecordIteratorBufferSize()));
+                psCfg.getWalRecordIteratorBufferSize());
             this.walWorkDir = walWorkDir;
             this.walArchiveDir = walArchiveDir;
             this.psCfg = psCfg;

http://git-wip-us.apache.org/repos/asf/ignite/blob/69357c5d/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
index 6b4907c..843fb5b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
@@ -136,6 +136,8 @@ public class IgniteWalRecoveryTest extends GridCommonAbstractTest {
 
         PersistentStoreConfiguration pCfg = new PersistentStoreConfiguration();
 
+        pCfg.setWalRecordIteratorBufferSize(1024 * 1024);
+
         if (logOnly)
             pCfg.setWalMode(WALMode.LOG_ONLY);
 
@@ -180,46 +182,79 @@ public class IgniteWalRecoveryTest extends GridCommonAbstractTest {
      * @throws Exception if failed.
      */
     public void testWalBig() throws Exception {
-        try {
-            IgniteEx ignite = startGrid(1);
+        IgniteEx ignite = startGrid(1);
 
-            ignite.active(true);
+        ignite.active(true);
 
-            IgniteCache<Object, Object> cache = ignite.cache("partitioned");
+        IgniteCache<Object, Object> cache = ignite.cache("partitioned");
 
-            Random rnd = new Random();
+        Random rnd = new Random();
 
-            Map<Integer, IndexedObject> map = new HashMap<>();
+        Map<Integer, IndexedObject> map = new HashMap<>();
 
-            for (int i = 0; i < 10_000; i++) {
-                if (i % 1000 == 0)
-                    X.println(" >> " + i);
+        for (int i = 0; i < 10_000; i++) {
+            if (i % 1000 == 0)
+                X.println(" >> " + i);
 
-                int k = rnd.nextInt(300_000);
-                IndexedObject v = new IndexedObject(rnd.nextInt(10_000));
+            int k = rnd.nextInt(300_000);
+            IndexedObject v = new IndexedObject(rnd.nextInt(10_000));
 
-                cache.put(k, v);
-                map.put(k, v);
-            }
+            cache.put(k, v);
+            map.put(k, v);
+        }
 
-            // Check.
-            for (Integer k : map.keySet())
-                assertEquals(map.get(k), cache.get(k));
+        // Check.
+        for (Integer k : map.keySet())
+            assertEquals(map.get(k), cache.get(k));
 
-            stopGrid(1);
+        stopGrid(1);
 
-            ignite = startGrid(1);
+        ignite = startGrid(1);
 
-            ignite.active(true);
+        ignite.active(true);
 
-            cache = ignite.cache("partitioned");
+        cache = ignite.cache("partitioned");
 
-            // Check.
-            for (Integer k : map.keySet())
-                assertEquals(map.get(k), cache.get(k));
+        // Check.
+        for (Integer k : map.keySet())
+            assertEquals(map.get(k), cache.get(k));
+    }
+
+    /**
+     * @throws Exception if failed.
+     */
+    public void testWalBigObjectNodeCancel() throws Exception {
+        final int MAX_SIZE_POWER = 21;
+
+        IgniteEx ignite = startGrid(1);
+
+        ignite.active(true);
+
+        IgniteCache<Object, Object> cache = ignite.cache("partitioned");
+
+        for (int i = 0; i < MAX_SIZE_POWER; ++i) {
+            int size = 1 << i;
+
+            cache.put("key_" + i, createTestData(size));
         }
-        finally {
-            stopAllGrids();
+
+        stopGrid(1, true);
+
+        ignite = startGrid(1);
+
+        ignite.active(true);
+
+        cache = ignite.cache("partitioned");
+
+        // Check.
+        for (int i = 0; i < MAX_SIZE_POWER; ++i) {
+            int size = 1 << i;
+
+            int[] data = createTestData(size);
+
+            int[] val = (int[])cache.get("key_" + i);
+
+            assertTrue("Invalid data. [key=key_" + i + ']', Arrays.equals(data, val));
         }
     }
 
@@ -977,6 +1012,19 @@ public class IgniteWalRecoveryTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @param size Size of data.
+     * @return Test data.
+     */
+    private int[] createTestData(int size) {
+        int[] data = new int[size];
+
+        for (int d = 0; d < size; ++d)
+            data[d] = d;
+
+        return data;
+    }
+
+    /**
      *
      */
     private static class LoadRunnable implements IgniteRunnable {


[27/46] ignite git commit: IGNITE-5401 Fix in MarshallerConextImpl. This closes #2205.

Posted by vo...@apache.org.
IGNITE-5401 Fix in MarshallerConextImpl. This closes #2205.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/740b0b2b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/740b0b2b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/740b0b2b

Branch: refs/heads/ignite-2.1
Commit: 740b0b2bdb37154857363c1d94ec88d867bd8b65
Parents: 907d4a8
Author: Sergey Chugunov <se...@gmail.com>
Authored: Thu Jul 6 12:20:55 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Jul 6 12:20:55 2017 +0300

----------------------------------------------------------------------
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java |  12 +
 .../jdbc2/JdbcDynamicIndexAbstractSelfTest.java |   2 -
 .../JdbcThinDynamicIndexAbstractSelfTest.java   |   2 -
 .../ignite/internal/MarshallerContextImpl.java  |  10 +-
 .../GridMarshallerMappingProcessor.java         |  16 +-
 ...iteMarshallerCacheClassNameConflictTest.java |  11 +-
 .../IgniteMarshallerCacheFSRestoreTest.java     | 217 +++++++++++++++++++
 .../ignite/testsuites/IgniteBasicTestSuite.java |   2 +
 8 files changed, 248 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
index a001eb3..f220b47 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 import static org.apache.ignite.IgniteJdbcDriver.CFG_URL_PREFIX;
@@ -139,6 +140,17 @@ public abstract class JdbcAbstractDmlStatementSelfTest extends GridCommonAbstrac
 
         conn.close();
         assertTrue(conn.isClosed());
+
+        cleanUpWorkingDir();
+    }
+
+    /**
+     * Clean up working directory.
+     */
+    private void cleanUpWorkingDir() throws Exception {
+        String workDir = U.defaultWorkDirectory();
+
+        deleteRecursively(U.resolveWorkDirectory(workDir, "marshaller", false));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcDynamicIndexAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcDynamicIndexAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcDynamicIndexAbstractSelfTest.java
index d4da1f3..7bbda6f 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcDynamicIndexAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcDynamicIndexAbstractSelfTest.java
@@ -242,8 +242,6 @@ public abstract class JdbcDynamicIndexAbstractSelfTest extends JdbcAbstractDmlSt
      * Test that changes in cache affect index, and vice versa.
      */
     public void testIndexState() throws SQLException {
-        fail("https://issues.apache.org/jira/browse/IGNITE-5373");
-
         IgniteCache<String, Person> cache = cache();
 
         assertSize(3);

http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinDynamicIndexAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinDynamicIndexAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinDynamicIndexAbstractSelfTest.java
index 7404ebd..3f762fc 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinDynamicIndexAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinDynamicIndexAbstractSelfTest.java
@@ -254,8 +254,6 @@ public abstract class JdbcThinDynamicIndexAbstractSelfTest extends JdbcThinAbstr
      * @throws SQLException If failed.
      */
     public void testIndexState() throws SQLException {
-        fail("https://issues.apache.org/jira/browse/IGNITE-5373");
-
         IgniteCache<String, Person> cache = cache();
 
         assertSize(3);

http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
index cad06c3..6f15507 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
@@ -316,18 +316,14 @@ public class MarshallerContextImpl implements MarshallerContext {
      *
      * @param item type mapping to propose
      * @return null if cache doesn't contain any mappings for given (platformId, typeId) pair,
-     * previous class name otherwise.
+     * previous {@link MappedName mapped name} otherwise.
      */
-    public String onMappingProposed(MarshallerMappingItem item) {
+    public MappedName onMappingProposed(MarshallerMappingItem item) {
         ConcurrentMap<Integer, MappedName> cache = getCacheFor(item.platformId());
 
         MappedName newName = new MappedName(item.className(), false);
-        MappedName oldName;
 
-        if ((oldName = cache.putIfAbsent(item.typeId(), newName)) == null)
-            return null;
-        else
-            return oldName.className();
+        return cache.putIfAbsent(item.typeId(), newName);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/core/src/main/java/org/apache/ignite/internal/processors/marshaller/GridMarshallerMappingProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/marshaller/GridMarshallerMappingProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/marshaller/GridMarshallerMappingProcessor.java
index c23d068..df0c720 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/marshaller/GridMarshallerMappingProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/marshaller/GridMarshallerMappingProcessor.java
@@ -113,7 +113,7 @@ public class GridMarshallerMappingProcessor extends GridProcessorAdapter {
 
         marshallerCtx.onMarshallerProcessorStarted(ctx, transport);
 
-        discoMgr.setCustomEventListener(MappingProposedMessage.class, new MarshallerMappingExchangeListener());
+        discoMgr.setCustomEventListener(MappingProposedMessage.class, new MappingProposedListener());
 
         discoMgr.setCustomEventListener(MappingAcceptedMessage.class, new MappingAcceptedListener());
 
@@ -233,7 +233,7 @@ public class GridMarshallerMappingProcessor extends GridProcessorAdapter {
     /**
      *
      */
-    private final class MarshallerMappingExchangeListener implements CustomEventListener<MappingProposedMessage> {
+    private final class MappingProposedListener implements CustomEventListener<MappingProposedMessage> {
         /** {@inheritDoc} */
         @Override public void onCustomEvent(
                 AffinityTopologyVersion topVer,
@@ -246,13 +246,15 @@ public class GridMarshallerMappingProcessor extends GridProcessorAdapter {
 
                 if (!msg.inConflict()) {
                     MarshallerMappingItem item = msg.mappingItem();
-                    String conflictingName = marshallerCtx.onMappingProposed(item);
+                    MappedName existingName = marshallerCtx.onMappingProposed(item);
 
-                    if (conflictingName != null) {
-                        if (conflictingName.equals(item.className()))
+                    if (existingName != null) {
+                        String existingClsName = existingName.className();
+
+                        if (existingClsName.equals(item.className()) && !existingName.accepted())
                             msg.markDuplicated();
-                        else
-                            msg.conflictingWithClass(conflictingName);
+                        else if (!existingClsName.equals(item.className()))
+                            msg.conflictingWithClass(existingClsName);
                     }
                 }
                 else {

http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClassNameConflictTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClassNameConflictTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClassNameConflictTest.java
index c8a0e76..80d0fd1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClassNameConflictTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClassNameConflictTest.java
@@ -55,9 +55,6 @@ import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
  */
 public class IgniteMarshallerCacheClassNameConflictTest extends GridCommonAbstractTest {
     /** */
-    private static TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true);
-
-    /** */
     private volatile boolean bbClsRejected;
 
     /** */
@@ -79,7 +76,7 @@ public class IgniteMarshallerCacheClassNameConflictTest extends GridCommonAbstra
         IgniteConfiguration cfg = super.getConfiguration(gridName);
 
         TcpDiscoverySpi disco = new TestTcpDiscoverySpi();
-        disco.setIpFinder(ipFinder);
+        disco.setIpFinder(LOCAL_IP_FINDER);
 
         cfg.setDiscoverySpi(disco);
 
@@ -207,7 +204,7 @@ public class IgniteMarshallerCacheClassNameConflictTest extends GridCommonAbstra
                 DiscoveryCustomMessage customMsg = spiCustomMsg == null ? null
                         : (DiscoveryCustomMessage) U.field(spiCustomMsg, "delegate");
 
-                if (customMsg != null)
+                if (customMsg != null) {
                     //don't want to make this class public, using equality of class name instead of instanceof operator
                     if ("MappingProposedMessage".equals(customMsg.getClass().getSimpleName())) {
                         String conflClsName = U.field(customMsg, "conflictingClsName");
@@ -219,8 +216,10 @@ public class IgniteMarshallerCacheClassNameConflictTest extends GridCommonAbstra
                                 aaClsRejected = true;
                         }
                     }
+                }
 
-                delegate.onDiscovery(type, topVer, node, topSnapshot, topHist, spiCustomMsg);
+                if (delegate != null)
+                    delegate.onDiscovery(type, topVer, node, topSnapshot, topHist, spiCustomMsg);
             }
 
             /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheFSRestoreTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheFSRestoreTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheFSRestoreTest.java
new file mode 100644
index 0000000..38fa324
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheFSRestoreTest.java
@@ -0,0 +1,217 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ignite.internal.processors.cache;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+import java.util.Map;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.cache.CacheAtomicityMode;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
+import org.apache.ignite.internal.processors.marshaller.MappingProposedMessage;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.spi.discovery.DiscoverySpiCustomMessage;
+import org.apache.ignite.spi.discovery.DiscoverySpiListener;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+public class IgniteMarshallerCacheFSRestoreTest extends GridCommonAbstractTest {
+    /** */
+    private volatile boolean isDuplicateObserved = true;
+
+    /**
+     *
+     */
+    private static class SimpleValue {
+        /** */
+        private final int iF;
+
+        /** */
+        private final String sF;
+
+        /**
+         * @param iF Int field.
+         * @param sF String field.
+         */
+        SimpleValue(int iF, String sF) {
+            this.iF = iF;
+            this.sF = sF;
+        }
+    }
+
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        TcpDiscoverySpi discoSpi = new TestTcpDiscoverySpi();
+        discoSpi.setIpFinder(LOCAL_IP_FINDER);
+
+        cfg.setDiscoverySpi(discoSpi);
+
+        CacheConfiguration singleCacheConfig = new CacheConfiguration()
+            .setName(DEFAULT_CACHE_NAME)
+            .setCacheMode(CacheMode.PARTITIONED)
+            .setBackups(1)
+            .setAtomicityMode(CacheAtomicityMode.ATOMIC);
+
+        cfg.setCacheConfiguration(singleCacheConfig);
+
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        cleanUpWorkDir();
+    }
+
+    /**
+     *
+     */
+    private void cleanUpWorkDir() throws Exception {
+        String workDir = U.defaultWorkDirectory();
+
+        deleteRecursively(U.resolveWorkDirectory(workDir, "marshaller", false));
+    }
+
+    /**
+     * Test checks a scenario when in multinode cluster one node may read marshaller mapping
+     * from file storage and add it directly to marshaller context with accepted=true flag,
+     * when another node sends a proposed request for the same mapping.
+     *
+     * In that case the request must not be marked as duplicate and must be processed in a regular way.
+     * No hangs must take place.
+     *
+     * @see <a href="https://issues.apache.org/jira/browse/IGNITE-5401">IGNITE-5401</a> Take a look at JIRA ticket for more information about context of this test.
+     *
+     * This test must never hang on proposing of MarshallerMapping.
+     */
+    public void testFileMappingReadAndPropose() throws Exception {
+        prepareMarshallerFileStore();
+
+        IgniteEx ignite0 = startGrid(0);
+        IgniteEx ignite1 = startGrid(1);
+
+        BinaryObject obj0 = ignite0.binary().builder(SimpleValue.class.getName())
+            .setField("iF", 10)
+            .setField("sF", "str0")
+            .build();
+
+        BinaryObject obj1 = ignite0.binary().builder(SimpleValue.class.getName())
+            .setField("iF", 20)
+            .setField("sF", "str1")
+            .build();
+
+        IgniteCache<Object, Object> binCache = ignite0.cache(DEFAULT_CACHE_NAME).withKeepBinary();
+
+        binCache.put(1, obj0);
+        binCache.put(2, obj1);
+
+        ignite0.cache(DEFAULT_CACHE_NAME).remove(1);
+
+        ignite1.cache(DEFAULT_CACHE_NAME).put(3, new SimpleValue(30, "str2"));
+
+        assertFalse(isDuplicateObserved);
+    }
+
+    /**
+     *
+     */
+    private void prepareMarshallerFileStore() throws Exception {
+        String typeName = SimpleValue.class.getName();
+        int typeId = typeName.toLowerCase().hashCode();
+
+        String fileName = typeId + ".classname0";
+
+        File marshStoreDir = U.resolveWorkDirectory(U.defaultWorkDirectory(), "marshaller", false);
+
+        try(FileOutputStream out = new FileOutputStream(new File(marshStoreDir, fileName))) {
+            try (Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8)) {
+                writer.write(typeName);
+
+                writer.flush();
+            }
+        }
+    }
+
+    /** */
+    private class TestTcpDiscoverySpi extends TcpDiscoverySpi {
+
+        /** */
+        private class DiscoverySpiListenerWrapper implements DiscoverySpiListener {
+            /** */
+            private DiscoverySpiListener delegate;
+
+            /**
+             * @param delegate Delegate.
+             */
+            private DiscoverySpiListenerWrapper(DiscoverySpiListener delegate) {
+                this.delegate = delegate;
+            }
+
+            /** {@inheritDoc} */
+            @Override public void onDiscovery(
+                int type,
+                long topVer,
+                ClusterNode node,
+                Collection<ClusterNode> topSnapshot,
+                @Nullable Map<Long, Collection<ClusterNode>> topHist,
+                @Nullable DiscoverySpiCustomMessage spiCustomMsg
+            ) {
+                DiscoveryCustomMessage customMsg = spiCustomMsg == null ? null
+                    : (DiscoveryCustomMessage) U.field(spiCustomMsg, "delegate");
+
+                if (customMsg != null) {
+                    //don't want to make this class public, using equality of class name instead of instanceof operator
+                    if ("MappingProposedMessage".equals(customMsg.getClass().getSimpleName())) {
+                        try {
+                            isDuplicateObserved = U.invoke(MappingProposedMessage.class, customMsg, "duplicated");
+                        }
+                        catch (Exception e) {
+                            log().error("Error when examining MappingProposedMessage.", e);
+                        }
+                    }
+                }
+
+                if (delegate != null)
+                    delegate.onDiscovery(type, topVer, node, topSnapshot, topHist, spiCustomMsg);
+            }
+
+            /** {@inheritDoc} */
+            @Override public void onLocalNodeInitialized(ClusterNode locNode) {
+                // No-op.
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override public void setListener(@Nullable DiscoverySpiListener lsnr) {
+            super.setListener(new DiscoverySpiListenerWrapper(lsnr));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/740b0b2b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
index de509ab..d79e868 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
@@ -43,6 +43,7 @@ import org.apache.ignite.internal.processors.cache.IgniteDaemonNodeMarshallerCac
 import org.apache.ignite.internal.processors.cache.IgniteMarshallerCacheClassNameConflictTest;
 import org.apache.ignite.internal.processors.cache.IgniteMarshallerCacheClientRequestsMappingOnMissTest;
 import org.apache.ignite.internal.processors.cache.IgniteMarshallerCacheConcurrentReadWriteTest;
+import org.apache.ignite.internal.processors.cache.IgniteMarshallerCacheFSRestoreTest;
 import org.apache.ignite.internal.processors.cache.distributed.IgniteRejectConnectOnNodeStopTest;
 import org.apache.ignite.internal.processors.closure.GridClosureProcessorSelfTest;
 import org.apache.ignite.internal.processors.closure.GridClosureSerializationTest;
@@ -173,6 +174,7 @@ public class IgniteBasicTestSuite extends TestSuite {
         suite.addTestSuite(FreeListImplSelfTest.class);
         suite.addTestSuite(MemoryMetricsSelfTest.class);
 
+        suite.addTestSuite(IgniteMarshallerCacheFSRestoreTest.class);
         suite.addTestSuite(IgniteMarshallerCacheClassNameConflictTest.class);
         suite.addTestSuite(IgniteMarshallerCacheClientRequestsMappingOnMissTest.class);
 


[19/46] ignite git commit: ignite-2.1

Posted by vo...@apache.org.
ignite-2.1


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ad42f620
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ad42f620
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ad42f620

Branch: refs/heads/ignite-2.1
Commit: ad42f6205b3956dca0ee54e85ce385e6591ec7a9
Parents: 7504b38
Author: sboikov <sb...@gridgain.com>
Authored: Wed Jul 5 17:41:30 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Jul 5 17:41:30 2017 +0300

----------------------------------------------------------------------
 .../yardstick/IgniteBenchmarkArguments.java     |  46 ++++
 .../cache/IgniteStreamerBenchmark.java          | 234 +++++++++++++++++++
 2 files changed, 280 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ad42f620/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
----------------------------------------------------------------------
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
index d3b860c..5ec6c54 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.yardstick;
 
 import com.beust.jcommander.Parameter;
+import org.apache.ignite.IgniteDataStreamer;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.configuration.MemoryConfiguration;
 import org.apache.ignite.configuration.PersistentStoreConfiguration;
@@ -28,6 +29,7 @@ import org.apache.ignite.transactions.TransactionIsolation;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.ignite.yardstick.cache.IgniteStreamerBenchmark;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -222,6 +224,22 @@ public class IgniteBenchmarkArguments {
     @Parameter(names = {"-pds", "--persistentStore"}, description = "Persistent store flag")
     private boolean persistentStoreEnabled;
 
+    /** */
+    @Parameter(names = {"-stcp", "--streamerCachesPrefix"}, description = "Cache name prefix for streamer benchmark")
+    private String streamerCachesPrefix = "streamer";
+
+    /** */
+    @Parameter(names = {"-stci", "--streamerCachesIndex"}, description = "First cache index for streamer benchmark")
+    private int streamerCacheIndex;
+
+    /** */
+    @Parameter(names = {"-stcc", "--streamerConcCaches"}, description = "Number of concurrently loaded caches for streamer benchmark")
+    private int streamerConcurrentCaches = 1;
+
+    /** */
+    @Parameter(names = {"-stbs", "--streamerBufSize"}, description = "Data streamer buffer size")
+    private int streamerBufSize = IgniteDataStreamer.DFLT_PER_NODE_BUFFER_SIZE;
+
     /**
      * @return {@code True} if need set {@link PersistentStoreConfiguration}.
      */
@@ -552,6 +570,34 @@ public class IgniteBenchmarkArguments {
             "-txc=" + txConcurrency + "-rd=" + restartDelay + "-rs=" + restartSleep;
     }
 
+    /**
+     * @return Cache name prefix for caches to be used in {@link IgniteStreamerBenchmark}.
+     */
+    public String streamerCachesPrefix() {
+        return streamerCachesPrefix;
+    }
+
+    /**
+     * @return First cache index for {@link IgniteStreamerBenchmark}.
+     */
+    public int streamerCacheIndex() {
+        return streamerCacheIndex;
+    }
+
+    /**
+     * @return Number of concurrently loaded caches for {@link IgniteStreamerBenchmark}.
+     */
+    public int streamerConcurrentCaches() {
+        return streamerConcurrentCaches;
+    }
+
+    /**
+     * @return Streamer buffer size {@link IgniteStreamerBenchmark} (see {@link IgniteDataStreamer#perNodeBufferSize()}.
+     */
+    public int streamerBufferSize() {
+        return streamerBufSize;
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return GridToStringBuilder.toString(IgniteBenchmarkArguments.class, this);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad42f620/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteStreamerBenchmark.java
----------------------------------------------------------------------
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteStreamerBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteStreamerBenchmark.java
new file mode 100644
index 0000000..9e253e1
--- /dev/null
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteStreamerBenchmark.java
@@ -0,0 +1,234 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.yardstick.cache;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.yardstick.IgniteAbstractBenchmark;
+import org.apache.ignite.yardstick.cache.model.SampleValue;
+import org.yardstickframework.BenchmarkConfiguration;
+import org.yardstickframework.BenchmarkUtils;
+
+/**
+ *
+ */
+public class IgniteStreamerBenchmark extends IgniteAbstractBenchmark {
+    /** */
+    private List<String> cacheNames;
+
+    /** */
+    private ExecutorService executor;
+
+    /** */
+    private int entries;
+
+    /** {@inheritDoc} */
+    @Override public void setUp(BenchmarkConfiguration cfg) throws Exception {
+        super.setUp(cfg);
+
+        entries = args.range();
+
+        if (entries <= 0)
+            throw new IllegalArgumentException("Invalid number of entries: " + entries);
+
+        if (cfg.threads() != 1)
+            throw new IllegalArgumentException("IgniteStreamerBenchmark should be run with single thread. " +
+                "Internally it starts multiple threads.");
+
+        String cacheNamePrefix = args.streamerCachesPrefix();
+
+        if (cacheNamePrefix == null || cacheNamePrefix.isEmpty())
+            throw new IllegalArgumentException("Streamer caches prefix not set.");
+
+        List<String> caches = new ArrayList<>();
+
+        for (String cacheName : ignite().cacheNames()) {
+            if (cacheName.startsWith(cacheNamePrefix))
+                caches.add(cacheName);
+        }
+
+        if (caches.isEmpty())
+            throw new IllegalArgumentException("Failed to find for IgniteStreamerBenchmark caches " +
+                "starting with '" + cacheNamePrefix + "'");
+
+        BenchmarkUtils.println("Found " + caches.size() + " caches for IgniteStreamerBenchmark: " + caches);
+
+        if (args.streamerCacheIndex() >= caches.size()) {
+            throw new IllegalArgumentException("Invalid streamer cache index: " + args.streamerCacheIndex() +
+                ", there are only " + caches.size() + " caches.");
+        }
+
+        if (args.streamerCacheIndex() + args.streamerConcurrentCaches() > caches.size()) {
+            throw new IllegalArgumentException("There are no enough caches [cacheIndex=" + args.streamerCacheIndex() +
+                ", concurrentCaches=" + args.streamerConcurrentCaches() +
+                ", totalCaches=" + caches.size() + ']');
+        }
+
+        Collections.sort(caches);
+
+        cacheNames = new ArrayList<>(caches.subList(args.streamerCacheIndex(),
+            args.streamerCacheIndex() + args.streamerConcurrentCaches()));
+
+        executor = Executors.newFixedThreadPool(args.streamerConcurrentCaches());
+
+        BenchmarkUtils.println("IgniteStreamerBenchmark start [cacheIndex=" + args.streamerCacheIndex() +
+            ", concurrentCaches=" + args.streamerConcurrentCaches() +
+            ", entries=" + entries +
+            ", bufferSize=" + args.streamerBufferSize() +
+            ", cachesToUse=" + cacheNames + ']');
+
+        if (cfg.warmup() > 0) {
+            BenchmarkUtils.println("IgniteStreamerBenchmark start warmup [warmupTimeMillis=" + cfg.warmup() + ']');
+
+            final long warmupEnd = System.currentTimeMillis() + cfg.warmup();
+
+            final AtomicBoolean stop = new AtomicBoolean();
+
+            try {
+                List<Future<Void>> futs = new ArrayList<>();
+
+                for (final String cacheName : cacheNames) {
+                    futs.add(executor.submit(new Callable<Void>() {
+                        @Override public Void call() throws Exception {
+                            Thread.currentThread().setName("streamer-" + cacheName);
+
+                            BenchmarkUtils.println("IgniteStreamerBenchmark start warmup for cache " +
+                                "[name=" + cacheName + ']');
+
+                            final int KEYS = Math.min(100_000, entries);
+
+                            int key = 1;
+
+                            try (IgniteDataStreamer<Object, Object> streamer = ignite().dataStreamer(cacheName)) {
+                                streamer.perNodeBufferSize(args.streamerBufferSize());
+
+                                while (System.currentTimeMillis() < warmupEnd && !stop.get()) {
+                                    for (int i = 0; i < 10; i++) {
+                                        streamer.addData(-key++, new SampleValue(key));
+
+                                        if (key >= KEYS)
+                                            key = 1;
+                                    }
+
+                                    streamer.flush();
+                                }
+                            }
+
+                            BenchmarkUtils.println("IgniteStreamerBenchmark finished warmup for cache " +
+                                "[name=" + cacheName + ']');
+
+                            return null;
+                        }
+                    }));
+                }
+
+                for (Future<Void> fut : futs)
+                    fut.get();
+            }
+            finally {
+                stop.set(true);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean test(Map<Object, Object> map) throws Exception {
+        BenchmarkUtils.println("IgniteStreamerBenchmark start test.");
+
+        long start = System.currentTimeMillis();
+
+        final AtomicBoolean stop = new AtomicBoolean();
+
+        try {
+            List<Future<Void>> futs = new ArrayList<>();
+
+            for (final String cacheName : cacheNames) {
+                futs.add(executor.submit(new Callable<Void>() {
+                    @Override public Void call() throws Exception {
+                        Thread.currentThread().setName("streamer-" + cacheName);
+
+                        long start = System.currentTimeMillis();
+
+                        BenchmarkUtils.println("IgniteStreamerBenchmark start load cache [name=" + cacheName + ']');
+
+                        try (IgniteDataStreamer<Object, Object> streamer = ignite().dataStreamer(cacheName)) {
+                            for (int i = 0; i < entries; i++) {
+                                streamer.addData(i, new SampleValue(i));
+
+                                if (i > 0 && i % 1000 == 0) {
+                                    if (stop.get())
+                                        break;
+
+                                    if (i % 100_000 == 0) {
+                                        BenchmarkUtils.println("IgniteStreamerBenchmark cache load progress [name=" + cacheName +
+                                            ", entries=" + i +
+                                            ", timeMillis=" + (System.currentTimeMillis() - start) + ']');
+                                    }
+                                }
+                            }
+                        }
+
+                        long time = System.currentTimeMillis() - start;
+
+                        BenchmarkUtils.println("IgniteStreamerBenchmark finished load cache [name=" + cacheName +
+                            ", entries=" + entries +
+                            ", bufferSize=" + args.streamerBufferSize() +
+                            ", totalTimeMillis=" + time + ']');
+
+                        return null;
+                    }
+                }));
+            }
+
+            for (Future<Void> fut : futs)
+                fut.get();
+        }
+        finally {
+            stop.set(true);
+        }
+
+        long time = System.currentTimeMillis() - start;
+
+        BenchmarkUtils.println("IgniteStreamerBenchmark finished [totalTimeMillis=" + time +
+            ", entries=" + entries +
+            ", bufferSize=" + args.streamerBufferSize() + ']');
+
+        for (String cacheName : cacheNames) {
+            BenchmarkUtils.println("Cache size [cacheName=" + cacheName +
+                ", size=" + ignite().cache(cacheName).size() + ']');
+        }
+
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void tearDown() throws Exception {
+        if (executor != null)
+            executor.shutdown();
+
+        super.tearDown();
+    }
+}


[09/46] ignite git commit: Muted hanging tests.

Posted by vo...@apache.org.
Muted hanging tests.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9743fa3d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9743fa3d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9743fa3d

Branch: refs/heads/ignite-2.1
Commit: 9743fa3d711d0f1bbf0fa7ceec65237879f76d0d
Parents: f391290
Author: Ilya Lantukh <il...@gridgain.com>
Authored: Tue Jul 4 18:10:25 2017 +0300
Committer: Ilya Lantukh <il...@gridgain.com>
Committed: Tue Jul 4 18:11:09 2017 +0300

----------------------------------------------------------------------
 .../IgniteCommunicationBalanceMultipleConnectionsTest.java      | 5 +++++
 .../IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest.java   | 5 +++++
 .../org/apache/ignite/spark/JavaEmbeddedIgniteRDDSelfTest.java  | 5 +++++
 3 files changed, 15 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9743fa3d/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IgniteCommunicationBalanceMultipleConnectionsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IgniteCommunicationBalanceMultipleConnectionsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IgniteCommunicationBalanceMultipleConnectionsTest.java
index e95b1ec..444f086 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IgniteCommunicationBalanceMultipleConnectionsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IgniteCommunicationBalanceMultipleConnectionsTest.java
@@ -25,4 +25,9 @@ public class IgniteCommunicationBalanceMultipleConnectionsTest extends IgniteCom
     @Override protected int connectionsPerNode() {
         return 5;
     }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-5689");
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9743fa3d/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest.java
index 5154642..edf0279 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest.java
@@ -30,4 +30,9 @@ public class IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest
     public IgniteHadoopFileSystemShmemExternalDualAsyncSelfTest() {
         super(DUAL_ASYNC, true);
     }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-5691");
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9743fa3d/modules/spark/src/test/java/org/apache/ignite/spark/JavaEmbeddedIgniteRDDSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/spark/src/test/java/org/apache/ignite/spark/JavaEmbeddedIgniteRDDSelfTest.java b/modules/spark/src/test/java/org/apache/ignite/spark/JavaEmbeddedIgniteRDDSelfTest.java
index 49bb1ac..5477d43 100644
--- a/modules/spark/src/test/java/org/apache/ignite/spark/JavaEmbeddedIgniteRDDSelfTest.java
+++ b/modules/spark/src/test/java/org/apache/ignite/spark/JavaEmbeddedIgniteRDDSelfTest.java
@@ -100,6 +100,11 @@ public class JavaEmbeddedIgniteRDDSelfTest extends GridCommonAbstractTest {
     }
 
     /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-5690");
+    }
+
+    /** {@inheritDoc} */
     @Override protected void afterTest() throws Exception {
         stopAllGrids();
     }


[24/46] ignite git commit: Merge remote-tracking branch 'community/ignite-2.1.2-merge-ea11' into ignite-2.1.2

Posted by vo...@apache.org.
Merge remote-tracking branch 'community/ignite-2.1.2-merge-ea11' into ignite-2.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/09dff9bb
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/09dff9bb
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/09dff9bb

Branch: refs/heads/ignite-2.1
Commit: 09dff9bb15468a7481107f66ea046ffa5eb6e7df
Parents: 69357c5 d82b2b8
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Wed Jul 5 20:26:50 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Jul 5 20:26:50 2017 +0300

----------------------------------------------------------------------
 ...ishSnapshotOperationAckDiscoveryMessage.java |  7 ++
 .../snapshot/SnapshotCheckParameters.java       | 71 ++++++++++++++++++++
 .../pagemem/snapshot/SnapshotOperation.java     | 26 +++++--
 .../processors/cache/GridCacheProcessor.java    | 20 +++++-
 .../dht/GridDhtPartitionTopologyImpl.java       |  5 +-
 .../cache/persistence/DbCheckpointListener.java | 16 ++++-
 .../GridCacheDatabaseSharedManager.java         |  4 ++
 .../persistence/GridCacheOffheapManager.java    | 41 ++++++-----
 .../service/GridServiceProcessor.java           |  9 ++-
 9 files changed, 170 insertions(+), 29 deletions(-)
----------------------------------------------------------------------



[16/46] ignite git commit: IGNITE-5187: Improved DynamicIndexAbstractConcurrentSelfTest reliability. This closes #2219.

Posted by vo...@apache.org.
IGNITE-5187: Improved DynamicIndexAbstractConcurrentSelfTest reliability. This closes #2219.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/15da654a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/15da654a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/15da654a

Branch: refs/heads/ignite-2.1
Commit: 15da654a3e5c2bbf14947f0d3dd08270a9ba6766
Parents: 0f9a895
Author: Alexander Paschenko <al...@gmail.com>
Authored: Wed Jul 5 15:15:35 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Wed Jul 5 15:15:35 2017 +0300

----------------------------------------------------------------------
 .../DynamicIndexAbstractConcurrentSelfTest.java | 81 +++++++++++---------
 1 file changed, 45 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/15da654a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractConcurrentSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractConcurrentSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractConcurrentSelfTest.java
index 3fb8a30..913d724 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractConcurrentSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractConcurrentSelfTest.java
@@ -17,6 +17,17 @@
 
 package org.apache.ignite.internal.processors.cache.index;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import javax.cache.Cache;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
@@ -37,21 +48,9 @@ import org.apache.ignite.internal.processors.query.QueryIndexDescriptorImpl;
 import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
 import org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitor;
 import org.apache.ignite.internal.processors.query.schema.SchemaOperationException;
-import org.apache.ignite.internal.util.typedef.T2;
+import org.apache.ignite.internal.util.typedef.T3;
 import org.jetbrains.annotations.NotNull;
 
-import javax.cache.Cache;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ThreadLocalRandom;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
 import static org.apache.ignite.internal.IgniteClientReconnectAbstractTest.TestTcpDiscoverySpi;
 
 /**
@@ -66,7 +65,7 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
     private static final int LARGE_CACHE_SIZE = 100_000;
 
     /** Latches to block certain index operations. */
-    private static final ConcurrentHashMap<UUID, T2<CountDownLatch, AtomicBoolean>> BLOCKS = new ConcurrentHashMap<>();
+    private static final ConcurrentHashMap<UUID, T3<CountDownLatch, AtomicBoolean, CountDownLatch>> BLOCKS = new ConcurrentHashMap<>();
 
     /** Cache mode. */
     private final CacheMode cacheMode;
@@ -80,7 +79,7 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
      * @param cacheMode Cache mode.
      * @param atomicityMode Atomicity mode.
      */
-    protected DynamicIndexAbstractConcurrentSelfTest(CacheMode cacheMode, CacheAtomicityMode atomicityMode) {
+    DynamicIndexAbstractConcurrentSelfTest(CacheMode cacheMode, CacheAtomicityMode atomicityMode) {
         this.cacheMode = cacheMode;
         this.atomicityMode = atomicityMode;
     }
@@ -93,10 +92,11 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
     }
 
     /** {@inheritDoc} */
+    @SuppressWarnings("ConstantConditions")
     @Override protected void afterTest() throws Exception {
         GridQueryProcessor.idxCls = null;
 
-        for (T2<CountDownLatch, AtomicBoolean> block : BLOCKS.values())
+        for (T3<CountDownLatch, AtomicBoolean, CountDownLatch> block : BLOCKS.values())
             block.get1().countDown();
 
         BLOCKS.clear();
@@ -146,14 +146,14 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
         put(srv1, 0, KEY_AFTER);
 
         // Test migration between normal servers.
-        blockIndexing(srv1Id);
+        CountDownLatch idxLatch = blockIndexing(srv1Id);
 
         QueryIndex idx1 = index(IDX_NAME_1, field(FIELD_NAME_1));
 
         IgniteInternalFuture<?> idxFut1 = queryProcessor(cli).dynamicIndexCreate(CACHE_NAME, CACHE_NAME, TBL_NAME,
             idx1, false);
 
-        Thread.sleep(100);
+        idxLatch.countDown();
 
         //srv1.close();
         Ignition.stop(srv1.name(), true);
@@ -167,14 +167,14 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
         assertSqlSimpleData(SQL_SIMPLE_FIELD_1, KEY_AFTER - SQL_ARG_1);
 
         // Test migration from normal server to non-affinity server.
-        blockIndexing(srv2Id);
+        idxLatch = blockIndexing(srv2Id);
 
         QueryIndex idx2 = index(IDX_NAME_2, field(aliasUnescaped(FIELD_NAME_2)));
 
         IgniteInternalFuture<?> idxFut2 =
             queryProcessor(cli).dynamicIndexCreate(CACHE_NAME, CACHE_NAME, TBL_NAME, idx2, false);
 
-        Thread.sleep(100);
+        idxLatch.countDown();
 
         //srv2.close();
         Ignition.stop(srv2.name(), true);
@@ -202,7 +202,7 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
 
         createSqlCache(srv1);
 
-        blockIndexing(srv1);
+        CountDownLatch idxLatch = blockIndexing(srv1);
 
         QueryIndex idx1 = index(IDX_NAME_1, field(FIELD_NAME_1));
         QueryIndex idx2 = index(IDX_NAME_2, field(aliasUnescaped(FIELD_NAME_2)));
@@ -229,7 +229,7 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
         assertIndex(CACHE_NAME, TBL_NAME, IDX_NAME_1, field(FIELD_NAME_1));
         assertIndex(CACHE_NAME, TBL_NAME, IDX_NAME_2, field(aliasUnescaped(FIELD_NAME_2)));
 
-        Thread.sleep(100);
+        idxLatch.countDown();
 
         put(srv1, 0, KEY_AFTER);
 
@@ -250,7 +250,7 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
 
         createSqlCache(srv1);
 
-        blockIndexing(srv1);
+        CountDownLatch idxLatch = blockIndexing(srv1);
 
         QueryIndex idx = index(IDX_NAME_1, field(FIELD_NAME_1));
 
@@ -267,7 +267,7 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
 
         idxFut.get();
 
-        Thread.sleep(100L);
+        idxLatch.countDown();
 
         assertIndex(CACHE_NAME, TBL_NAME, IDX_NAME_1, field(FIELD_NAME_1));
 
@@ -391,15 +391,16 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
         put(srv1, 0, LARGE_CACHE_SIZE);
 
         // Start index operation in blocked state.
-        blockIndexing(srv1);
-        blockIndexing(srv2);
+        CountDownLatch idxLatch1 = blockIndexing(srv1);
+        CountDownLatch idxLatch2 = blockIndexing(srv2);
 
         QueryIndex idx = index(IDX_NAME_1, field(FIELD_NAME_1));
 
         final IgniteInternalFuture<?> idxFut =
             queryProcessor(srv1).dynamicIndexCreate(CACHE_NAME, CACHE_NAME, TBL_NAME, idx, false);
 
-        Thread.sleep(100);
+        idxLatch1.countDown();
+        idxLatch2.countDown();
 
         // Start two more nodes and unblock index operation in the middle.
         Ignition.start(serverConfiguration(3));
@@ -435,19 +436,19 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
         Ignite cli = Ignition.start(clientConfiguration(4));
 
         // Start cache and populate it with data.
-        IgniteCache cache = createSqlCache(cli);
+        createSqlCache(cli);
 
         put(cli, KEY_AFTER);
 
         // Start index operation and block it on coordinator.
-        blockIndexing(srv1);
+        CountDownLatch idxLatch = blockIndexing(srv1);
 
         QueryIndex idx = index(IDX_NAME_1, field(FIELD_NAME_1));
 
         final IgniteInternalFuture<?> idxFut =
             queryProcessor(srv1).dynamicIndexCreate(CACHE_NAME, CACHE_NAME, TBL_NAME, idx, false);
 
-        Thread.sleep(100);
+        idxLatch.countDown();
 
         // Destroy cache (drop table).
         destroySqlCache(cli);
@@ -967,10 +968,10 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
      * @param node Node.
      */
     @SuppressWarnings("SuspiciousMethodCalls")
-    private static void blockIndexing(Ignite node) {
+    private static CountDownLatch blockIndexing(Ignite node) {
         UUID nodeId = ((IgniteEx)node).localNode().id();
 
-        blockIndexing(nodeId);
+        return blockIndexing(nodeId);
     }
 
     /**
@@ -979,10 +980,14 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
      * @param nodeId Node.
      */
     @SuppressWarnings("SuspiciousMethodCalls")
-    private static void blockIndexing(UUID nodeId) {
+    private static CountDownLatch blockIndexing(UUID nodeId) {
         assertFalse(BLOCKS.contains(nodeId));
 
-        BLOCKS.put(nodeId, new T2<>(new CountDownLatch(1), new AtomicBoolean()));
+        CountDownLatch idxLatch = new CountDownLatch(1);
+
+        BLOCKS.put(nodeId, new T3<>(new CountDownLatch(1), new AtomicBoolean(), idxLatch));
+
+        return idxLatch;
     }
 
     /**
@@ -1001,8 +1006,9 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
      *
      * @param nodeId Node ID.
      */
+    @SuppressWarnings("ConstantConditions")
     private static void unblockIndexing(UUID nodeId) {
-        T2<CountDownLatch, AtomicBoolean> blocker = BLOCKS.remove(nodeId);
+        T3<CountDownLatch, AtomicBoolean, CountDownLatch> blocker = BLOCKS.remove(nodeId);
 
         assertNotNull(blocker);
 
@@ -1014,12 +1020,15 @@ public abstract class DynamicIndexAbstractConcurrentSelfTest extends DynamicInde
      *
      * @param nodeId Node ID.
      */
+    @SuppressWarnings("ConstantConditions")
     private static void awaitIndexing(UUID nodeId) {
-        T2<CountDownLatch, AtomicBoolean> blocker = BLOCKS.get(nodeId);
+        T3<CountDownLatch, AtomicBoolean, CountDownLatch> blocker = BLOCKS.get(nodeId);
 
         if (blocker != null) {
             assertTrue(blocker.get2().compareAndSet(false, true));
 
+            blocker.get3().countDown();
+
             while (true) {
                 try {
                     blocker.get1().await();


[11/46] ignite git commit: Merge branch 'ignite-2.1' into ignite-2.1.2-merge-ea11

Posted by vo...@apache.org.
Merge branch 'ignite-2.1' into ignite-2.1.2-merge-ea11

# Conflicts:
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f4ad01b7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f4ad01b7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f4ad01b7

Branch: refs/heads/ignite-2.1
Commit: f4ad01b7a768e0d4603d00509aabdab62525d8c8
Parents: b223076 b67b8c4
Author: Ivan Rakov <iv...@gmail.com>
Authored: Wed Jul 5 12:46:01 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Wed Jul 5 12:46:01 2017 +0300

----------------------------------------------------------------------
 .../PersistentStoreConfiguration.java           |   39 +-
 .../org/apache/ignite/events/EventType.java     |   12 +
 .../ignite/events/WalSegmentArchivedEvent.java  |   62 +
 .../apache/ignite/internal/GridComponent.java   |    4 +-
 .../ignite/internal/GridPluginComponent.java    |    2 +-
 .../apache/ignite/internal/IgniteKernal.java    |   33 +-
 .../internal/jdbc/thin/JdbcThinConnection.java  |    7 +-
 .../internal/managers/GridManagerAdapter.java   |    2 +-
 .../internal/managers/discovery/DiscoCache.java |   17 +-
 .../discovery/DiscoveryLocalJoinData.java       |  104 ++
 .../discovery/GridDiscoveryManager.java         |  128 +-
 .../pagemem/store/IgnitePageStoreManager.java   |    3 +-
 .../internal/pagemem/wal/record/WALRecord.java  |   11 +-
 .../processors/GridProcessorAdapter.java        |    2 +-
 .../cache/CacheAffinitySharedManager.java       |   67 +-
 .../processors/cache/CacheGroupContext.java     |    4 +-
 .../processors/cache/CacheGroupData.java        |    4 +-
 .../cache/ChangeGlobalStateMessage.java         |  120 --
 .../processors/cache/ClusterCachesInfo.java     |  490 +++++--
 .../internal/processors/cache/ClusterState.java |   38 -
 .../cache/DynamicCacheChangeRequest.java        |   52 +-
 .../processors/cache/ExchangeActions.java       |   37 +-
 .../processors/cache/GridCacheEventManager.java |    2 -
 .../cache/GridCacheEvictionManager.java         |    1 -
 .../processors/cache/GridCacheIoManager.java    |   13 +-
 .../processors/cache/GridCacheMvccManager.java  |    9 +-
 .../GridCachePartitionExchangeManager.java      |  423 +++---
 .../processors/cache/GridCacheProcessor.java    |  177 ++-
 .../cache/GridCacheSharedContext.java           |   60 +-
 .../cache/GridCacheSharedManager.java           |    6 -
 .../cache/GridCacheSharedManagerAdapter.java    |   16 -
 .../processors/cache/PendingDiscoveryEvent.java |   61 +
 .../processors/cache/StateChangeRequest.java    |   77 ++
 .../binary/CacheObjectBinaryProcessorImpl.java  |    4 +-
 .../distributed/GridCacheTxRecoveryFuture.java  |    1 -
 .../distributed/dht/GridDhtCacheAdapter.java    |    1 -
 .../cache/distributed/dht/GridDhtGetFuture.java |    1 -
 .../distributed/dht/GridDhtGetSingleFuture.java |    2 -
 .../dht/GridDhtPartitionTopologyImpl.java       |   13 +-
 .../dht/GridDhtTopologyFutureAdapter.java       |    2 +-
 .../dht/GridPartitionedSingleGetFuture.java     |    3 -
 .../GridNearAtomicAbstractUpdateFuture.java     |    1 -
 .../dht/preloader/GridDhtForceKeysFuture.java   |    1 -
 .../dht/preloader/GridDhtPartitionDemander.java |    2 +
 .../GridDhtPartitionsExchangeFuture.java        |  228 +++-
 .../preloader/GridDhtPartitionsFullMessage.java |   44 +-
 .../GridDhtPartitionsSingleMessage.java         |   38 +-
 .../dht/preloader/GridDhtPreloader.java         |    2 +-
 .../distributed/near/GridNearGetFuture.java     |    2 -
 .../near/GridNearTxPrepareRequest.java          |    1 -
 .../GridCacheDatabaseSharedManager.java         |  105 +-
 .../persistence/GridCacheOffheapManager.java    |    5 +-
 .../IgniteCacheDatabaseSharedManager.java       |   74 +-
 .../persistence/IgniteCacheSnapshotManager.java |   12 +-
 .../persistence/file/FilePageStoreManager.java  |   14 +-
 .../wal/AbstractWalRecordsIterator.java         |  289 ++++
 .../cache/persistence/wal/FileInput.java        |   16 +-
 .../cache/persistence/wal/FileWALPointer.java   |    4 +-
 .../wal/FileWriteAheadLogManager.java           |  594 ++++----
 .../cache/persistence/wal/RecordSerializer.java |    5 +
 .../persistence/wal/SegmentArchiveResult.java   |   61 +
 .../persistence/wal/SegmentEofException.java    |    3 +-
 .../wal/reader/IgniteWalIteratorFactory.java    |  102 ++
 .../wal/reader/StandaloneGridKernalContext.java |  499 +++++++
 ...ndaloneIgniteCacheDatabaseSharedManager.java |   30 +
 .../reader/StandaloneWalRecordsIterator.java    |  258 ++++
 .../wal/serializer/RecordV1Serializer.java      |   45 +-
 .../query/GridCacheDistributedQueryManager.java |    4 +-
 .../store/GridCacheStoreManagerAdapter.java     |    1 -
 .../cache/version/GridCacheVersionManager.java  |    6 -
 .../cacheobject/IgniteCacheObjectProcessor.java |    5 -
 .../IgniteCacheObjectProcessorImpl.java         |    5 -
 .../cluster/ChangeGlobalStateFinishMessage.java |   86 ++
 .../cluster/ChangeGlobalStateMessage.java       |  140 ++
 .../processors/cluster/ClusterProcessor.java    |    3 +-
 .../cluster/DiscoveryDataClusterState.java      |  157 +++
 .../cluster/GridClusterStateProcessor.java      | 1122 ++++++---------
 .../cluster/IgniteChangeGlobalStateSupport.java |    3 +-
 .../datastructures/DataStructuresProcessor.java |    6 +-
 .../datastructures/GridCacheAtomicLongImpl.java |    2 +-
 .../GridCacheAtomicReferenceImpl.java           |    2 +-
 .../GridCacheAtomicSequenceImpl.java            |    2 +-
 .../GridCacheAtomicStampedImpl.java             |    2 +-
 .../GridCacheCountDownLatchImpl.java            |    2 +-
 .../datastructures/GridCacheLockImpl.java       |    4 +-
 .../datastructures/GridCacheQueueAdapter.java   |    1 -
 .../datastructures/GridCacheSemaphoreImpl.java  |    2 +-
 .../datastructures/GridCacheSetImpl.java        |    1 -
 .../internal/processors/igfs/IgfsImpl.java      |    2 -
 .../internal/processors/igfs/IgfsProcessor.java |    2 +-
 .../processors/query/GridQueryProcessor.java    |    4 +-
 .../processors/rest/GridRestProcessor.java      |    2 +-
 .../cluster/GridChangeStateCommandHandler.java  |    2 +-
 .../service/GridServiceProcessor.java           |    6 +-
 .../processors/task/GridTaskProcessor.java      |    2 +-
 .../ignite/spi/discovery/tcp/ClientImpl.java    |   12 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |   10 +-
 .../internal/TestRecordingCommunicationSpi.java |   10 +
 ...GridManagerLocalMessageListenerSelfTest.java |    4 +-
 ...unicationBalanceMultipleConnectionsTest.java |    5 +
 .../cache/GridCacheAbstractMetricsSelfTest.java |   24 -
 .../cache/IgniteActiveClusterTest.java          |  182 ---
 .../IgniteClusterActivateDeactivateTest.java    | 1284 ++++++++++++++++++
 ...erActivateDeactivateTestWithPersistence.java |  197 +++
 .../IgniteDaemonNodeMarshallerCacheTest.java    |   10 -
 .../IgniteSemaphoreAbstractSelfTest.java        |   17 +-
 ...IgnitePersistentStoreDataStructuresTest.java |    2 +
 .../wal/IgniteWalHistoryReservationsTest.java   |    2 +-
 .../db/wal/reader/IgniteWalReaderTest.java      |  385 ++++++
 .../db/wal/reader/MockWalIteratorFactory.java   |  114 ++
 .../pagemem/NoOpPageStoreManager.java           |   12 +-
 .../persistence/pagemem/NoOpWALManager.java     |   23 +-
 .../AbstractNodeJoinTemplate.java               |  149 +-
 .../IgniteChangeGlobalStateAbstractTest.java    |   65 +-
 .../IgniteChangeGlobalStateCacheTest.java       |    2 +-
 ...IgniteChangeGlobalStateDataStreamerTest.java |    5 +-
 ...gniteChangeGlobalStateDataStructureTest.java |    6 +-
 .../IgniteChangeGlobalStateFailOverTest.java    |   26 +-
 .../IgniteChangeGlobalStateTest.java            |  158 +--
 .../IgniteStandByClusterTest.java               |   17 +-
 .../join/JoinActiveNodeToActiveCluster.java     |   62 +-
 ...ctiveNodeToActiveClusterWithPersistence.java |   17 +
 .../IgniteStandByClientReconnectTest.java       |   13 +-
 ...eStandByClientReconnectToNewClusterTest.java |   13 +-
 ...cpCommunicationSpiMultithreadedSelfTest.java |    2 +-
 .../testframework/junits/GridAbstractTest.java  |    4 +-
 .../junits/common/GridCommonAbstractTest.java   |    3 +
 .../ignite/testsuites/IgnitePdsTestSuite2.java  |    9 +-
 .../testsuites/IgniteStandByClusterSuite.java   |    5 +-
 .../processors/hadoop/HadoopProcessor.java      |    4 +-
 ...ileSystemShmemExternalDualAsyncSelfTest.java |    5 +
 .../cache/IgniteCacheAbstractQuerySelfTest.java |    3 +-
 .../spark/JavaEmbeddedIgniteRDDSelfTest.java    |    5 +
 133 files changed, 6410 insertions(+), 2577 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f4ad01b7/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index f4524ef,624dec0..716482e
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@@ -2122,12 -2107,9 +2107,12 @@@ public class GridCacheProcessor extend
          if (exchActions == null)
              return;
  
-         if (exchActions.systemCachesStarting() && exchActions.newClusterState() == null) {
 -        if (exchActions.systemCachesStarting() && exchActions.stateChangeRequest() == null)
++        if (exchActions.systemCachesStarting() && exchActions.stateChangeRequest() == null) {
              ctx.dataStructures().restoreStructuresState(ctx);
  
 +            ctx.service().updateUtilityCache();
 +        }
 +
          if (err == null) {
              // Force checkpoint if there is any cache stop request
              if (exchActions.cacheStopRequests().size() > 0) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/f4ad01b7/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/f4ad01b7/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/f4ad01b7/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/f4ad01b7/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------


[43/46] ignite git commit: Added missing header to ByteBufferExpander.

Posted by vo...@apache.org.
Added missing header to ByteBufferExpander.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0b4b5dc0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0b4b5dc0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0b4b5dc0

Branch: refs/heads/ignite-2.1
Commit: 0b4b5dc0e6763f4cf27ed8c9d38c6f4b10037ef6
Parents: 64d6c98
Author: devozerov <vo...@gridgain.com>
Authored: Fri Jul 7 11:00:52 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Jul 7 11:00:52 2017 +0300

----------------------------------------------------------------------
 .../cache/persistence/wal/ByteBufferExpander.java  | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0b4b5dc0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java
index 75d3a98..829cd5c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/ByteBufferExpander.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.ignite.internal.processors.cache.persistence.wal;
 
 import java.nio.ByteBuffer;


[39/46] ignite git commit: 2.1 Do print stack traces if tx is cancelled on node stop

Posted by vo...@apache.org.
2.1 Do print stack traces if tx is cancelled on node stop


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2f1270ee
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2f1270ee
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2f1270ee

Branch: refs/heads/ignite-2.1
Commit: 2f1270ee9b3edf8c50562e33275dfbd3807d608a
Parents: c396b0b
Author: sboikov <sb...@gridgain.com>
Authored: Thu Jul 6 14:53:25 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Jul 6 14:53:25 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheEntryEx.java      | 14 +----
 .../processors/cache/GridCacheMapEntry.java     | 54 +++-----------------
 .../GridDistributedTxRemoteAdapter.java         | 13 ++++-
 .../dht/GridDhtTransactionalCacheAdapter.java   |  2 +-
 .../near/GridNearTxFinishFuture.java            |  2 +-
 .../cache/transactions/IgniteTxAdapter.java     | 28 +++++-----
 .../cache/transactions/IgniteTxHandler.java     |  2 +-
 .../transactions/IgniteTxLocalAdapter.java      | 12 ++++-
 .../processors/cache/GridCacheTestEntryEx.java  | 10 +---
 9 files changed, 48 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
index 4e52680..b708b43 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
@@ -192,23 +192,11 @@ public interface GridCacheEntryEx {
     /**
      * Invalidates this entry.
      *
-     * @param curVer Current version to match ({@code null} means always match).
      * @param newVer New version to set.
      * @return {@code true} if entry is obsolete.
      * @throws IgniteCheckedException If swap could not be released.
      */
-    public boolean invalidate(@Nullable GridCacheVersion curVer, GridCacheVersion newVer) throws IgniteCheckedException;
-
-    /**
-     * Invalidates this entry if it passes given filter.
-     *
-     * @param filter Optional filter that entry should pass before invalidation.
-     * @return {@code true} if entry was actually invalidated.
-     * @throws IgniteCheckedException If swap could not be released.
-     * @throws GridCacheEntryRemovedException If entry was removed.
-     */
-    public boolean invalidate(@Nullable CacheEntryPredicate[] filter)
-        throws GridCacheEntryRemovedException, IgniteCheckedException;
+    public boolean invalidate(GridCacheVersion newVer) throws IgniteCheckedException;
 
     /**
      * @param obsoleteVer Version for eviction.

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index eea8935..14bd1c5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -2226,20 +2226,18 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @Override public synchronized boolean invalidate(@Nullable GridCacheVersion curVer, GridCacheVersion newVer)
+    @Override public synchronized boolean invalidate(GridCacheVersion newVer)
         throws IgniteCheckedException {
         assert newVer != null;
 
-        if (curVer == null || ver.equals(curVer)) {
-            value(null);
+        value(null);
 
-            ver = newVer;
-            flags &= ~IS_EVICT_DISABLED;
+        ver = newVer;
+        flags &= ~IS_EVICT_DISABLED;
 
-            removeValue();
+        removeValue();
 
-            onInvalidate();
-        }
+        onInvalidate();
 
         return obsoleteVersionExtras() != null;
     }
@@ -2251,46 +2249,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
         // No-op.
     }
 
-    /** {@inheritDoc} */
-    @Override public boolean invalidate(@Nullable CacheEntryPredicate[] filter)
-        throws GridCacheEntryRemovedException, IgniteCheckedException {
-        if (F.isEmptyOrNulls(filter)) {
-            synchronized (this) {
-                checkObsolete();
-
-                invalidate(null, nextVersion());
-
-                return true;
-            }
-        }
-        else {
-            // For optimistic checking.
-            GridCacheVersion startVer;
-
-            synchronized (this) {
-                checkObsolete();
-
-                startVer = ver;
-            }
-
-            if (!cctx.isAll(this, filter))
-                return false;
-
-            synchronized (this) {
-                checkObsolete();
-
-                if (startVer.equals(ver)) {
-                    invalidate(null, nextVersion());
-
-                    return true;
-                }
-            }
-
-            // If version has changed then repeat the process.
-            return invalidate(filter);
-        }
-    }
-
     /**
      * @param val New value.
      * @param expireTime Expiration time.

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
index 5e3020d..ea6461d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
@@ -29,6 +29,7 @@ import java.util.UUID;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.NodeStoppingException;
 import org.apache.ignite.internal.pagemem.wal.StorageException;
 import org.apache.ignite.internal.pagemem.wal.WALPointer;
 import org.apache.ignite.internal.pagemem.wal.record.DataEntry;
@@ -61,6 +62,7 @@ import org.apache.ignite.internal.util.lang.GridTuple;
 import org.apache.ignite.internal.util.tostring.GridToStringBuilder;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
@@ -716,14 +718,21 @@ public abstract class GridDistributedTxRemoteAdapter extends IgniteTxAdapter
                                     }
                                 }
                                 catch (Throwable ex) {
+                                    boolean nodeStopping = X.hasCause(ex, NodeStoppingException.class);
+
                                     // In case of error, we still make the best effort to commit,
                                     // as there is no way to rollback at this point.
                                     err = new IgniteTxHeuristicCheckedException("Commit produced a runtime exception " +
                                         "(all transaction entries will be invalidated): " + CU.txString(this), ex);
 
-                                    U.error(log, "Commit failed.", err);
+                                    if (nodeStopping) {
+                                        U.warn(log, "Failed to commit transaction, node is stopping [tx=" + this +
+                                            ", err=" + ex + ']');
+                                    }
+                                    else
+                                        U.error(log, "Commit failed.", err);
 
-                                    uncommit();
+                                    uncommit(nodeStopping);
 
                                     state(UNKNOWN);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
index 5d31581..73942ff 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
@@ -1700,7 +1700,7 @@ public abstract class GridDhtTransactionalCacheAdapter<K, V> extends GridDhtCach
         GridCacheEntryEx nearEntry = near().peekEx(key);
 
         if (nearEntry != null)
-            nearEntry.invalidate(null, ver);
+            nearEntry.invalidate(ver);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
index 27cebf8..7f6f793 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
@@ -349,7 +349,7 @@ public final class GridNearTxFinishFuture<K, V> extends GridCacheCompoundIdentit
                                     GridCacheEntryEx entry = cacheCtx.cache().peekEx(e.key());
 
                                     if (entry != null)
-                                        entry.invalidate(null, tx.xidVersion());
+                                        entry.invalidate(tx.xidVersion());
                                 }
                             }
                             catch (Throwable t) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
index ee8afb0..51956ac 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
@@ -412,24 +412,28 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement
 
     /**
      * Uncommits transaction by invalidating all of its entries. Courtesy to minimize inconsistency.
+     *
+     * @param nodeStopping {@code True} if tx was cancelled during node stop.
      */
     @SuppressWarnings({"CatchGenericClass"})
-    protected void uncommit() {
+    protected void uncommit(boolean nodeStopping) {
         try {
-            for (IgniteTxEntry e : writeMap().values()) {
-                try {
-                    GridCacheEntryEx Entry = e.cached();
+            if (!nodeStopping) {
+                for (IgniteTxEntry e : writeMap().values()) {
+                    try {
+                        GridCacheEntryEx entry = e.cached();
 
-                    if (e.op() != NOOP)
-                        Entry.invalidate(null, xidVer);
-                }
-                catch (Throwable t) {
-                    U.error(log, "Failed to invalidate transaction entries while reverting a commit.", t);
+                        if (e.op() != NOOP)
+                            entry.invalidate(xidVer);
+                    }
+                    catch (Throwable t) {
+                        U.error(log, "Failed to invalidate transaction entries while reverting a commit.", t);
 
-                    if (t instanceof Error)
-                        throw (Error)t;
+                        if (t instanceof Error)
+                            throw (Error)t;
 
-                    break;
+                        break;
+                    }
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
index 7efd6ec..c473bfe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
@@ -1595,7 +1595,7 @@ public class IgniteTxHandler {
         GridCacheEntryEx nearEntry = near.peekEx(key);
 
         if (nearEntry != null)
-            nearEntry.invalidate(null, ver);
+            nearEntry.invalidate(ver);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
index e4b850d..49b67da 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
@@ -32,6 +32,7 @@ import javax.cache.processor.EntryProcessor;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.NodeStoppingException;
 import org.apache.ignite.internal.pagemem.wal.StorageException;
 import org.apache.ignite.internal.pagemem.wal.WALPointer;
 import org.apache.ignite.internal.pagemem.wal.record.DataEntry;
@@ -828,11 +829,18 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter implements Ig
                             throw ex;
                         }
                         else {
+                            boolean nodeStopping = X.hasCause(ex, NodeStoppingException.class);
+
                             IgniteCheckedException err = new IgniteTxHeuristicCheckedException("Failed to locally write to cache " +
                                 "(all transaction entries will be invalidated, however there was a window when " +
                                 "entries for this transaction were visible to others): " + this, ex);
 
-                            U.error(log, "Heuristic transaction failure.", err);
+                            if (nodeStopping) {
+                                U.warn(log, "Failed to commit transaction, node is stopping " +
+                                    "[tx=" + this + ", err=" + ex + ']');
+                            }
+                            else
+                                U.error(log, "Heuristic transaction failure.", err);
 
                             COMMIT_ERR_UPD.compareAndSet(this, null, err);
 
@@ -840,7 +848,7 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter implements Ig
 
                             try {
                                 // Courtesy to minimize damage.
-                                uncommit();
+                                uncommit(nodeStopping);
                             }
                             catch (Throwable ex1) {
                                 U.error(log, "Failed to uncommit transaction: " + this, ex1);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2f1270ee/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
index a6c9cd4..0241165 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
@@ -353,7 +353,7 @@ public class GridCacheTestEntryEx extends GridMetadataAwareAdapter implements Gr
     }
 
     /** @inheritDoc */
-    @Override public boolean invalidate(@Nullable GridCacheVersion curVer, GridCacheVersion newVer)
+    @Override public boolean invalidate(GridCacheVersion newVer)
         throws IgniteCheckedException {
         assert false;
 
@@ -361,14 +361,6 @@ public class GridCacheTestEntryEx extends GridMetadataAwareAdapter implements Gr
     }
 
     /** @inheritDoc */
-    @Override public boolean invalidate(@Nullable CacheEntryPredicate[] filter)
-        throws GridCacheEntryRemovedException, IgniteCheckedException {
-        assert false;
-
-        return false;
-    }
-
-    /** @inheritDoc */
     @Override public boolean evictInternal(GridCacheVersion obsoleteVer,
         @Nullable CacheEntryPredicate[] filter, boolean evictOffheap) {
         assert false;


[29/46] ignite git commit: IGNITE-5702: Set CacheWriteSynchronizationMode.FULL_SYNC for predefined CREATE TABLE templates. This closes #2246.

Posted by vo...@apache.org.
IGNITE-5702: Set CacheWriteSynchronizationMode.FULL_SYNC for predefined CREATE TABLE templates. This closes #2246.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/6e371ec6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6e371ec6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6e371ec6

Branch: refs/heads/ignite-2.1
Commit: 6e371ec6a7621e8c764762251f343b1b113c0754
Parents: c84328d
Author: Alexander Paschenko <al...@gmail.com>
Authored: Thu Jul 6 12:40:16 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Jul 6 12:40:16 2017 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/query/GridQueryProcessor.java     | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6e371ec6/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index ce6c9fe..d44be2c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -43,6 +43,7 @@ import org.apache.ignite.binary.Binarylizable;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.CacheKeyConfiguration;
 import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.query.FieldsQueryCursor;
@@ -58,7 +59,6 @@ import org.apache.ignite.internal.NodeStoppingException;
 import org.apache.ignite.internal.managers.communication.GridMessageListener;
 import org.apache.ignite.internal.processors.GridProcessorAdapter;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
-import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.CacheObjectContext;
 import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor;
@@ -1320,6 +1320,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 ccfg = new CacheConfiguration<>().setCacheMode(CacheMode.REPLICATED);
             else
                 throw new SchemaOperationException(SchemaOperationException.CODE_CACHE_NOT_FOUND, templateName);
+
+            ccfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
         }
 
         if (!F.isEmpty(ccfg.getQueryEntities()))


[38/46] ignite git commit: IGNITE-5424: GridServiceProxy does not unwraps exception message from InvocationTargetException. This closes #2168.

Posted by vo...@apache.org.
IGNITE-5424: GridServiceProxy does not unwraps exception message from InvocationTargetException. This closes #2168.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1130a87a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1130a87a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1130a87a

Branch: refs/heads/ignite-2.1
Commit: 1130a87a3157ce3a786994835fb927668c10d558
Parents: 4a169dc
Author: nikolay_tikhonov <nt...@gridgain.com>
Authored: Fri Jun 30 14:38:54 2017 +0300
Committer: Andrey V. Mashenkov <an...@gmail.com>
Committed: Thu Jul 6 14:37:59 2017 +0300

----------------------------------------------------------------------
 .../processors/service/GridServiceProxy.java    |  9 ++-
 .../GridServiceProcessorProxySelfTest.java      | 65 ++++++++++++++++++++
 2 files changed, 73 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/1130a87a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
index d16a4c4..3a40b90 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
@@ -23,6 +23,7 @@ import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.ArrayList;
@@ -413,7 +414,13 @@ public class GridServiceProxy<T> implements Serializable {
             if (mtd == null)
                 throw new GridServiceMethodNotFoundException(svcName, mtdName, argTypes);
 
-            return mtd.invoke(svcCtx.service(), args);
+            try {
+                return mtd.invoke(svcCtx.service(), args);
+            }
+            catch (InvocationTargetException e) {
+                // Get error message.
+                throw new IgniteCheckedException(e.getCause().getMessage(), e);
+            }
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/1130a87a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorProxySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorProxySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorProxySelfTest.java
index 9fd2d2c..d1c5294 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorProxySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/GridServiceProcessorProxySelfTest.java
@@ -18,9 +18,11 @@
 package org.apache.ignite.internal.processors.service;
 
 import java.util.Map;
+import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicReference;
 import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.util.typedef.PA;
 import org.apache.ignite.internal.util.typedef.X;
@@ -67,6 +69,31 @@ public class GridServiceProcessorProxySelfTest extends GridServiceProcessorAbstr
     }
 
     /**
+     * Unwraps error message from InvocationTargetException.
+     *
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("ThrowableNotThrown")
+    public void testException() throws Exception {
+        String name = "errorService";
+
+        Ignite ignite = grid(0);
+
+        ignite.services(ignite.cluster().forRemotes()).deployNodeSingleton(name, new ErrorServiceImpl());
+
+        final ErrorService svc = ignite.services().serviceProxy(name, ErrorService.class, false);
+
+        GridTestUtils.assertThrows(log, new Callable<Object>() {
+            @Override public Object call() throws Exception {
+                svc.go();
+
+                return null;
+            }
+        }, IgniteException.class, "Test exception");
+
+    }
+
+    /**
      * @throws Exception If failed.
      */
     public void testClusterSingletonProxy() throws Exception {
@@ -371,6 +398,7 @@ public class GridServiceProcessorProxySelfTest extends GridServiceProcessorAbstr
             map.clear();
         }
 
+        /** {@inheritDoc} */
         @Override public int size() {
             return map.size();
         }
@@ -390,4 +418,41 @@ public class GridServiceProcessorProxySelfTest extends GridServiceProcessorAbstr
             X.println("Executing cache service: " + ctx.name());
         }
     }
+
+    /**
+     *
+     */
+    protected interface ErrorService extends Service {
+        /**
+         *
+         */
+        void go() throws Exception;
+    }
+
+    /**
+     *
+     */
+    protected class ErrorServiceImpl implements ErrorService {
+        /** {@inheritDoc} */
+        @Override public void cancel(ServiceContext ctx) {
+            // No-op.
+        }
+
+        /** {@inheritDoc} */
+        @Override public void init(ServiceContext ctx) throws Exception {
+            // No-op.
+        }
+
+        /** {@inheritDoc} */
+        @Override public void execute(ServiceContext ctx) throws Exception {
+            // No-op.
+        }
+
+        /** {@inheritDoc} */
+        @Override public void go() throws Exception {
+            throw new Exception("Test exception");
+        }
+    }
+
+
 }


[05/46] ignite git commit: GG-12416: Backport [GG-12402] to 8.1.2

Posted by vo...@apache.org.
GG-12416: Backport [GG-12402] to 8.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c475f276
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c475f276
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c475f276

Branch: refs/heads/ignite-2.1
Commit: c475f2765ca557191dcbff67a070d458143203b0
Parents: fbf9597
Author: Ivan Rakov <iv...@gmail.com>
Authored: Tue Jul 4 14:58:16 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Tue Jul 4 14:58:16 2017 +0300

----------------------------------------------------------------------
 .../cache/persistence/DbCheckpointListener.java           |  2 ++
 .../cache/persistence/GridCacheDatabaseSharedManager.java |  4 ++++
 .../cache/persistence/GridCacheOffheapManager.java        | 10 +++++-----
 3 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c475f276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
index f4da637..daaccff 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
@@ -29,6 +29,8 @@ public interface DbCheckpointListener {
         public boolean nextSnapshot();
 
         public Map<T2<Integer, Integer>, T2<Integer, Integer>> partitionStatMap();
+
+        public boolean needToSnapshot(String cacheOrGrpName);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c475f276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index 990f54c..3b3932e 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -2155,6 +2155,10 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
                     @Override public Map<T2<Integer, Integer>, T2<Integer, Integer>> partitionStatMap() {
                         return map;
                     }
+
+                    @Override public boolean needToSnapshot(String cacheOrGrpName) {
+                        return curr.snapshotOperation.cacheGroupIds().contains(CU.cacheId(cacheOrGrpName));
+                    }
                 };
 
                 // Listeners must be invoked before we write checkpoint record to WAL.

http://git-wip-us.apache.org/repos/asf/ignite/blob/c475f276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index a890fa1..ed008be 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -47,6 +47,9 @@ import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl;
 import org.apache.ignite.internal.processors.cache.IgniteRebalanceIterator;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLocalPartition;
+import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState;
+import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
 import org.apache.ignite.internal.processors.cache.persistence.freelist.FreeListImpl;
 import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryEx;
 import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
@@ -56,9 +59,6 @@ import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageParti
 import org.apache.ignite.internal.processors.cache.persistence.tree.reuse.ReuseList;
 import org.apache.ignite.internal.processors.cache.persistence.tree.reuse.ReuseListImpl;
 import org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandler;
-import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLocalPartition;
-import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState;
-import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.lang.GridCursor;
@@ -169,7 +169,7 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
         boolean beforeDestroy) throws IgniteCheckedException {
         RowStore rowStore0 = store.rowStore();
 
-        boolean beforeSnapshot = ctx != null && ctx.nextSnapshot();
+        boolean needSnapshot = ctx != null && ctx.nextSnapshot() && ctx.needToSnapshot(grp.cacheOrGroupName());
 
         boolean wasSaveToMeta = false;
 
@@ -302,7 +302,7 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
 
                         int pageCnt;
 
-                        if (beforeSnapshot) {
+                        if (needSnapshot) {
                             pageCnt = this.ctx.pageStore().pages(grpId, store.partId());
                             io.setCandidatePageCount(pageAddr, pageCnt);
 


[21/46] ignite git commit: Added onActivate/onDeactivate callbacks for plugins

Posted by vo...@apache.org.
Added onActivate/onDeactivate callbacks for plugins


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/905e34d4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/905e34d4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/905e34d4

Branch: refs/heads/ignite-2.1
Commit: 905e34d4eee40f9c31288eb9563812f6e9ab888d
Parents: 29d532e
Author: Dmitriy Govorukhin <dm...@gmail.com>
Authored: Wed Jul 5 19:16:01 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Jul 5 19:16:01 2017 +0300

----------------------------------------------------------------------
 .../cache/GridCacheSharedContext.java           |   5 +
 .../org.apache.ignite.plugin.PluginProvider     |   3 +-
 .../IgniteStandByClusterTest.java               | 164 +++++++++++++++++++
 3 files changed, 171 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/905e34d4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
index 9adca8d..40b263f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
@@ -66,6 +66,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.plugin.PluginProvider;
 import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
 
@@ -223,6 +224,10 @@ public class GridCacheSharedContext<K, V> {
         stateAwareMgrs.add(dbMgr);
 
         stateAwareMgrs.add(snpMgr);
+
+        for (PluginProvider prv : kernalCtx.plugins().allProviders())
+            if (prv instanceof IgniteChangeGlobalStateSupport)
+                stateAwareMgrs.add(((IgniteChangeGlobalStateSupport)prv));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/905e34d4/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider b/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
index f030386..5b6ed7d 100644
--- a/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
+++ b/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
@@ -1,2 +1,3 @@
 org.apache.ignite.platform.plugin.PlatformTestPluginProvider
-org.apache.ignite.spi.discovery.tcp.TestReconnectPluginProvider
\ No newline at end of file
+org.apache.ignite.spi.discovery.tcp.TestReconnectPluginProvider
+org.apache.ignite.internal.processors.cache.persistence.standbycluster.IgniteStandByClusterTest$StanByClusterTestProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/905e34d4/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteStandByClusterTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteStandByClusterTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteStandByClusterTest.java
index 2678e51..30fff08 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteStandByClusterTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteStandByClusterTest.java
@@ -17,24 +17,39 @@
 
 package org.apache.ignite.internal.processors.cache.persistence.standbycluster;
 
+import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.PersistentStoreConfiguration;
+import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor;
 import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
+import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.plugin.CachePluginContext;
+import org.apache.ignite.plugin.CachePluginProvider;
+import org.apache.ignite.plugin.ExtensionRegistry;
+import org.apache.ignite.plugin.IgnitePlugin;
+import org.apache.ignite.plugin.PluginContext;
+import org.apache.ignite.plugin.PluginProvider;
+import org.apache.ignite.plugin.PluginValidationException;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.jetbrains.annotations.Nullable;
 import org.junit.Assert;
 
 /**
@@ -270,6 +285,58 @@ public class IgniteStandByClusterTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @throws Exception if fail.
+     */
+    public void testActivateDeActivateCallbackForPluginProviders() throws Exception {
+        IgniteEx ig1 = startGrid(getConfiguration("node1"));
+        IgniteEx ig2 = startGrid(getConfiguration("node2"));
+        IgniteEx ig3 = startGrid(getConfiguration("node3"));
+
+        assertTrue(!ig1.active());
+        assertTrue(!ig2.active());
+        assertTrue(!ig3.active());
+
+        ig1.active(true);
+
+        checkPlugin(ig1,1,0);
+        checkPlugin(ig2,1,0);
+        checkPlugin(ig3,1,0);
+
+        ig2.active(false);
+
+        ig3.active(true);
+
+        checkPlugin(ig1,2,1);
+        checkPlugin(ig2,2,1);
+        checkPlugin(ig3,2,1);
+
+        ig1.active(false);
+
+        ig2.active(true);
+
+        checkPlugin(ig1,3,2);
+        checkPlugin(ig2,3,2);
+        checkPlugin(ig3,3,2);
+
+    }
+
+    /**
+     * @param ig ignite.
+     * @param act Expected activation counter.
+     * @param deAct Expected deActivation counter.
+     */
+    private void checkPlugin(Ignite ig, int act, int deAct) {
+        IgnitePlugin pl = ig.plugin(StanByClusterTestProvider.NAME);
+
+        assertNotNull(pl);
+
+        StanByClusterTestProvider plugin = (StanByClusterTestProvider)pl;
+
+        assertEquals(act, plugin.actCnt.get());
+        assertEquals(deAct, plugin.deActCnt.get());
+    }
+
+    /**
      *
      */
     private static class NodeFilterIgnoreByName implements IgnitePredicate<ClusterNode> {
@@ -292,6 +359,103 @@ public class IgniteStandByClusterTest extends GridCommonAbstractTest {
     /**
      *
      */
+    public static class StanByClusterTestProvider implements PluginProvider, IgnitePlugin, IgniteChangeGlobalStateSupport {
+        /** */
+        static final String NAME = "StanByClusterTestProvider";
+
+        /** */
+        final AtomicInteger actCnt = new AtomicInteger();
+
+        /** */
+        final AtomicInteger deActCnt = new AtomicInteger();
+
+        /** {@inheritDoc} */
+        @Override public String name() {
+            return NAME;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String version() {
+            return "1.0";
+        }
+
+        /** {@inheritDoc} */
+        @Override public String copyright() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void initExtensions(
+            PluginContext ctx,
+            ExtensionRegistry registry
+        ) throws IgniteCheckedException {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public CachePluginProvider createCacheProvider(CachePluginContext ctx) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void start(PluginContext ctx) throws IgniteCheckedException {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public void stop(boolean cancel) throws IgniteCheckedException {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public void onIgniteStart() throws IgniteCheckedException {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public void onIgniteStop(boolean cancel) {
+
+        }
+
+        /** {@inheritDoc} */
+        @Nullable @Override public Serializable provideDiscoveryData(UUID nodeId) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void receiveDiscoveryData(UUID nodeId, Serializable data) {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public void validateNewNode(ClusterNode node) throws PluginValidationException {
+
+        }
+
+        /** {@inheritDoc} */
+        @Nullable @Override public Object createComponent(PluginContext ctx, Class cls) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgnitePlugin plugin() {
+            return this;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void onActivate(GridKernalContext kctx) throws IgniteCheckedException {
+            actCnt.incrementAndGet();
+        }
+
+        /** {@inheritDoc} */
+        @Override public void onDeActivate(GridKernalContext kctx) {
+            deActCnt.incrementAndGet();
+        }
+    }
+
+    /**
+     *
+     */
     @Override protected void beforeTest() throws Exception {
         super.beforeTest();
 


[40/46] ignite git commit: Merge remote-tracking branch 'community/ignite-2.1.2' into ignite-2.1.2

Posted by vo...@apache.org.
Merge remote-tracking branch 'community/ignite-2.1.2' into ignite-2.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7f16e6fc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7f16e6fc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7f16e6fc

Branch: refs/heads/ignite-2.1
Commit: 7f16e6fce3e69c39cdede955efde50336ef2e7f4
Parents: 2f1270e 1130a87
Author: sboikov <sb...@gridgain.com>
Authored: Thu Jul 6 14:53:42 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Jul 6 14:53:42 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/ClusterCachesInfo.java     |   4 +
 .../processors/cache/GridCacheAdapter.java      |  62 ++++---
 .../processors/cache/GridCacheAttributes.java   |   7 +
 .../processors/cache/GridCacheEntryEx.java      |   3 +-
 .../processors/cache/GridCacheMapEntry.java     |   2 +-
 .../store/GridCacheStoreManagerAdapter.java     |   1 +
 .../service/GridServiceProcessor.java           |  18 +++
 .../processors/service/GridServiceProxy.java    |   9 +-
 .../cache/IgniteCacheAbstractTest.java          |  17 ++
 ...titionEvictionDuringReadThroughSelfTest.java | 160 +++++++++++++++++++
 ...acheStoreSessionWriteBehindAbstractTest.java |  62 ++++---
 ...TxStoreSessionWriteBehindCoalescingTest.java |  88 ++++++++++
 ...ClientWriteBehindStoreNonCoalescingTest.java |  30 ++--
 .../GridServiceProcessorProxySelfTest.java      |  65 ++++++++
 .../testsuites/IgniteCacheTestSuite4.java       |   2 +
 .../testsuites/IgniteCacheTestSuite5.java       |   3 +
 .../Cache/PersistentStoreTest.cs                |  74 +++++++++
 17 files changed, 550 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7f16e6fc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/7f16e6fc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------


[23/46] ignite git commit: Code style

Posted by vo...@apache.org.
Code style


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d82b2b81
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d82b2b81
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d82b2b81

Branch: refs/heads/ignite-2.1
Commit: d82b2b81a487e244584a7101c6d0e3bc0ad38151
Parents: f4ad01b
Author: Ivan Rakov <iv...@gmail.com>
Authored: Wed Jul 5 20:05:52 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Wed Jul 5 20:05:52 2017 +0300

----------------------------------------------------------------------
 .../FinishSnapshotOperationAckDiscoveryMessage.java   |  8 +++-----
 .../cache/persistence/DbCheckpointListener.java       | 14 +++++++++++++-
 2 files changed, 16 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d82b2b81/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
index 83c512a..f6758e0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/FinishSnapshotOperationAckDiscoveryMessage.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.pagemem.snapshot;
 
 import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
+import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteUuid;
 import org.jetbrains.annotations.Nullable;
 
@@ -77,10 +78,7 @@ public class FinishSnapshotOperationAckDiscoveryMessage implements DiscoveryCust
 
     /** {@inheritDoc} */
     @Override public String toString() {
-        return "FinishSnapshotOperationAckDiscoveryMessage{" +
-            "id=" + id +
-            ", opId=" + opId +
-            ", success=" + success +
-            '}';
+        return S.toString(FinishSnapshotOperationAckDiscoveryMessage.class, this,
+            "id", id, "opId", opId, "success", success);
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/d82b2b81/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
index daaccff..0b28b6a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DbCheckpointListener.java
@@ -25,16 +25,28 @@ import org.apache.ignite.internal.util.typedef.T2;
  *
  */
 public interface DbCheckpointListener {
+    /**
+     * Context with information about current snapshots.
+     */
     public interface Context {
+        /**
+         *
+         */
         public boolean nextSnapshot();
 
+        /**
+         *
+         */
         public Map<T2<Integer, Integer>, T2<Integer, Integer>> partitionStatMap();
 
+        /**
+         * @param cacheOrGrpName Cache or group name.
+         */
         public boolean needToSnapshot(String cacheOrGrpName);
     }
 
     /**
      * @throws IgniteCheckedException If failed.
      */
-    public void onCheckpointBegin(Context context) throws IgniteCheckedException;
+    public void onCheckpointBegin(Context ctx) throws IgniteCheckedException;
 }


[31/46] ignite git commit: Merge branch 'ignite-2.1.2' of https://github.com/gridgain/apache-ignite into ignite-2.1.2

Posted by vo...@apache.org.
Merge branch 'ignite-2.1.2' of https://github.com/gridgain/apache-ignite into ignite-2.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3f6c1743
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3f6c1743
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3f6c1743

Branch: refs/heads/ignite-2.1
Commit: 3f6c1743b3ead0d861075f60d7d00ab238178333
Parents: c3401cb 6e371ec
Author: Alexey Kukushkin <Al...@yahoo.com>
Authored: Thu Jul 6 12:44:47 2017 +0300
Committer: Alexey Kukushkin <Al...@yahoo.com>
Committed: Thu Jul 6 12:44:47 2017 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/query/GridQueryProcessor.java     | 4 +++-
 .../java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java     | 1 -
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



[17/46] ignite git commit: ignite-2.1 Do not use 'compress' flag for GridDhtPartitionsFullMessage send in discovery message.

Posted by vo...@apache.org.
ignite-2.1 Do not use 'compress' flag for GridDhtPartitionsFullMessage send in discovery message.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0357c51c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0357c51c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0357c51c

Branch: refs/heads/ignite-2.1
Commit: 0357c51c68540fc14de83ea36f0cfdc7ec987b80
Parents: 15da654
Author: sboikov <sb...@gridgain.com>
Authored: Wed Jul 5 16:59:23 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Jul 5 16:59:23 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCachePartitionExchangeManager.java  | 7 +++++--
 .../dht/preloader/GridDhtPartitionsExchangeFuture.java       | 8 +++++---
 2 files changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0357c51c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index 22345d2..ac06295 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -955,7 +955,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
      * @param nodes Nodes.
      */
     private void sendAllPartitions(Collection<ClusterNode> nodes) {
-        GridDhtPartitionsFullMessage m = createPartitionsFullMessage(null, null, null, null);
+        GridDhtPartitionsFullMessage m = createPartitionsFullMessage(true, null, null, null, null);
 
         if (log.isDebugEnabled())
             log.debug("Sending all partitions [nodeIds=" + U.nodeIds(nodes) + ", msg=" + m + ']');
@@ -978,11 +978,14 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
     }
 
     /**
+     * @param compress {@code True} if possible to compress message (properly work only if prepareMarshall/
+     *     finishUnmarshall methods are called).
      * @param exchId Non-null exchange ID if message is created for exchange.
      * @param lastVer Last version.
      * @return Message.
      */
     public GridDhtPartitionsFullMessage createPartitionsFullMessage(
+        boolean compress,
         @Nullable final GridDhtPartitionExchangeId exchId,
         @Nullable GridCacheVersion lastVer,
         @Nullable IgniteDhtPartitionHistorySuppliersMap partHistSuppliers,
@@ -995,7 +998,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
             partsToReload
             );
 
-        m.compress(true);
+        m.compress(compress);
 
         final Map<Object, T2<Integer, GridDhtPartitionFullMap>> dupData = new HashMap<>();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/0357c51c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
index cea758a..2151101 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
@@ -1259,12 +1259,14 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte
     }
 
     /**
+     * @param compress Message compress flag.
      * @return Message.
      */
-    private GridDhtPartitionsFullMessage createPartitionsMessage() {
+    private GridDhtPartitionsFullMessage createPartitionsMessage(boolean compress) {
         GridCacheVersion last = lastVer.get();
 
         GridDhtPartitionsFullMessage m = cctx.exchange().createPartitionsFullMessage(
+            compress,
             exchangeId(),
             last != null ? last : cctx.versions().last(),
             partHistSuppliers,
@@ -1281,7 +1283,7 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte
      * @throws IgniteCheckedException If failed.
      */
     private void sendAllPartitions(Collection<ClusterNode> nodes) throws IgniteCheckedException {
-        GridDhtPartitionsFullMessage m = createPartitionsMessage();
+        GridDhtPartitionsFullMessage m = createPartitionsMessage(true);
 
         assert !nodes.contains(cctx.localNode());
 
@@ -1613,7 +1615,7 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte
 
             Map<Integer, Map<Integer, List<UUID>>> assignmentChange = fut.get();
 
-            GridDhtPartitionsFullMessage m = createPartitionsMessage();
+            GridDhtPartitionsFullMessage m = createPartitionsMessage(false);
 
             CacheAffinityChangeMessage msg = new CacheAffinityChangeMessage(exchId, m, assignmentChange);
 


[36/46] ignite git commit: IGNITE-5502 .NET: Persistent Store test

Posted by vo...@apache.org.
IGNITE-5502 .NET: Persistent Store test


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9675061e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9675061e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9675061e

Branch: refs/heads/ignite-2.1
Commit: 9675061e3f1d190d46f55d1de6ce962b9da7dc8c
Parents: d8a50e4
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Thu Jul 6 14:33:13 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Thu Jul 6 14:33:50 2017 +0300

----------------------------------------------------------------------
 .../Cache/PersistentStoreTest.cs                | 74 ++++++++++++++++++++
 1 file changed, 74 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9675061e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
index adb91ef..96ae47c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
@@ -17,7 +17,9 @@
 
 namespace Apache.Ignite.Core.Tests.Cache
 {
+    using System.IO;
     using Apache.Ignite.Core.Common;
+    using Apache.Ignite.Core.Impl;
     using Apache.Ignite.Core.PersistentStore;
     using NUnit.Framework;
 
@@ -26,6 +28,78 @@ namespace Apache.Ignite.Core.Tests.Cache
     /// </summary>
     public class PersistentStoreTest
     {
+        /** Temp dir for WAL. */
+        private readonly string _tempDir = IgniteUtils.GetTempDirectoryName();
+
+        /// <summary>
+        /// Tears down the test.
+        /// </summary>
+        [TearDown]
+        public void TearDown()
+        {
+            Ignition.StopAll(true);
+
+            if (Directory.Exists(_tempDir))
+            {
+                Directory.Delete(_tempDir, true);
+            }
+        }
+
+        /// <summary>
+        /// Tests that cache data survives node restart.
+        /// </summary>
+        [Test]
+        public void TestCacheDataSurvivesNodeRestart()
+        {
+            var cfg = new IgniteConfiguration(TestUtils.GetTestConfiguration())
+            {
+                PersistentStoreConfiguration = new PersistentStoreConfiguration
+                {
+                    PersistentStorePath = Path.Combine(_tempDir, "Store"),
+                    WalStorePath = Path.Combine(_tempDir, "WalStore"),
+                    WalArchivePath = Path.Combine(_tempDir, "WalArchive")
+                }
+            };
+
+            const string cacheName = "persistentCache";
+
+            // Start Ignite, put data, stop.
+            using (var ignite = Ignition.Start(cfg))
+            {
+                ignite.SetActive(true);
+
+                var cache = ignite.CreateCache<int, int>(cacheName);
+
+                cache[1] = 1;
+            }
+
+            // Verify directories.
+            Assert.IsTrue(Directory.Exists(cfg.PersistentStoreConfiguration.PersistentStorePath));
+            Assert.IsTrue(Directory.Exists(cfg.PersistentStoreConfiguration.WalStorePath));
+            Assert.IsTrue(Directory.Exists(cfg.PersistentStoreConfiguration.WalArchivePath));
+
+            // Start Ignite, verify data survival.
+            using (var ignite = Ignition.Start(cfg))
+            {
+                ignite.SetActive(true);
+
+                var cache = ignite.GetCache<int, int>(cacheName);
+
+                Assert.AreEqual(1, cache[1]);
+            }
+
+            // Delete store directory.
+            Directory.Delete(_tempDir, true);
+
+            // Start Ignite, verify data loss.
+            using (var ignite = Ignition.Start(cfg))
+            {
+                ignite.SetActive(true);
+
+                Assert.IsFalse(ignite.GetCacheNames().Contains(cacheName));
+            }
+        }
+
         /// <summary>
         /// Tests the grid activation with persistence (inactive by default).
         /// </summary>


[06/46] ignite git commit: IGNITE-5527: Prevent starvation in stripe pool on unstable topology.

Posted by vo...@apache.org.
IGNITE-5527: Prevent starvation in stripe pool on unstable topology.

(cherry picked from commit 97ea507)


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f3912902
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f3912902
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f3912902

Branch: refs/heads/ignite-2.1
Commit: f39129020999561e9def300b9cc136138ea3698e
Parents: 6c9d222
Author: Andrey V. Mashenkov <an...@gmail.com>
Authored: Fri Jun 16 19:54:26 2017 +0300
Committer: Andrey V. Mashenkov <an...@gmail.com>
Committed: Tue Jul 4 17:39:28 2017 +0300

----------------------------------------------------------------------
 .../internal/processors/cache/GridDeferredAckMessageSender.java   | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f3912902/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridDeferredAckMessageSender.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridDeferredAckMessageSender.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridDeferredAckMessageSender.java
index 89aa725..a8e8226 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridDeferredAckMessageSender.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridDeferredAckMessageSender.java
@@ -173,7 +173,8 @@ public abstract class GridDeferredAckMessageSender<T> {
          * @return {@code True} if request was handled, {@code false} if this buffer is filled and cannot be used.
          */
         public boolean add(T ver) {
-            readLock().lock();
+            if(!readLock().tryLock())
+                return false; // Here, writeLock is help by another thread and guard is already true.
 
             boolean snd = false;
 


[33/46] ignite git commit: IGNITE-5441 .NET: Propagate CacheStore exception stack traces to the caller node

Posted by vo...@apache.org.
IGNITE-5441 .NET: Propagate CacheStore exception stack traces to the caller node

This closes #2247


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c396b0bc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c396b0bc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c396b0bc

Branch: refs/heads/ignite-2.1
Commit: c396b0bcfa5f959013c94ece47dc1111fa650d97
Parents: 333e32b
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Thu Jul 6 13:03:50 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Thu Jul 6 13:03:50 2017 +0300

----------------------------------------------------------------------
 .../Cache/CacheAbstractTest.cs                  | 26 +++++++++-----------
 .../Cache/PersistentStoreTest.cs                |  1 -
 .../Cache/Store/CacheStoreTest.cs               | 21 +++++++++++++---
 .../Apache.Ignite.Core/Common/JavaException.cs  | 15 ++++++++++-
 .../Apache.Ignite.Core/Impl/ExceptionUtils.cs   |  5 ++--
 5 files changed, 44 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
index 351c25c..9e44720 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
@@ -2091,26 +2091,22 @@ namespace Apache.Ignite.Core.Tests.Cache
                 () => cache.Invoke(key, new T { ThrowErrNonSerializable = true }, arg), "ExpectedException");
         }
 
+        /// <summary>
+        /// Asserts that specified action throws a CacheEntryProcessorException.
+        /// </summary>
         private static void AssertThrowsCacheEntryProcessorException(Action action, string containsText = null)
         {
-            try
-            {
-                action();
+            var ex = Assert.Throws<CacheEntryProcessorException>(() => action());
 
-                Assert.Fail();
+            Assert.IsInstanceOf<JavaException>(ex.InnerException);
+
+            if (string.IsNullOrEmpty(containsText))
+            {
+                Assert.AreEqual(AddArgCacheEntryProcessor.ExceptionText, ex.GetBaseException().Message);
             }
-            catch (Exception ex)
+            else
             {
-                Assert.IsInstanceOf<CacheEntryProcessorException>(ex);
-
-                if (string.IsNullOrEmpty(containsText))
-                {
-                    Assert.IsNotNull(ex.InnerException);
-                    Assert.AreEqual(AddArgCacheEntryProcessor.ExceptionText, ex.InnerException.Message);
-                }
-                else
-                    Assert.IsTrue(ex.ToString().Contains(containsText), 
-                        "Expected: " + containsText + ", actual: " + ex);
+                Assert.IsTrue(ex.ToString().Contains(containsText), "Expected: " + containsText + ", actual: " + ex);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
index cc72147..adb91ef 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistentStoreTest.cs
@@ -18,7 +18,6 @@
 namespace Apache.Ignite.Core.Tests.Cache
 {
     using Apache.Ignite.Core.Common;
-    using Apache.Ignite.Core.Configuration;
     using Apache.Ignite.Core.PersistentStore;
     using NUnit.Framework;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
index 12c442d..e05f4bd 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTest.cs
@@ -24,6 +24,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
     using Apache.Ignite.Core.Cache.Store;
+    using Apache.Ignite.Core.Common;
     using Apache.Ignite.Core.Impl;
     using NUnit.Framework;
 
@@ -203,6 +204,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
             Assert.AreEqual(1, cache.GetSize());
         }
 
+        /// <summary>
+        /// Tests that exceptions from user code are propagated properly.
+        /// </summary>
         [Test]
         public void TestExceptions()
         {
@@ -211,7 +215,18 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
             cache.Put(1, "val");
 
             CacheTestStore.ThrowError = true;
-            CheckCustomStoreError(Assert.Throws<CacheStoreException>(() => cache.Put(-2, "fail")).InnerException);
+            
+            var ex = Assert.Throws<CacheStoreException>(() => cache.Put(-2, "fail"));
+
+            Assert.IsTrue(ex.ToString().Contains(
+                "at Apache.Ignite.Core.Tests.Cache.Store.CacheTestStore.ThrowIfNeeded"));  // Check proper stack trace.
+
+            Assert.IsNotNull(ex.InnerException);  // RollbackException.
+
+            var javaEx = ex.InnerException.InnerException as JavaException;
+            Assert.IsNotNull(javaEx);
+
+            CheckCustomStoreError(javaEx.InnerException);
 
             // TODO: IGNITE-4535
             //cache.LocalEvict(new[] {1});
@@ -599,11 +614,9 @@ namespace Apache.Ignite.Core.Tests.Cache.Store
         /// </summary>
         private static void CheckCustomStoreError(Exception err)
         {
-            var customErr = err as CacheTestStore.CustomStoreException ??
-                         err.InnerException as CacheTestStore.CustomStoreException;
+            var customErr = err.GetBaseException() as CacheTestStore.CustomStoreException;
 
             Assert.IsNotNull(customErr);
-
             Assert.AreEqual(customErr.Message, customErr.Details);
         }
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
index 1988335..e6c6f7b 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
@@ -62,7 +62,20 @@ namespace Apache.Ignite.Core.Common
         /// <param name="javaMessage">Java exception message.</param>
         /// <param name="stackTrace">Java stack trace.</param>
         public JavaException(string javaClassName, string javaMessage, string stackTrace)
-            : base(stackTrace ?? javaMessage)
+            : this(javaClassName, javaMessage, stackTrace, null)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="JavaException" /> class.
+        /// </summary>
+        /// <param name="javaClassName">Java exception class name.</param>
+        /// <param name="javaMessage">Java exception message.</param>
+        /// <param name="stackTrace">Java stack trace.</param>
+        /// <param name="cause">The cause.</param>
+        public JavaException(string javaClassName, string javaMessage, string stackTrace, Exception cause)
+            : base(stackTrace ?? javaMessage, cause)
         {
             // Send stackTrace to base ctor because it has all information, including class names and messages.
             // Store ClassName and Message separately for mapping purposes.

http://git-wip-us.apache.org/repos/asf/ignite/blob/c396b0bc/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
index dd70f5a..ebfcc28 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs
@@ -121,9 +121,8 @@ namespace Apache.Ignite.Core.Impl
         public static Exception GetException(Ignite ignite, string clsName, string msg, string stackTrace,
             BinaryReader reader = null, Exception innerException = null)
         {
-            // Set JavaException as inner only if there is no InnerException.
-            if (innerException == null)
-                innerException = new JavaException(clsName, msg, stackTrace);
+            // Set JavaException as immediate inner.
+            innerException = new JavaException(clsName, msg, stackTrace, innerException);
 
             ExceptionFactory ctor;
 


[46/46] ignite git commit: Merge branch 'ignite-5710' into ignite-2.1.2

Posted by vo...@apache.org.
Merge branch 'ignite-5710' into ignite-2.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/31e9d3b1
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/31e9d3b1
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/31e9d3b1

Branch: refs/heads/ignite-2.1
Commit: 31e9d3b1701f083d1276a9ef24eb10dba6d7eb12
Parents: 3259e2b 516e73a
Author: vsisko <vs...@gridgain.com>
Authored: Fri Jul 7 15:29:28 2017 +0700
Committer: vsisko <vs...@gridgain.com>
Committed: Fri Jul 7 15:29:28 2017 +0700

----------------------------------------------------------------------
 .../frontend/app/data/pom-dependencies.json     |  5 ++++-
 .../configuration/generator/Maven.service.js    | 21 +++++++++++++-------
 2 files changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------



[03/46] ignite git commit: GG-12407: Backport [GG-12364] to 8.1.2 - skipCrc flag added

Posted by vo...@apache.org.
GG-12407: Backport [GG-12364] to 8.1.2 - skipCrc flag added


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f4f8562e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f4f8562e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f4f8562e

Branch: refs/heads/ignite-2.1
Commit: f4f8562e8b61e09e14aad61d0d5cf98a2c896101
Parents: 68c0281
Author: Ivan Rakov <iv...@gmail.com>
Authored: Fri Jun 30 20:47:45 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Fri Jun 30 20:47:45 2017 +0300

----------------------------------------------------------------------
 .../snapshot/SnapshotCheckParameters.java       | 71 ++++++++++++++++++++
 .../pagemem/snapshot/SnapshotOperation.java     | 26 +++++--
 2 files changed, 93 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f4f8562e/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java
new file mode 100644
index 0000000..e95e79d
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotCheckParameters.java
@@ -0,0 +1,71 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.ignite.internal.pagemem.snapshot;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.Collection;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Tuple for passing optional parameters of {@link SnapshotOperationType#CHECK}.
+ */
+public class SnapshotCheckParameters implements Serializable {
+    /** Optional paths. */
+    private final Collection<File> optionalPaths;
+
+    /** Flag for skipping CRC check. */
+    private final boolean skipCrc;
+
+    /**
+     * Factory method.
+     *
+     * @return Tuple with optional parameters or null if parameters are default.
+     *
+     * @param optionalPaths Optional paths.
+     * @param skipCrc Skip crc.
+     */
+    @Nullable public static SnapshotCheckParameters valueOf(Collection<File> optionalPaths, boolean skipCrc) {
+        if (optionalPaths == null && !skipCrc)
+            return null;
+
+        return new SnapshotCheckParameters(optionalPaths, skipCrc);
+    }
+
+    /**
+     * @param optionalPaths Optional paths.
+     * @param skipCrc Flag for skipping CRC check.
+     */
+    private SnapshotCheckParameters(Collection<File> optionalPaths, boolean skipCrc) {
+        this.optionalPaths = optionalPaths;
+        this.skipCrc = skipCrc;
+    }
+
+    /**
+     * @return Optional paths.
+     */
+    public Collection<File> optionalPaths() {
+        return optionalPaths;
+    }
+
+    /**
+     * @return Flag for skipping CRC check.
+     */
+    public boolean skipCrc() {
+        return skipCrc;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f4f8562e/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotOperation.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotOperation.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotOperation.java
index 2fe9f45d..863107a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotOperation.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/snapshot/SnapshotOperation.java
@@ -134,10 +134,18 @@ public class SnapshotOperation implements Serializable {
      * @param op Op.
      */
     public static Collection<File> getOptionalPathsParameter(SnapshotOperation op) {
-        assert (op.type() == SnapshotOperationType.CHECK ||
-                op.type() == SnapshotOperationType.RESTORE ||
-                op.type() == SnapshotOperationType.RESTORE_2_PHASE)
-            && (op.extraParameter() == null || op.extraParameter() instanceof Collection);
+        assert (op.type() == SnapshotOperationType.RESTORE ||
+            op.type() == SnapshotOperationType.RESTORE_2_PHASE)
+            && (op.extraParameter() == null || op.extraParameter() instanceof Collection)
+            || (op.type() == SnapshotOperationType.CHECK &&
+            (op.extraParameter() == null || op.extraParameter() instanceof SnapshotCheckParameters));
+
+        if (op.type() == SnapshotOperationType.CHECK) {
+            if (op.extraParameter() == null)
+                return null;
+            else
+                return ((SnapshotCheckParameters)op.extraParameter()).optionalPaths();
+        }
 
         return (Collection<File>)op.extraParameter();
     }
@@ -145,6 +153,16 @@ public class SnapshotOperation implements Serializable {
     /**
      * @param op Op.
      */
+    public static boolean getSkipCrcParameter(SnapshotOperation op) {
+        assert op.type() == SnapshotOperationType.CHECK &&
+            (op.extraParameter() == null | op.extraParameter() instanceof SnapshotCheckParameters);
+
+        return op.extraParameter() != null && ((SnapshotCheckParameters)op.extraParameter()).skipCrc();
+    }
+
+    /**
+     * @param op Op.
+     */
     public static Boolean getFullSnapshotParameter(SnapshotOperation op) {
         assert op.type() == SnapshotOperationType.CREATE && op.extraParameter() instanceof Boolean;
 


[14/46] ignite git commit: Diagnostic info for GridDhtTxFinishFuture.

Posted by vo...@apache.org.
Diagnostic info for GridDhtTxFinishFuture.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/58a937e5
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/58a937e5
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/58a937e5

Branch: refs/heads/ignite-2.1
Commit: 58a937e5310c62ccb557d8da959bc4ffa8bcca62
Parents: aa21a9b
Author: sboikov <sb...@gridgain.com>
Authored: Wed Jul 5 14:24:51 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Jul 5 14:24:51 2017 +0300

----------------------------------------------------------------------
 .../internal/IgniteDiagnosticMessage.java       |  4 ++-
 .../distributed/dht/GridDhtTxFinishFuture.java  | 33 +++++++++++++++++++-
 2 files changed, 35 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/58a937e5/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
index 075b0fe..6e6bac0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
@@ -413,7 +413,9 @@ public class IgniteDiagnosticMessage implements Message {
             for (IgniteInternalTx tx : ctx.cache().context().tm().activeTransactions()) {
                 if (dhtVer.equals(tx.xidVersion()) || nearVer.equals(tx.nearXidVersion())) {
                     sb.append(U.nl())
-                        .append("    [ver=").append(tx.xidVersion())
+                        .append("    ")
+                        .append(tx.getClass().getSimpleName())
+                        .append(" [ver=").append(tx.xidVersion())
                         .append(", nearVer=").append(tx.nearXidVersion())
                         .append(", topVer=").append(tx.topologyVersion())
                         .append(", state=").append(tx.state())

http://git-wip-us.apache.org/repos/asf/ignite/blob/58a937e5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
index 8a31bac..d8180b4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
@@ -26,6 +26,8 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.internal.IgniteDiagnosticAware;
+import org.apache.ignite.internal.IgniteDiagnosticPrepareContext;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.NodeStoppingException;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
@@ -35,6 +37,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 import org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxMapping;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
@@ -53,7 +56,7 @@ import static org.apache.ignite.transactions.TransactionState.COMMITTING;
  *
  */
 public final class GridDhtTxFinishFuture<K, V> extends GridCacheCompoundIdentityFuture<IgniteInternalTx>
-    implements GridCacheFuture<IgniteInternalTx> {
+    implements GridCacheFuture<IgniteInternalTx>, IgniteDiagnosticAware {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -554,6 +557,34 @@ public final class GridDhtTxFinishFuture<K, V> extends GridCacheCompoundIdentity
     }
 
     /** {@inheritDoc} */
+    @SuppressWarnings("unchecked")
+    @Override public void addDiagnosticRequest(IgniteDiagnosticPrepareContext ctx) {
+        if (!isDone()) {
+            for (IgniteInternalFuture fut : futures()) {
+                if (!fut.isDone()) {
+                    MiniFuture f = (MiniFuture)fut;
+
+                    if (!f.node().isLocal()) {
+                        GridCacheVersion dhtVer = tx.xidVersion();
+                        GridCacheVersion nearVer = tx.nearXidVersion();
+
+                        ctx.remoteTxInfo(f.node().id(), dhtVer, nearVer, "GridDhtTxFinishFuture " +
+                            "waiting for response [node=" + f.node().id() +
+                            ", topVer=" + tx.topologyVersion() +
+                            ", dhtVer=" + dhtVer +
+                            ", nearVer=" + nearVer +
+                            ", futId=" + futId +
+                            ", miniId=" + f.futId +
+                            ", tx=" + tx + ']');
+
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
     @Override public String toString() {
         Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() {
             @SuppressWarnings("unchecked")


[44/46] ignite git commit: IGNITE-5710 Change H2 version in depend to Ignite version.

Posted by vo...@apache.org.
IGNITE-5710 Change H2 version in depend to Ignite version.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/516e73a4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/516e73a4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/516e73a4

Branch: refs/heads/ignite-2.1
Commit: 516e73a4baf21c86f46bee03a00e336db3ffe567
Parents: 64d6c98
Author: vsisko <vs...@gridgain.com>
Authored: Fri Jul 7 15:19:08 2017 +0700
Committer: vsisko <vs...@gridgain.com>
Committed: Fri Jul 7 15:19:08 2017 +0700

----------------------------------------------------------------------
 .../frontend/app/data/pom-dependencies.json     |  5 ++++-
 .../configuration/generator/Maven.service.js    | 21 +++++++++++++-------
 2 files changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/516e73a4/modules/web-console/frontend/app/data/pom-dependencies.json
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/data/pom-dependencies.json b/modules/web-console/frontend/app/data/pom-dependencies.json
index 3e0543b..945e3f5 100644
--- a/modules/web-console/frontend/app/data/pom-dependencies.json
+++ b/modules/web-console/frontend/app/data/pom-dependencies.json
@@ -14,7 +14,10 @@
     "Generic": {"groupId": "com.mchange", "artifactId": "c3p0", "version": "0.9.5.2"},
     "MySQL": {"groupId": "mysql", "artifactId": "mysql-connector-java", "version": "5.1.40"},
     "PostgreSQL": {"groupId": "org.postgresql", "artifactId": "postgresql", "version": "9.4.1212.jre7"},
-    "H2": {"groupId": "com.h2database", "artifactId": "h2", "version": "1.4.191"},
+    "H2": {"groupId": "com.h2database", "artifactId": "h2", "version": [
+        {"range": ["1.0.0", "2.0.0"], "version": "1.4.191"},
+        {"range": "2.0.0", "version": "1.4.195"}
+    ]},
     "Oracle": {"groupId": "com.oracle.jdbc", "artifactId": "ojdbc7", "version": "12.1.0.2", "jar": "ojdbc7.jar"},
     "DB2": {"groupId": "ibm", "artifactId": "jdbc", "version": "4.21.29", "jar": "db2jcc4.jar"},
     "SQLServer": {"groupId": "microsoft", "artifactId": "jdbc", "version": "4.2", "jar": "sqljdbc41.jar"}

http://git-wip-us.apache.org/repos/asf/ignite/blob/516e73a4/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js b/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js
index da098fc..700da4a 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js
@@ -16,6 +16,9 @@
  */
 
 import StringBuilder from './StringBuilder';
+import VersionService from 'app/modules/configuration/Version.service';
+
+const versionService = new VersionService();
 
 // Java built-in class names.
 import POM_DEPENDENCIES from 'app/data/pom-dependencies.json';
@@ -39,13 +42,17 @@ export default class IgniteMavenGenerator {
         deps.add({groupId, artifactId, version, jar});
     }
 
-    pickDependency(deps, key, dfltVer) {
+    pickDependency(deps, key, dfltVer, igniteVer) {
+        const extractVersion = (version) => {
+            return _.isArray(version) ? _.find(version, (v) => versionService.since(igniteVer, v.range)).version : version;
+        };
+
         if (!_.has(POM_DEPENDENCIES, key))
             return;
 
         const {groupId, artifactId, version, jar} = POM_DEPENDENCIES[key];
 
-        this.addDependency(deps, groupId || 'org.apache.ignite', artifactId, version || dfltVer, jar);
+        this.addDependency(deps, groupId || 'org.apache.ignite', artifactId, extractVersion(version) || dfltVer, jar);
     }
 
     addResource(sb, dir, exclude) {
@@ -139,9 +146,9 @@ export default class IgniteMavenGenerator {
      * @param deps Already added dependencies.
      * @param storeFactory Store factory to add dependency.
      */
-    storeFactoryDependency(deps, storeFactory) {
+    storeFactoryDependency(deps, storeFactory, igniteVer) {
         if (storeFactory.dialect && (!storeFactory.connectVia || storeFactory.connectVia === 'DataSource'))
-            this.pickDependency(deps, storeFactory.dialect);
+            this.pickDependency(deps, storeFactory.dialect, null, igniteVer);
     }
 
     collectDependencies(cluster, targetVer) {
@@ -167,7 +174,7 @@ export default class IgniteMavenGenerator {
 
         _.forEach(caches, (cache) => {
             if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind)
-                this.storeFactoryDependency(storeDeps, cache.cacheStoreFactory[cache.cacheStoreFactory.kind]);
+                this.storeFactoryDependency(storeDeps, cache.cacheStoreFactory[cache.cacheStoreFactory.kind], igniteVer);
 
             if (_.get(cache, 'nodeFilter.kind') === 'Exclude')
                 this.addDependency(deps, 'org.apache.ignite', 'ignite-extdata-p2p', igniteVer);
@@ -177,14 +184,14 @@ export default class IgniteMavenGenerator {
             const store = cluster.discovery.Jdbc;
 
             if (store.dataSourceBean && store.dialect)
-                this.storeFactoryDependency(storeDeps, cluster.discovery.Jdbc);
+                this.storeFactoryDependency(storeDeps, cluster.discovery.Jdbc, igniteVer);
         }
 
         _.forEach(cluster.checkpointSpi, (spi) => {
             if (spi.kind === 'S3')
                 this.pickDependency(deps, spi.kind, igniteVer);
             else if (spi.kind === 'JDBC')
-                this.storeFactoryDependency(storeDeps, spi.JDBC);
+                this.storeFactoryDependency(storeDeps, spi.JDBC, igniteVer);
         });
 
         if (_.get(cluster, 'hadoopConfiguration.mapReducePlanner.kind') === 'Weighted' ||


[35/46] ignite git commit: Fixed "IGNITE-5390 But in IgniteCacheTxStoreSessionWriteBehindCoalescingTest"

Posted by vo...@apache.org.
Fixed "IGNITE-5390 But in IgniteCacheTxStoreSessionWriteBehindCoalescingTest"

Signed-off-by: nikolay_tikhonov <nt...@gridgain.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d8a50e47
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d8a50e47
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d8a50e47

Branch: refs/heads/ignite-2.1
Commit: d8a50e47a51718c9ef202375b324695b78225813
Parents: 1cf402f
Author: Alexander Belyak <al...@xored.com>
Authored: Thu Jul 6 14:28:22 2017 +0300
Committer: nikolay_tikhonov <nt...@gridgain.com>
Committed: Thu Jul 6 14:32:27 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/ClusterCachesInfo.java     |  4 +
 .../processors/cache/GridCacheAttributes.java   |  7 ++
 .../store/GridCacheStoreManagerAdapter.java     |  1 +
 .../cache/IgniteCacheAbstractTest.java          | 17 ++++
 ...acheStoreSessionWriteBehindAbstractTest.java | 62 +++++++++-----
 ...TxStoreSessionWriteBehindCoalescingTest.java | 88 ++++++++++++++++++++
 ...ClientWriteBehindStoreNonCoalescingTest.java | 30 ++++---
 .../testsuites/IgniteCacheTestSuite4.java       |  2 +
 8 files changed, 180 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
index 5452bd2..5aca8c9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
@@ -263,6 +263,10 @@ class ClusterCachesInfo {
                 "Write behind batch size", locAttr.writeBehindBatchSize(), rmtAttr.writeBehindBatchSize(),
                 false);
 
+            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindCoalescing",
+                "Write behind coalescing", locAttr.writeBehindCoalescing(), rmtAttr.writeBehindCoalescing(),
+                false);
+
             CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindEnabled",
                 "Write behind enabled", locAttr.writeBehindEnabled(), rmtAttr.writeBehindEnabled(), false);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java
index dca4286..32871ea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java
@@ -266,6 +266,13 @@ public class GridCacheAttributes implements Serializable {
     }
 
     /**
+     * @return Write coalescing flag.
+     */
+    public boolean writeBehindCoalescing() {
+        return ccfg.getWriteBehindCoalescing();
+    }
+
+    /**
      * @return Interceptor class name.
      */
     public String interceptorClassName() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
index 8ff2f5a..c02e2c7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
@@ -185,6 +185,7 @@ public abstract class GridCacheStoreManagerAdapter extends GridCacheManagerAdapt
         store.setFlushThreadCount(cfg.getWriteBehindFlushThreadCount());
         store.setFlushFrequency(cfg.getWriteBehindFlushFrequency());
         store.setBatchSize(cfg.getWriteBehindBatchSize());
+        store.setWriteCoalescing(cfg.getWriteBehindCoalescing());
 
         return store;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractTest.java
index c5cb715..34a811b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractTest.java
@@ -144,6 +144,9 @@ public abstract class IgniteCacheAbstractTest extends GridCommonAbstractTest {
             cfg.setReadThrough(true);
             cfg.setWriteThrough(true);
             cfg.setLoadPreviousValue(true);
+
+            cfg.setWriteBehindEnabled(writeBehindEnabled());
+            cfg.setWriteBehindCoalescing(writeBehindCoalescing());
         }
 
         if (cacheMode() == PARTITIONED)
@@ -162,6 +165,20 @@ public abstract class IgniteCacheAbstractTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @return write behind enabled flag.
+     */
+    protected boolean writeBehindEnabled() {
+        return false;
+    }
+
+    /**
+     * @return write behind coalescing flag.
+     */
+    protected boolean writeBehindCoalescing() {
+        return true;
+    }
+
+    /**
      * @return Cache loader factory.
      */
     protected Factory<? extends CacheLoader> loaderFactory() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionWriteBehindAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionWriteBehindAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionWriteBehindAbstractTest.java
index dcbb63f..7ad240d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionWriteBehindAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionWriteBehindAbstractTest.java
@@ -49,6 +49,9 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
     private static volatile CountDownLatch latch;
 
     /** */
+    protected static volatile CountDownLatch entLatch;
+
+    /** */
     private static volatile ExpectedData expData;
 
     /** {@inheritDoc} */
@@ -66,36 +69,42 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
         return null;
     }
 
-    /** {@inheritDoc} */
+    /**
+     * @param igniteInstanceName Ignite instance name.
+     * @return Cache configuration.
+     * @throws Exception In case of error.
+     */
     @SuppressWarnings("unchecked")
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+    protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
+        CacheConfiguration ccfg0 = super.cacheConfiguration(igniteInstanceName);
 
-        assert cfg.getCacheConfiguration().length == 1;
-
-        CacheConfiguration ccfg0 = cfg.getCacheConfiguration()[0];
 
         ccfg0.setReadThrough(true);
         ccfg0.setWriteThrough(true);
         ccfg0.setWriteBehindBatchSize(10);
         ccfg0.setWriteBehindFlushSize(10);
-        ccfg0.setWriteBehindFlushFrequency(60_000);
+        ccfg0.setWriteBehindFlushFrequency(600);
         ccfg0.setWriteBehindEnabled(true);
 
         ccfg0.setCacheStoreFactory(singletonFactory(new TestStore()));
 
-        CacheConfiguration ccfg1 = cacheConfiguration(igniteInstanceName);
+        return ccfg0;
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings("unchecked")
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 
-        ccfg1.setReadThrough(true);
-        ccfg1.setWriteThrough(true);
-        ccfg1.setWriteBehindBatchSize(10);
-        ccfg1.setWriteBehindFlushSize(10);
-        ccfg1.setWriteBehindFlushFrequency(60_000);
-        ccfg1.setWriteBehindEnabled(true);
+        assert cfg.getCacheConfiguration().length == 1;
 
-        ccfg1.setName(CACHE_NAME1);
+        CacheConfiguration ccfg0 = cacheConfiguration(igniteInstanceName);
+
+        ccfg0.setName(DEFAULT_CACHE_NAME);
+
+        CacheConfiguration ccfg1 = cacheConfiguration(igniteInstanceName);
 
-        ccfg1.setCacheStoreFactory(singletonFactory(new TestStore()));
+        ccfg1.setName(CACHE_NAME1);
 
         cfg.setCacheConfiguration(ccfg0, ccfg1);
 
@@ -120,6 +129,7 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
 
         try {
             latch = new CountDownLatch(2);
+            entLatch = new CountDownLatch(11);
 
             expData = new ExpectedData("writeAll", cacheName);
 
@@ -127,13 +137,17 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
                 cache.put(i, i);
 
             assertTrue(latch.await(10_000, TimeUnit.MILLISECONDS));
+
+            assertTrue(entLatch.await(10_000,TimeUnit.MILLISECONDS));
         }
         finally {
             latch = null;
+            entLatch = null;
         }
 
         try {
             latch = new CountDownLatch(2);
+            entLatch = new CountDownLatch(11);
 
             expData = new ExpectedData("deleteAll", cacheName);
 
@@ -141,16 +155,20 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
                 cache.remove(i);
 
             assertTrue(latch.await(10_000, TimeUnit.MILLISECONDS));
+
+            assertTrue(entLatch.await(10_000,TimeUnit.MILLISECONDS));
         }
         finally {
             latch = null;
+            entLatch = null;
         }
     }
 
     /**
      *
      */
-    private class TestStore implements CacheStore<Object, Object> {
+    protected class TestStore implements CacheStore<Object, Object> {
+
         /** Auto-injected store session. */
         @CacheStoreSessionResource
         private CacheStoreSession ses;
@@ -191,10 +209,13 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
         /** {@inheritDoc} */
         @Override public void writeAll(Collection<Cache.Entry<?, ?>> entries) throws CacheWriterException {
             log.info("writeAll: " + entries);
-
+            
             assertTrue("Unexpected entries: " + entries, entries.size() == 10 || entries.size() == 1);
 
             checkSession("writeAll");
+
+            for (int i = 0; i < entries.size(); i++)
+                entLatch.countDown();
         }
 
         /** {@inheritDoc} */
@@ -209,6 +230,9 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
             assertTrue("Unexpected keys: " + keys, keys.size() == 10 || keys.size() == 1);
 
             checkSession("deleteAll");
+
+            for (int i = 0; i < keys.size(); i++)
+                entLatch.countDown();
         }
 
         /**
@@ -221,7 +245,7 @@ public abstract class IgniteCacheStoreSessionWriteBehindAbstractTest extends Ign
         /**
          * @param mtd Called stored method.
          */
-        private void checkSession(String mtd) {
+        protected void checkSession(String mtd) {
             assertNotNull(ignite);
 
             CacheStoreSession ses = session();

http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionWriteBehindCoalescingTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionWriteBehindCoalescingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionWriteBehindCoalescingTest.java
new file mode 100644
index 0000000..58cc380
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionWriteBehindCoalescingTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache.integration;
+
+import java.util.Collection;
+import javax.cache.Cache;
+import javax.cache.integration.CacheWriterException;
+import org.apache.ignite.cache.CacheAtomicityMode;
+import org.apache.ignite.configuration.CacheConfiguration;
+
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+
+/**
+ * Integration test write behind cache store with {@link CacheConfiguration#getWriteBehindCoalescing()}={@code False}
+ * parameter.
+ */
+public class IgniteCacheTxStoreSessionWriteBehindCoalescingTest extends IgniteCacheStoreSessionWriteBehindAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected CacheAtomicityMode atomicityMode() {
+        return TRANSACTIONAL;
+    }
+
+    /**
+     * @param igniteInstanceName Ignite instance name.
+     * @return Cache configuration.
+     * @throws Exception In case of error.
+     */
+    @SuppressWarnings("unchecked")
+    protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
+        CacheConfiguration ccfg = super.cacheConfiguration(igniteInstanceName);
+
+        ccfg.setWriteBehindCoalescing(false);
+
+        ccfg.setCacheStoreFactory(singletonFactory(new TestNonCoalescingStore()));
+
+        return ccfg;
+    }
+
+    /**
+     *
+     */
+    private class TestNonCoalescingStore extends TestStore {
+
+        /** {@inheritDoc} */
+        @Override public void writeAll(Collection<Cache.Entry<?, ?>> entries) throws CacheWriterException {
+            log.info("writeAll: " + entries);
+
+            assertTrue("Unexpected entries: " + entries, entries.size() <= 10);
+
+            checkSession("writeAll");
+
+            for (int i = 0; i < entries.size(); i++)
+                entLatch.countDown();
+        }
+
+        /** {@inheritDoc} */
+        @Override public void delete(Object key) throws CacheWriterException {
+            fail();
+        }
+
+        /** {@inheritDoc} */
+        @Override public void deleteAll(Collection<?> keys) throws CacheWriterException {
+            log.info("deleteAll: " + keys);
+
+            assertTrue("Unexpected keys: " + keys, keys.size() <= 10);
+
+            checkSession("deleteAll");
+
+            for (int i = 0; i < keys.size(); i++)
+                entLatch.countDown();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/IgnteCacheClientWriteBehindStoreNonCoalescingTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/IgnteCacheClientWriteBehindStoreNonCoalescingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/IgnteCacheClientWriteBehindStoreNonCoalescingTest.java
index 6a75dbd..4ffa973 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/IgnteCacheClientWriteBehindStoreNonCoalescingTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/IgnteCacheClientWriteBehindStoreNonCoalescingTest.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Random;
 import java.util.Set;
 import javax.cache.Cache;
 import javax.cache.configuration.Factory;
@@ -36,6 +37,7 @@ import org.apache.ignite.cache.store.CacheStoreAdapter;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAbstractTest;
+import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
 import org.apache.ignite.lang.IgniteBiInClosure;
 import org.apache.ignite.lang.IgniteFuture;
 
@@ -70,6 +72,14 @@ public class IgnteCacheClientWriteBehindStoreNonCoalescingTest extends IgniteCac
         return new TestIncrementStoreFactory();
     }
 
+    /** {@inheritDoc} */
+    @Override protected boolean writeBehindEnabled() { return true;}
+
+    /** {@inheritDoc} */
+    @Override protected boolean writeBehindCoalescing() { return false;}
+
+    private static Random rnd = new Random();
+
     /**
      * @throws Exception If failed.
      */
@@ -81,35 +91,30 @@ public class IgnteCacheClientWriteBehindStoreNonCoalescingTest extends IgniteCac
         assertEquals(cache.getConfiguration(CacheConfiguration.class).getCacheStoreFactory().getClass(),
             TestIncrementStoreFactory.class);
 
-        Set<Integer> keys = new HashSet<>();
-
-        for (int i = 0; i < 1000; i++) {
-            keys.add(i);
-
+        for (int i = 0; i < CacheConfiguration.DFLT_WRITE_BEHIND_FLUSH_SIZE * 2; i++) {
             cache.put(i, i);
         }
 
         Collection<IgniteFuture<?>> futs = new ArrayList<>();
 
-        for (int i = 0; i < 100; i++)
-            futs.add(updateKeys(cache, keys));
+        for (int i = 0; i < 1000; i++)
+            futs.add(updateKey(cache));
 
         for (IgniteFuture<?> fut : futs)
             fut.get();
     }
 
     /**
-     * Update specified keys in async mode.
+     * Update random key in async mode.
      *
      * @param cache Cache to use.
-     * @param keys Keys to update.
      * @return IgniteFuture.
      */
-    private IgniteFuture<?>  updateKeys(IgniteCache<Integer, Integer> cache, Set<Integer> keys) {
+    private IgniteFuture<?>  updateKey(IgniteCache<Integer, Integer> cache) {
         IgniteCache asyncCache = cache.withAsync();
 
         // Using EntryProcessor.invokeAll to increment every value in place.
-        asyncCache.invokeAll(keys, new EntryProcessor<Integer, Integer, Object>() {
+        asyncCache.invoke(rnd.nextInt(100), new EntryProcessor<Integer, Integer, Object>() {
             @Override public Object process(MutableEntry<Integer, Integer> entry, Object... arguments)
                 throws EntryProcessorException {
                 entry.setValue(entry.getValue() + 1);
@@ -150,7 +155,8 @@ public class IgnteCacheClientWriteBehindStoreNonCoalescingTest extends IgniteCac
         @Override public void write(Cache.Entry<? extends Object, ? extends Object> entry) {
             Object oldVal = storeMap.put(entry.getKey(), entry.getValue());
 
-            if (oldVal instanceof Integer && entry.getValue() instanceof Integer) {
+
+            if (oldVal != null) {
                 Integer oldInt = (Integer) oldVal;
                 Integer newInt = (Integer)entry.getValue();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d8a50e47/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java
index 1b35acb..45f575e 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java
@@ -134,6 +134,7 @@ import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxNoLo
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxNoReadThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxNoWriteThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxStoreSessionTest;
+import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxStoreSessionWriteBehindCoalescingTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxStoreSessionWriteBehindTest;
 import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryLocalAtomicSwapDisabledSelfTest;
 import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryLocalTransactionalSelfTest;
@@ -172,6 +173,7 @@ public class IgniteCacheTestSuite4 extends TestSuite {
         suite.addTestSuite(IgniteCacheTxStoreSessionTest.class);
         suite.addTestSuite(IgniteCacheAtomicStoreSessionWriteBehindTest.class);
         suite.addTestSuite(IgniteCacheTxStoreSessionWriteBehindTest.class);
+        suite.addTestSuite(IgniteCacheTxStoreSessionWriteBehindCoalescingTest.class);
 
         suite.addTestSuite(IgniteCacheAtomicNoReadThroughTest.class);
         suite.addTestSuite(IgniteCacheAtomicNearEnabledNoReadThroughTest.class);


[32/46] ignite git commit: IGNITE-5533: Proper index cleanup in H2 database during DROP TALBE. This closes #2167.

Posted by vo...@apache.org.
IGNITE-5533: Proper index cleanup in H2 database during DROP TALBE. This closes #2167.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/333e32b5
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/333e32b5
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/333e32b5

Branch: refs/heads/ignite-2.1
Commit: 333e32b58fd6e7341fcc14b862140f244b575315
Parents: 3f6c174
Author: Alexander Paschenko <al...@gmail.com>
Authored: Thu Jul 6 13:00:33 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Jul 6 13:00:33 2017 +0300

----------------------------------------------------------------------
 .../processors/query/h2/opt/GridH2Table.java    | 49 +++++++++++++++++-
 .../cache/index/H2DynamicTableSelfTest.java     | 53 ++++++++++++++++++++
 2 files changed, 101 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/333e32b5/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
index d656cc3..76d0258 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
@@ -40,7 +40,9 @@ import org.apache.ignite.internal.util.offheap.unsafe.GridUnsafeMemory;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.h2.command.ddl.CreateTableData;
+import org.h2.engine.DbObject;
 import org.h2.engine.Session;
+import org.h2.engine.SysProperties;
 import org.h2.index.Index;
 import org.h2.index.IndexType;
 import org.h2.index.SpatialIndex;
@@ -48,6 +50,7 @@ import org.h2.message.DbException;
 import org.h2.result.Row;
 import org.h2.result.SearchRow;
 import org.h2.result.SortOrder;
+import org.h2.schema.SchemaObject;
 import org.h2.table.IndexColumn;
 import org.h2.table.TableBase;
 import org.h2.table.TableType;
@@ -76,6 +79,9 @@ public class GridH2Table extends TableBase {
     /** */
     private final int pkIndexPos;
 
+    /** Total number of system indexes. */
+    private final int sysIdxsCnt;
+
     /** */
     private final Map<String, GridH2IndexBase> tmpIdxs = new HashMap<>();
 
@@ -184,6 +190,8 @@ public class GridH2Table extends TableBase {
 
         pkIndexPos = hasHashIndex ? 2 : 1;
 
+        sysIdxsCnt = idxs.size();
+
         final int segments = desc != null ? desc.context().config().getQueryParallelism() :
             // Get index segments count from PK index. Null desc can be passed from tests.
             index(pkIndexPos).segmentsCount();
@@ -449,6 +457,45 @@ public class GridH2Table extends TableBase {
         // No-op.
     }
 
+    /** {@inheritDoc} */
+    @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
+    @Override public void removeChildrenAndResources(Session ses) {
+        lock(true);
+
+        try {
+            super.removeChildrenAndResources(ses);
+
+            // Clear all user indexes registered in schema.
+            while (idxs.size() > sysIdxsCnt) {
+                Index idx = idxs.get(sysIdxsCnt);
+
+                if (idx.getName() != null && idx.getSchema().findIndex(ses, idx.getName()) == idx) {
+                    // This call implicitly removes both idx and its proxy, if any, from idxs.
+                    database.removeSchemaObject(ses, idx);
+
+                    // We have to call destroy here if we are who has removed this index from the table.
+                    if (idx instanceof GridH2IndexBase)
+                        ((GridH2IndexBase)idx).destroy();
+                }
+            }
+
+            if (SysProperties.CHECK) {
+                for (SchemaObject obj : database.getAllSchemaObjects(DbObject.INDEX)) {
+                    Index idx = (Index) obj;
+                    if (idx.getTable() == this)
+                        DbException.throwInternalError("index not dropped: " + idx.getName());
+                }
+            }
+
+            database.removeMeta(ses, getId());
+            invalidate();
+
+        }
+        finally {
+            unlock(true);
+        }
+    }
+
     /**
      * Destroy the table.
      */
@@ -791,7 +838,7 @@ public class GridH2Table extends TableBase {
             Index cloneIdx = createDuplicateIndexIfNeeded(idx);
 
             ArrayList<Index> newIdxs = new ArrayList<>(
-                    idxs.size() + ((cloneIdx == null) ? 1 : 2));
+                idxs.size() + ((cloneIdx == null) ? 1 : 2));
 
             newIdxs.addAll(idxs);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/333e32b5/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java
index 5975b4e..b0e69f1 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java
@@ -694,6 +694,59 @@ public class H2DynamicTableSelfTest extends AbstractSchemaSelfTest {
     }
 
     /**
+     * Tests behavior on sequential create and drop of a table and its index.
+     */
+    public void testTableAndIndexRecreate() {
+        execute("drop table if exists \"PUBLIC\".t");
+
+        // First let's check behavior without index name set
+        execute("create table \"PUBLIC\".t (a int primary key, b varchar(30))");
+
+        fillRecreatedTable();
+
+        execute("create index on \"PUBLIC\".t (b desc)");
+        execute("drop table \"PUBLIC\".t");
+
+        assertNull(client().cache("t"));
+
+        execute("create table \"PUBLIC\".t (a int primary key, b varchar(30))");
+
+        fillRecreatedTable();
+
+        execute("create index on \"PUBLIC\".t (b desc)");
+        execute("drop table \"PUBLIC\".t");
+
+        assertNull(client().cache("t"));
+
+        // And now let's do the same for the named index
+        execute("create table \"PUBLIC\".t (a int primary key, b varchar(30))");
+
+        fillRecreatedTable();
+
+        execute("create index namedIdx on \"PUBLIC\".t (b desc)");
+        execute("drop table \"PUBLIC\".t");
+
+        assertNull(client().cache("t"));
+
+        execute("create table \"PUBLIC\".t (a int primary key, b varchar(30))");
+
+        fillRecreatedTable();
+
+        execute("create index namedIdx on \"PUBLIC\".t (b desc)");
+        execute("drop table \"PUBLIC\".t");
+    }
+
+    /**
+     * Fill re-created table with data.
+     */
+    private void fillRecreatedTable() {
+        for (int j = 1; j < 10; j++) {
+            String s = Integer.toString(j);
+            execute("insert into \"PUBLIC\".t (a,b) values (" + s + ", '" + s + "')");
+        }
+    }
+
+    /**
      * Check that dynamic cache created with {@code CREATE TABLE} is correctly configured affinity wise.
      * @param cacheName Cache name to check.
      * @param affKeyFieldName Expected affinity key field name.


[04/46] ignite git commit: GG-12408: Backport [GG-12385] and reproducing tests to 8.1.2

Posted by vo...@apache.org.
GG-12408: Backport [GG-12385] and reproducing tests to 8.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fbf95975
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fbf95975
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fbf95975

Branch: refs/heads/ignite-2.1
Commit: fbf9597570211209f968d802e91efd997acf49e6
Parents: f4f8562
Author: Ivan Rakov <iv...@gmail.com>
Authored: Mon Jul 3 18:01:14 2017 +0300
Committer: Ivan Rakov <iv...@gmail.com>
Committed: Mon Jul 3 18:01:14 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheProcessor.java    | 20 +++++++++++++++++---
 .../service/GridServiceProcessor.java           |  9 ++++++++-
 2 files changed, 25 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/fbf95975/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index c425bfb..cbbfca0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -2114,9 +2114,12 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     ) {
         initCacheProxies(topVer, err);
 
-        if (exchActions != null && exchActions.systemCachesStarting() && exchActions.newClusterState() == null)
+        if (exchActions != null && exchActions.systemCachesStarting() && exchActions.newClusterState() == null) {
             ctx.dataStructures().restoreStructuresState(ctx);
 
+            ctx.service().updateUtilityCache();
+        }
+
         if (exchActions != null && err == null) {
             Collection<IgniteBiTuple<CacheGroupContext, Boolean>> stoppedGrps = null;
 
@@ -2601,7 +2604,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      */
     public IgniteInternalFuture<?> dynamicStartCaches(Collection<CacheConfiguration> ccfgList, boolean failIfExists,
         boolean checkThreadTx) {
-        return dynamicStartCaches(ccfgList, CacheType.USER, failIfExists, checkThreadTx);
+        return dynamicStartCaches(ccfgList, null, failIfExists, checkThreadTx);
     }
 
     /**
@@ -2627,11 +2630,22 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
         try {
             for (CacheConfiguration ccfg : ccfgList) {
+                CacheType ct = cacheType;
+
+                if (ct == null) {
+                    if (CU.isUtilityCache(ccfg.getName()))
+                        ct = CacheType.UTILITY;
+                    else if (internalCaches.contains(ccfg.getName()))
+                        ct = CacheType.INTERNAL;
+                    else
+                        ct = CacheType.USER;
+                }
+
                 DynamicCacheChangeRequest req = prepareCacheChangeRequest(
                     ccfg,
                     ccfg.getName(),
                     null,
-                    cacheType,
+                    ct,
                     false,
                     failIfExists,
                     true

http://git-wip-us.apache.org/repos/asf/ignite/blob/fbf95975/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
index 12be63b..3e77d2a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
@@ -224,7 +224,7 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
      * @throws IgniteCheckedException If failed.
      */
     private void onKernalStart0() throws IgniteCheckedException {
-        cache = ctx.cache().utilityCache();
+        updateUtilityCache();
 
         if (!ctx.clientNode())
             ctx.event().addDiscoveryEventListener(topLsnr, EVTS);
@@ -285,6 +285,13 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
             log.debug("Started service processor.");
     }
 
+    /**
+     *
+     */
+    public void updateUtilityCache() {
+        cache = ctx.cache().utilityCache();
+    }
+
     /** {@inheritDoc} */
     @Override public void onKernalStop(boolean cancel) {
         if (ctx.isDaemon())


[26/46] ignite git commit: 2.1 Removed extra add in pendingMsgs

Posted by vo...@apache.org.
2.1 Removed extra add in pendingMsgs


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/907d4a8e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/907d4a8e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/907d4a8e

Branch: refs/heads/ignite-2.1
Commit: 907d4a8e04ee96b78d4e53db69acf13d00798c91
Parents: dd30e58
Author: sboikov <sb...@gridgain.com>
Authored: Thu Jul 6 11:11:38 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Jul 6 11:11:38 2017 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/cache/GridCacheIoManager.java    | 5 -----
 1 file changed, 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/907d4a8e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
index f9d1114..1d2be13 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
@@ -244,11 +244,6 @@ public class GridCacheIoManager extends GridCacheSharedManagerAdapter {
 
                 final int stripe = curThread instanceof IgniteThread ? ((IgniteThread)curThread).stripe() : -1;
 
-                synchronized (pendingMsgs) {
-                    if (pendingMsgs.size() < 100)
-                        pendingMsgs.add(cacheMsg);
-                }
-
                 fut.listen(new CI1<IgniteInternalFuture<?>>() {
                     @Override public void apply(IgniteInternalFuture<?> t) {
                         Runnable c = new Runnable() {


[41/46] ignite git commit: 2.1 Added remote node pending messages in diagnostic info

Posted by vo...@apache.org.
2.1 Added remote node pending messages in diagnostic info


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9c6a65e2
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9c6a65e2
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9c6a65e2

Branch: refs/heads/ignite-2.1
Commit: 9c6a65e2723ea8bdb33dde89190a1b12799faf3a
Parents: 7f16e6f
Author: sboikov <sb...@gridgain.com>
Authored: Thu Jul 6 15:10:24 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Jul 6 15:10:24 2017 +0300

----------------------------------------------------------------------
 .../internal/IgniteDiagnosticMessage.java       |  8 +++++++
 .../IgniteDiagnosticPrepareContext.java         |  3 +++
 .../processors/cache/GridCacheIoManager.java    | 25 +++++++++++++-------
 .../GridCachePartitionExchangeManager.java      |  7 +++++-
 4 files changed, 33 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9c6a65e2/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
index 6e6bac0..bd4ec3a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticMessage.java
@@ -460,6 +460,14 @@ public class IgniteDiagnosticMessage implements Message {
     }
 
     /**
+     * @param sb String builder.
+     * @param ctx Context.
+     */
+    static void dumpPendingCacheMessages(StringBuilder sb, GridKernalContext ctx) {
+        ctx.cache().context().io().dumpPendingMessages(sb);
+    }
+
+    /**
      * @param ctx Context.
      * @param nodeId Target node ID.
      * @return Communication information future.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9c6a65e2/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticPrepareContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticPrepareContext.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticPrepareContext.java
index b55199a..416ef29 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticPrepareContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticPrepareContext.java
@@ -41,6 +41,7 @@ import static org.apache.ignite.internal.IgniteDiagnosticMessage.TxInfoClosure;
 import static org.apache.ignite.internal.IgniteDiagnosticMessage.dumpCommunicationInfo;
 import static org.apache.ignite.internal.IgniteDiagnosticMessage.dumpExchangeInfo;
 import static org.apache.ignite.internal.IgniteDiagnosticMessage.dumpNodeBasicInfo;
+import static org.apache.ignite.internal.IgniteDiagnosticMessage.dumpPendingCacheMessages;
 
 /**
  * Groups diagnostic closures by node/closure type.
@@ -193,6 +194,8 @@ public class IgniteDiagnosticPrepareContext {
 
                 sb.append(U.nl());
 
+                dumpPendingCacheMessages(sb, ctx);
+
                 sb.append(commInfo.get(10_000));
 
                 moreInfo(sb, ctx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9c6a65e2/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
index 1d2be13..9f1873e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
@@ -91,6 +91,7 @@ import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
 
 import static org.apache.ignite.internal.GridTopic.TOPIC_CACHE;
+import static org.apache.ignite.internal.util.IgniteUtils.nl;
 
 /**
  * Cache communication manager.
@@ -131,19 +132,25 @@ public class GridCacheIoManager extends GridCacheSharedManagerAdapter {
     private final List<GridCacheMessage> pendingMsgs = new ArrayList<>(MAX_STORED_PENDING_MESSAGES);
 
     /**
-     *
+     * @param sb String builder.
      */
-    public void dumpPendingMessages() {
+    public void dumpPendingMessages(StringBuilder sb) {
         synchronized (pendingMsgs) {
             if (pendingMsgs.isEmpty())
                 return;
 
-            diagnosticLog.info("Pending cache messages waiting for exchange [" +
-                "readyVer=" + cctx.exchange().readyAffinityVersion() +
-                ", discoVer=" + cctx.discovery().topologyVersion() + ']');
+            sb.append("Pending cache messages waiting for exchange [readyVer=").
+                append(cctx.exchange().readyAffinityVersion()).
+                append(", discoVer=").
+                append(cctx.discovery().topologyVersion()).append(']');
+
+            sb.append(nl());
 
-            for (GridCacheMessage msg : pendingMsgs)
-                diagnosticLog.info("Message [waitVer=" + msg.topologyVersion() + ", msg=" + msg + ']');
+            for (GridCacheMessage msg : pendingMsgs) {
+                sb.append("Message [waitVer=").append(msg.topologyVersion()).append(", msg=").append(msg).append(']');
+
+                sb.append(nl());
+            }
         }
     }
 
@@ -341,12 +348,12 @@ public class GridCacheIoManager extends GridCacheSharedManagerAdapter {
                     append(", desc=").append(descriptorForMessage(cacheMsg)).
                     append(']');
 
-                msg0.append(U.nl()).append("Registered listeners:");
+                msg0.append(nl()).append("Registered listeners:");
 
                 Map<Integer, IgniteBiInClosure[]> idxClsHandlers0 = msgHandlers.idxClsHandlers;
 
                 for (Map.Entry<Integer, IgniteBiInClosure[]> e : idxClsHandlers0.entrySet())
-                    msg0.append(U.nl()).append(e.getKey()).append("=").append(Arrays.toString(e.getValue()));
+                    msg0.append(nl()).append(e.getKey()).append("=").append(Arrays.toString(e.getValue()));
 
                 if (cctx.kernalContext().isStopping()) {
                     if (log.isDebugEnabled())

http://git-wip-us.apache.org/repos/asf/ignite/blob/9c6a65e2/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index b3cbd17..8506cde 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -1537,7 +1537,12 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
 
         cctx.affinity().dumpDebugInfo();
 
-        cctx.io().dumpPendingMessages();
+        StringBuilder pendingMsgs = new StringBuilder();
+
+        cctx.io().dumpPendingMessages(pendingMsgs);
+
+        if (pendingMsgs.length() > 0)
+            diagnosticLog.info(pendingMsgs.toString());
 
         if (IgniteSystemProperties.getBoolean(IGNITE_IO_DUMP_ON_TIMEOUT, false))
             cctx.gridIO().dumpStats();


[13/46] ignite git commit: IGNITE-5663: ODBC: Closing cursor do not reset prepared statement anymore

Posted by vo...@apache.org.
IGNITE-5663: ODBC: Closing cursor do not reset prepared statement anymore

(cherry picked from commit 64c156e)


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/301f310b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/301f310b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/301f310b

Branch: refs/heads/ignite-2.1
Commit: 301f310b6348b3f6fbe54b16d065569755e71bce
Parents: aa21a9b
Author: Igor Sapego <is...@gridgain.com>
Authored: Tue Jul 4 19:42:33 2017 +0300
Committer: Igor Sapego <is...@gridgain.com>
Committed: Wed Jul 5 14:21:40 2017 +0300

----------------------------------------------------------------------
 .../cpp/odbc-test/src/queries_test.cpp          | 61 ++++++++++++++++++++
 modules/platforms/cpp/odbc/src/odbc.cpp         |  2 +-
 modules/platforms/cpp/odbc/src/statement.cpp    |  3 -
 3 files changed, 62 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/301f310b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/src/queries_test.cpp b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
index 41bc1fc..263993c 100644
--- a/modules/platforms/cpp/odbc-test/src/queries_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
@@ -1934,5 +1934,66 @@ BOOST_AUTO_TEST_CASE(TestParamsNum)
     CheckParamsNum("INSERT INTO TestType(_key, strField) VALUES(?, ?)", 2);
 }
 
+BOOST_AUTO_TEST_CASE(TestExecuteAfterCursorClose)
+{
+    TestType in(1, 2, 3, 4, "5", 6.0f, 7.0, true, Guid(8, 9), MakeDateGmt(1987, 6, 5),
+        MakeTimeGmt(12, 48, 12), MakeTimestampGmt(1998, 12, 27, 1, 2, 3, 456));
+
+    cache1.Put(1, in);
+
+    Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=cache");
+
+    int64_t key = 0;
+    char strField[1024] = { 0 };
+    SQLLEN strFieldLen = 0;
+
+    // Binding columns.
+    SQLRETURN ret = SQLBindCol(stmt, 1, SQL_C_SLONG, &key, 0, 0);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    // Binding columns.
+    ret = SQLBindCol(stmt, 2, SQL_C_CHAR, &strField, sizeof(strField), &strFieldLen);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    // Just selecting everything to make sure everything is OK
+    SQLCHAR selectReq[] = "SELECT _key, strField FROM TestType";
+
+    ret = SQLPrepare(stmt, selectReq, sizeof(selectReq));
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    ret = SQLExecute(stmt);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    ret = SQLFreeStmt(stmt, SQL_CLOSE);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    ret = SQLExecute(stmt);
+
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    ret = SQLFetch(stmt);
+    
+    if (!SQL_SUCCEEDED(ret))
+        BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+    BOOST_CHECK_EQUAL(key, 1);
+
+    BOOST_CHECK_EQUAL(std::string(strField, strFieldLen), "5");
+
+    ret = SQLFetch(stmt);
+
+    BOOST_CHECK_EQUAL(ret, SQL_NO_DATA);
+}
 
 BOOST_AUTO_TEST_SUITE_END()

http://git-wip-us.apache.org/repos/asf/ignite/blob/301f310b/modules/platforms/cpp/odbc/src/odbc.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/odbc.cpp b/modules/platforms/cpp/odbc/src/odbc.cpp
index a738598..b450903 100644
--- a/modules/platforms/cpp/odbc/src/odbc.cpp
+++ b/modules/platforms/cpp/odbc/src/odbc.cpp
@@ -212,7 +212,7 @@ namespace ignite
     {
         using odbc::Statement;
 
-        LOG_MSG("SQLFreeStmt called");
+        LOG_MSG("SQLFreeStmt called [option=" << option << ']');
 
         Statement *statement = reinterpret_cast<Statement*>(stmt);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/301f310b/modules/platforms/cpp/odbc/src/statement.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/statement.cpp b/modules/platforms/cpp/odbc/src/statement.cpp
index 697f5b4..adc7d6b 100644
--- a/modules/platforms/cpp/odbc/src/statement.cpp
+++ b/modules/platforms/cpp/odbc/src/statement.cpp
@@ -745,9 +745,6 @@ namespace ignite
 
             SqlResult::Type result = currentQuery->Close();
 
-            if (result == SqlResult::AI_SUCCESS)
-                currentQuery.reset();
-
             return result;
         }
 


[18/46] ignite git commit: ignite-2.1 Do not use 'compress' flag for GridDhtPartitionsFullMessage send in discovery message.

Posted by vo...@apache.org.
ignite-2.1 Do not use 'compress' flag for GridDhtPartitionsFullMessage send in discovery message.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7504b38a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7504b38a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7504b38a

Branch: refs/heads/ignite-2.1
Commit: 7504b38a603e593fbb190e9e1e9da262cbb8f855
Parents: 0357c51
Author: sboikov <sb...@gridgain.com>
Authored: Wed Jul 5 17:07:54 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Jul 5 17:07:54 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCachePartitionExchangeManager.java      | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7504b38a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index ac06295..b3cbd17 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -1018,7 +1018,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
                 if (locMap != null) {
                     addFullPartitionsMap(m,
                         dupData,
-                        true,
+                        compress,
                         grp.groupId(),
                         locMap,
                         affCache.similarAffinityKey());
@@ -1036,7 +1036,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
             if (map != null) {
                 addFullPartitionsMap(m,
                     dupData,
-                    true,
+                    compress,
                     top.groupId(),
                     map,
                     top.similarAffinityKey());


[12/46] ignite git commit: Merge branch 'ignite-2.1' into ignite-2.1.2

Posted by vo...@apache.org.
Merge branch 'ignite-2.1' into ignite-2.1.2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/aa21a9b5
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/aa21a9b5
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/aa21a9b5

Branch: refs/heads/ignite-2.1
Commit: aa21a9b59ec0266b4fee16e02d2796e6e0d1a9b5
Parents: 9743fa3 f9f13cf
Author: devozerov <vo...@gridgain.com>
Authored: Wed Jul 5 14:18:32 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Wed Jul 5 14:18:32 2017 +0300

----------------------------------------------------------------------
 .../jdbc2/JdbcPreparedStatementSelfTest.java    |   35 +
 .../jdbc/JdbcPreparedStatementSelfTest.java     |   35 +
 .../thin/JdbcThinPreparedStatementSelfTest.java |   35 +
 .../PersistentStoreConfiguration.java           |   39 +-
 .../org/apache/ignite/events/EventType.java     |   12 +
 .../ignite/events/WalSegmentArchivedEvent.java  |   62 +
 .../apache/ignite/internal/GridComponent.java   |    4 +-
 .../ignite/internal/GridPluginComponent.java    |    2 +-
 .../apache/ignite/internal/IgniteKernal.java    |   33 +-
 .../internal/jdbc/JdbcPreparedStatement.java    |    6 +-
 .../internal/jdbc/thin/JdbcThinConnection.java  |    7 +-
 .../jdbc/thin/JdbcThinPreparedStatement.java    |    2 -
 .../internal/jdbc2/JdbcPreparedStatement.java   |   12 +-
 .../internal/managers/GridManagerAdapter.java   |    2 +-
 .../internal/managers/discovery/DiscoCache.java |   17 +-
 .../discovery/DiscoveryLocalJoinData.java       |  104 ++
 .../discovery/GridDiscoveryManager.java         |  128 +-
 .../pagemem/store/IgnitePageStoreManager.java   |    3 +-
 .../internal/pagemem/wal/record/WALRecord.java  |   11 +-
 .../processors/GridProcessorAdapter.java        |    2 +-
 .../cache/CacheAffinitySharedManager.java       |   67 +-
 .../processors/cache/CacheGroupContext.java     |    4 +-
 .../processors/cache/CacheGroupData.java        |    4 +-
 .../cache/ChangeGlobalStateMessage.java         |  120 --
 .../processors/cache/ClusterCachesInfo.java     |  493 +++++--
 .../internal/processors/cache/ClusterState.java |   38 -
 .../cache/DynamicCacheChangeRequest.java        |   52 +-
 .../processors/cache/ExchangeActions.java       |   37 +-
 .../processors/cache/GridCacheEventManager.java |    2 -
 .../cache/GridCacheEvictionManager.java         |    1 -
 .../processors/cache/GridCacheIoManager.java    |   13 +-
 .../processors/cache/GridCacheMvccManager.java  |    9 +-
 .../GridCachePartitionExchangeManager.java      |  423 +++---
 .../processors/cache/GridCacheProcessor.java    |  193 +--
 .../cache/GridCacheSharedContext.java           |   60 +-
 .../cache/GridCacheSharedManager.java           |    6 -
 .../cache/GridCacheSharedManagerAdapter.java    |   16 -
 .../processors/cache/PendingDiscoveryEvent.java |   61 +
 .../processors/cache/StateChangeRequest.java    |   77 ++
 .../binary/CacheObjectBinaryProcessorImpl.java  |    4 +-
 .../distributed/GridCacheTxRecoveryFuture.java  |    1 -
 .../distributed/dht/GridDhtCacheAdapter.java    |    1 -
 .../cache/distributed/dht/GridDhtGetFuture.java |    1 -
 .../distributed/dht/GridDhtGetSingleFuture.java |    2 -
 .../dht/GridDhtPartitionTopologyImpl.java       |   13 +-
 .../dht/GridDhtTopologyFutureAdapter.java       |    2 +-
 .../dht/GridPartitionedSingleGetFuture.java     |    3 -
 .../GridNearAtomicAbstractUpdateFuture.java     |    1 -
 .../dht/preloader/GridDhtForceKeysFuture.java   |    1 -
 .../dht/preloader/GridDhtPartitionDemander.java |    2 +
 .../GridDhtPartitionsExchangeFuture.java        |  228 +++-
 .../preloader/GridDhtPartitionsFullMessage.java |   44 +-
 .../GridDhtPartitionsSingleMessage.java         |   38 +-
 .../dht/preloader/GridDhtPreloader.java         |    2 +-
 .../distributed/near/GridNearGetFuture.java     |    2 -
 .../near/GridNearTxPrepareRequest.java          |    1 -
 .../GridCacheDatabaseSharedManager.java         |  111 +-
 .../persistence/GridCacheOffheapManager.java    |    5 +-
 .../IgniteCacheDatabaseSharedManager.java       |   74 +-
 .../persistence/IgniteCacheSnapshotManager.java |   20 +-
 .../persistence/file/FilePageStoreManager.java  |   14 +-
 .../persistence/tree/io/TrackingPageIO.java     |   12 +-
 .../wal/AbstractWalRecordsIterator.java         |  289 ++++
 .../cache/persistence/wal/FileInput.java        |   16 +-
 .../cache/persistence/wal/FileWALPointer.java   |    4 +-
 .../wal/FileWriteAheadLogManager.java           |  594 ++++----
 .../cache/persistence/wal/RecordSerializer.java |    5 +
 .../persistence/wal/SegmentArchiveResult.java   |   61 +
 .../persistence/wal/SegmentEofException.java    |    3 +-
 .../wal/reader/IgniteWalIteratorFactory.java    |  102 ++
 .../wal/reader/StandaloneGridKernalContext.java |  499 +++++++
 ...ndaloneIgniteCacheDatabaseSharedManager.java |   30 +
 .../reader/StandaloneWalRecordsIterator.java    |  258 ++++
 .../wal/serializer/RecordV1Serializer.java      |   45 +-
 .../query/GridCacheDistributedQueryManager.java |    4 +-
 .../store/GridCacheStoreManagerAdapter.java     |    1 -
 .../cache/version/GridCacheVersionManager.java  |    6 -
 .../cacheobject/IgniteCacheObjectProcessor.java |    5 -
 .../IgniteCacheObjectProcessorImpl.java         |    5 -
 .../cluster/ChangeGlobalStateFinishMessage.java |   86 ++
 .../cluster/ChangeGlobalStateMessage.java       |  140 ++
 .../processors/cluster/ClusterProcessor.java    |    3 +-
 .../cluster/DiscoveryDataClusterState.java      |  157 +++
 .../cluster/GridClusterStateProcessor.java      | 1129 ++++++---------
 .../cluster/IgniteChangeGlobalStateSupport.java |    3 +-
 .../datastructures/DataStructuresProcessor.java |    6 +-
 .../datastructures/GridCacheAtomicLongImpl.java |    2 +-
 .../GridCacheAtomicReferenceImpl.java           |    2 +-
 .../GridCacheAtomicSequenceImpl.java            |    2 +-
 .../GridCacheAtomicStampedImpl.java             |    2 +-
 .../GridCacheCountDownLatchImpl.java            |    2 +-
 .../datastructures/GridCacheLockImpl.java       |    4 +-
 .../datastructures/GridCacheQueueAdapter.java   |    1 -
 .../datastructures/GridCacheSemaphoreImpl.java  |    2 +-
 .../datastructures/GridCacheSetImpl.java        |    1 -
 .../internal/processors/igfs/IgfsImpl.java      |    2 -
 .../internal/processors/igfs/IgfsProcessor.java |    2 +-
 .../utils/PlatformConfigurationUtils.java       |    8 +-
 .../processors/query/GridQueryProcessor.java    |    4 +-
 .../processors/rest/GridRestProcessor.java      |    2 +-
 .../cluster/GridChangeStateCommandHandler.java  |    2 +-
 .../service/GridServiceProcessor.java           |    6 +-
 .../processors/task/GridTaskProcessor.java      |    2 +-
 .../ignite/spi/discovery/tcp/ClientImpl.java    |   12 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |   10 +-
 .../internal/TestRecordingCommunicationSpi.java |   10 +
 ...GridManagerLocalMessageListenerSelfTest.java |    4 +-
 .../cache/GridCacheAbstractMetricsSelfTest.java |   24 -
 .../cache/IgniteActiveClusterTest.java          |  182 ---
 .../IgniteClusterActivateDeactivateTest.java    | 1284 ++++++++++++++++++
 ...erActivateDeactivateTestWithPersistence.java |  197 +++
 .../IgniteDaemonNodeMarshallerCacheTest.java    |   10 -
 .../IgniteSemaphoreAbstractSelfTest.java        |   17 +-
 ...IgnitePersistentStoreDataStructuresTest.java |    2 +
 .../wal/IgniteWalHistoryReservationsTest.java   |    2 +-
 .../db/wal/reader/IgniteWalReaderTest.java      |  385 ++++++
 .../db/wal/reader/MockWalIteratorFactory.java   |  114 ++
 .../pagemem/NoOpPageStoreManager.java           |   12 +-
 .../persistence/pagemem/NoOpWALManager.java     |   23 +-
 .../AbstractNodeJoinTemplate.java               |  149 +-
 .../IgniteChangeGlobalStateAbstractTest.java    |   65 +-
 .../IgniteChangeGlobalStateCacheTest.java       |    2 +-
 ...IgniteChangeGlobalStateDataStreamerTest.java |    5 +-
 ...gniteChangeGlobalStateDataStructureTest.java |    6 +-
 .../IgniteChangeGlobalStateFailOverTest.java    |   26 +-
 .../IgniteChangeGlobalStateTest.java            |  158 +--
 .../IgniteStandByClusterTest.java               |   17 +-
 .../join/JoinActiveNodeToActiveCluster.java     |   62 +-
 ...ctiveNodeToActiveClusterWithPersistence.java |   17 +
 .../IgniteStandByClientReconnectTest.java       |   13 +-
 ...eStandByClientReconnectToNewClusterTest.java |   13 +-
 ...cpCommunicationSpiMultithreadedSelfTest.java |    2 +-
 .../testframework/junits/GridAbstractTest.java  |    4 +-
 .../junits/common/GridCommonAbstractTest.java   |    3 +
 .../ignite/testsuites/IgnitePdsTestSuite2.java  |    9 +-
 .../testsuites/IgniteStandByClusterSuite.java   |    5 +-
 .../processors/hadoop/HadoopProcessor.java      |    4 +-
 .../cache/IgniteCacheAbstractQuerySelfTest.java |    3 +-
 .../Cache/CacheConfigurationTest.cs             |   21 +
 .../Apache.Ignite.Core.Tests/EventsTest.cs      |   19 +-
 .../Cache/Configuration/CacheConfiguration.cs   |   75 +-
 .../Apache.Ignite.Core/IgniteConfiguration.cs   |    7 +-
 .../Impl/Events/RemoteListenEventFilter.cs      |    3 +
 143 files changed, 6651 insertions(+), 2631 deletions(-)
----------------------------------------------------------------------



[37/46] ignite git commit: IGNITE-5528 - IS_EVICT_DISABLED flag is not cleared on cache store exception. This closes #2183.

Posted by vo...@apache.org.
IGNITE-5528 - IS_EVICT_DISABLED flag is not cleared on cache store exception. This closes #2183.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4a169dc5
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4a169dc5
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4a169dc5

Branch: refs/heads/ignite-2.1
Commit: 4a169dc5625f6f9794c17bfcf5bc1a318c91a996
Parents: 9675061
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Tue Jun 20 07:59:09 2017 +0300
Committer: Andrey V. Mashenkov <an...@gmail.com>
Committed: Thu Jul 6 14:37:59 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheAdapter.java      |  62 ++++---
 .../processors/cache/GridCacheEntryEx.java      |   3 +-
 .../processors/cache/GridCacheMapEntry.java     |   2 +-
 ...titionEvictionDuringReadThroughSelfTest.java | 160 +++++++++++++++++++
 .../testsuites/IgniteCacheTestSuite5.java       |   3 +
 5 files changed, 205 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4a169dc5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index 5937a48..9213be3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -2086,35 +2086,18 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
                                     }
                                 });
 
-                                if (loaded.size() != loadKeys.size()) {
-                                    boolean needTouch =
-                                        tx0 == null || (!tx0.implicit() && tx0.isolation() == READ_COMMITTED);
-
-                                    for (Map.Entry<KeyCacheObject, EntryGetResult> e : loadKeys.entrySet()) {
-                                        if (loaded.contains(e.getKey()))
-                                            continue;
-
-                                        if (needTouch || e.getValue().reserved()) {
-                                            GridCacheEntryEx entry = peekEx(e.getKey());
-
-                                            if (entry != null) {
-                                                if (e.getValue().reserved())
-                                                    entry.clearReserveForLoad(e.getValue().version());
-
-                                                if (needTouch)
-                                                    ctx.evicts().touch(entry, topVer);
-                                            }
-                                        }
-                                    }
-                                }
+                                clearReservationsIfNeeded(topVer, loadKeys, loaded, tx0);
 
                                 return map;
                             }
                         }), true),
                         new C2<Map<K, V>, Exception, IgniteInternalFuture<Map<K, V>>>() {
                             @Override public IgniteInternalFuture<Map<K, V>> apply(Map<K, V> map, Exception e) {
-                                if (e != null)
+                                if (e != null) {
+                                    clearReservationsIfNeeded(topVer, loadKeys, loaded, tx0);
+
                                     return new GridFinishedFuture<>(e);
+                                }
 
                                 if (tx0 == null || (!tx0.implicit() && tx0.isolation() == READ_COMMITTED)) {
                                     Collection<KeyCacheObject> notFound = new HashSet<>(loadKeys.keySet());
@@ -2181,6 +2164,41 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
         }
     }
 
+    /**
+     * @param topVer Affinity topology version for which load was performed.
+     * @param loadKeys Keys to load.
+     * @param loaded Actually loaded keys.
+     * @param tx0 Transaction within which the load was run, if any.
+     */
+    private void clearReservationsIfNeeded(
+        AffinityTopologyVersion topVer,
+        Map<KeyCacheObject, EntryGetResult> loadKeys,
+        Collection<KeyCacheObject> loaded,
+        IgniteTxLocalAdapter tx0
+    ) {
+        if (loaded.size() != loadKeys.size()) {
+            boolean needTouch =
+                tx0 == null || (!tx0.implicit() && tx0.isolation() == READ_COMMITTED);
+
+            for (Map.Entry<KeyCacheObject, EntryGetResult> e : loadKeys.entrySet()) {
+                if (loaded.contains(e.getKey()))
+                    continue;
+
+                if (needTouch || e.getValue().reserved()) {
+                    GridCacheEntryEx entry = peekEx(e.getKey());
+
+                    if (entry != null) {
+                        if (e.getValue().reserved())
+                            entry.clearReserveForLoad(e.getValue().version());
+
+                        if (needTouch)
+                            ctx.evicts().touch(entry, topVer);
+                    }
+                }
+            }
+        }
+    }
+
     /** {@inheritDoc} */
     @Override public final V getAndPut(K key, V val) throws IgniteCheckedException {
         return getAndPut(key, val, null);

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a169dc5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
index 4e52680..5aabd30 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
@@ -332,9 +332,8 @@ public interface GridCacheEntryEx {
 
     /**
      * @param ver Expected entry version.
-     * @throws IgniteCheckedException If failed.
      */
-    public void clearReserveForLoad(GridCacheVersion ver) throws IgniteCheckedException;
+    public void clearReserveForLoad(GridCacheVersion ver);
 
     /**
      * Reloads entry from underlying storage.

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a169dc5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index eea8935..673945a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -2699,7 +2699,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @Override public synchronized void clearReserveForLoad(GridCacheVersion ver) throws IgniteCheckedException {
+    @Override public synchronized void clearReserveForLoad(GridCacheVersion ver) {
         if (obsoleteVersionExtras() != null)
             return;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a169dc5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCachePartitionEvictionDuringReadThroughSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCachePartitionEvictionDuringReadThroughSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCachePartitionEvictionDuringReadThroughSelfTest.java
new file mode 100644
index 0000000..d5351f7
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCachePartitionEvictionDuringReadThroughSelfTest.java
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache.distributed;
+
+import java.util.LinkedHashSet;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import javax.cache.Cache;
+import javax.cache.configuration.Factory;
+import javax.cache.expiry.CreatedExpiryPolicy;
+import javax.cache.expiry.Duration;
+import javax.cache.integration.CacheLoaderException;
+import javax.cache.integration.CacheWriterException;
+import org.apache.ignite.cache.CacheAtomicityMode;
+import org.apache.ignite.cache.eviction.lru.LruEvictionPolicy;
+import org.apache.ignite.cache.store.CacheStore;
+import org.apache.ignite.cache.store.CacheStoreAdapter;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.NearCacheConfiguration;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+/**
+ *
+ */
+public class GridCachePartitionEvictionDuringReadThroughSelfTest extends GridCommonAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+        CacheConfiguration<Integer, Integer> ccfg =
+            new CacheConfiguration<Integer, Integer>()
+                .setName("config")
+                .setAtomicityMode(CacheAtomicityMode.ATOMIC)
+                .setBackups(0) // No need for backup, just load from the store if needed
+                .setCacheStoreFactory(new CacheStoreFactory())
+                .setEvictionPolicy(new LruEvictionPolicy(100))
+                .setNearConfiguration(new NearCacheConfiguration<Integer, Integer>()
+                .setNearEvictionPolicy(new LruEvictionPolicy<Integer, Integer>()));
+
+        ccfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, 1)))
+            .setReadThrough(true)
+            .setWriteThrough(false);
+
+        cfg.setCacheConfiguration(ccfg);
+
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        stopAllGrids();
+    }
+
+    /**
+     * @throws Exception if failed.
+     */
+    public void testPartitionRent() throws Exception {
+        startGrid(0);
+
+        final AtomicBoolean done = new AtomicBoolean();
+
+        IgniteInternalFuture<Long> fut = GridTestUtils.runMultiThreadedAsync(new Callable<Integer>() {
+            @Override
+            public Integer call() throws Exception {
+                LinkedHashSet<Integer> set = new LinkedHashSet<>();
+
+                set.add(1);
+                set.add(2);
+                set.add(3);
+                set.add(4);
+                set.add(5);
+
+                while (!done.get()) {
+                    try {
+                        grid(0).<Integer, Integer>cache("config").getAll(set);
+                    }
+                    catch (Throwable ignore) {
+                        // No-op.
+                    }
+                }
+
+                return null;
+            }
+        }, 4, "loader");
+
+        IgniteInternalFuture<Void> startFut = GridTestUtils.runAsync(new Callable<Void>() {
+            @Override public Void call() throws Exception {
+                for (int i = 1; i < 5; i++) {
+                    startGrid(i);
+
+                    awaitPartitionMapExchange();
+                }
+
+                return null;
+            }
+        });
+
+        startFut.get();
+
+        done.set(true);
+
+        fut.get();
+    }
+
+    /**
+     *
+     */
+    private static class CacheStoreFactory implements Factory<CacheStore<Integer, Integer>> {
+        /** {@inheritDoc} */
+        @Override public CacheStore<Integer, Integer> create() {
+            return new HangingCacheStore();
+        }
+    }
+
+    /**
+     *
+     */
+    private static class HangingCacheStore extends CacheStoreAdapter<Integer, Integer> {
+        /** */
+        private CountDownLatch releaseLatch = new CountDownLatch(1);
+
+        /** {@inheritDoc} */
+        @Override public Integer load(Integer key) throws CacheLoaderException {
+            if (key == 3)
+                throw new CacheLoaderException();
+
+            return key;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void write(Cache.Entry<? extends Integer, ? extends Integer> entry) throws CacheWriterException {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public void delete(Object key) throws CacheWriterException {
+
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a169dc5/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite5.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite5.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite5.java
index 1ab516a..1395b95 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite5.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite5.java
@@ -37,6 +37,7 @@ import org.apache.ignite.internal.processors.cache.IgniteCacheStoreCollectionTes
 import org.apache.ignite.internal.processors.cache.PartitionsExchangeOnDiscoveryHistoryOverflowTest;
 import org.apache.ignite.internal.processors.cache.distributed.CacheLateAffinityAssignmentNodeJoinValidationTest;
 import org.apache.ignite.internal.processors.cache.distributed.CacheLateAffinityAssignmentTest;
+import org.apache.ignite.internal.processors.cache.distributed.GridCachePartitionEvictionDuringReadThroughSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheGroupsPartitionLossPolicySelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.IgniteCachePartitionLossPolicySelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheTxIteratorSelfTest;
@@ -92,6 +93,8 @@ public class IgniteCacheTestSuite5 extends TestSuite {
 
         suite.addTestSuite(GridCachePartitionExchangeManagerHistSizeTest.class);
 
+        suite.addTestSuite(GridCachePartitionEvictionDuringReadThroughSelfTest.class);
+
         return suite;
     }
 }


[45/46] ignite git commit: ignite-5075 Fixed row size calculation in canUpdateOldRow

Posted by vo...@apache.org.
ignite-5075 Fixed row size calculation in canUpdateOldRow


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3259e2bb
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3259e2bb
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3259e2bb

Branch: refs/heads/ignite-2.1
Commit: 3259e2bb9d6532dd78e71314dc55a7a021090f36
Parents: 0b4b5dc
Author: sboikov <sb...@gridgain.com>
Authored: Fri Jul 7 11:27:31 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Jul 7 11:27:31 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/IgniteCacheOffheapManagerImpl.java  |  7 +++++--
 .../cache/persistence/freelist/FreeListImpl.java         | 11 ++++++-----
 2 files changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3259e2bb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index b51fc10..6d16b60 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -1179,12 +1179,15 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager
             if (oldRow.expireTime() != dataRow.expireTime())
                 return false;
 
-            int oldLen = FreeListImpl.getRowSize(oldRow);
+            // Use grp.sharedGroup() flag since it is possible cacheId is not yet set here.
+            boolean sizeWithCacheId = grp.sharedGroup();
+
+            int oldLen = FreeListImpl.getRowSize(oldRow, sizeWithCacheId);
 
             if (oldLen > updateValSizeThreshold)
                 return false;
 
-            int newLen = FreeListImpl.getRowSize(dataRow);
+            int newLen = FreeListImpl.getRowSize(dataRow, sizeWithCacheId);
 
             return oldLen == newLen;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3259e2bb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java
index 139c6f3..844bc02 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/FreeListImpl.java
@@ -101,7 +101,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
             throws IgniteCheckedException {
             DataPageIO io = (DataPageIO)iox;
 
-            int rowSize = getRowSize(row);
+            int rowSize = getRowSize(row, row.cacheId() != 0);
 
             boolean updated = io.updateRow(pageAddr, itemId, pageSize(), null, row, rowSize);
 
@@ -147,7 +147,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
             throws IgniteCheckedException {
             DataPageIO io = (DataPageIO)iox;
 
-            int rowSize = getRowSize(row);
+            int rowSize = getRowSize(row, row.cacheId() != 0);
             int oldFreeSpace = io.getFreeSpace(pageAddr);
 
             assert oldFreeSpace > 0 : oldFreeSpace;
@@ -453,7 +453,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
 
     /** {@inheritDoc} */
     @Override public void insertDataRow(CacheDataRow row) throws IgniteCheckedException {
-        int rowSize = getRowSize(row);
+        int rowSize = getRowSize(row, row.cacheId() != 0);
 
         int written = 0;
 
@@ -579,17 +579,18 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
 
     /**
      * @param row Row.
+     * @param withCacheId If {@code true} adds cache ID size.
      * @return Entry size on page.
      * @throws IgniteCheckedException If failed.
      */
-    public static int getRowSize(CacheDataRow row) throws IgniteCheckedException {
+    public static int getRowSize(CacheDataRow row, boolean withCacheId) throws IgniteCheckedException {
         KeyCacheObject key = row.key();
         CacheObject val = row.value();
 
         int keyLen = key.valueBytesLength(null);
         int valLen = val.valueBytesLength(null);
 
-        return keyLen + valLen + CacheVersionIO.size(row.version(), false) + 8 + (row.cacheId() == 0 ? 0 : 4);
+        return keyLen + valLen + CacheVersionIO.size(row.version(), false) + 8 + (withCacheId ? 4 : 0);
     }
 
     /** {@inheritDoc} */


[34/46] ignite git commit: IGNITE-5552: ServiceProcessor recalculates all service assignments even if there is a pending topology change. This closes #2182.

Posted by vo...@apache.org.
IGNITE-5552: ServiceProcessor recalculates all service assignments even if there is a pending topology change. This closes #2182.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1cf402f3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1cf402f3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1cf402f3

Branch: refs/heads/ignite-2.1
Commit: 1cf402f379516b01ef7317a50c820bf0dec25d81
Parents: c396b0b
Author: Andrey V. Mashenkov <an...@gmail.com>
Authored: Wed Jun 21 19:30:27 2017 +0300
Committer: Andrey V. Mashenkov <an...@gmail.com>
Committed: Thu Jul 6 14:26:31 2017 +0300

----------------------------------------------------------------------
 .../processors/service/GridServiceProcessor.java  | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/1cf402f3/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
index 87db72a..d67f2d1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
@@ -1530,6 +1530,9 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
      * Topology listener.
      */
     private class TopologyListener implements DiscoveryEventListener {
+        /** */
+        private volatile AffinityTopologyVersion currTopVer = null;
+
         /** {@inheritDoc} */
         @Override public void onEvent(DiscoveryEvent evt, final DiscoCache discoCache) {
             GridSpinBusyLock busyLock = GridServiceProcessor.this.busyLock;
@@ -1562,6 +1565,8 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
                 else
                     topVer = new AffinityTopologyVersion((evt).topologyVersion(), 0);
 
+                currTopVer = topVer;
+
                 depExe.execute(new DepRunnable() {
                     @Override public void run0() {
                         // In case the cache instance isn't tracked by DiscoveryManager anymore.
@@ -1582,6 +1587,19 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
                                 boolean firstTime = true;
 
                                 while (it.hasNext()) {
+                                    // If topology changed again, let next event handle it.
+                                    AffinityTopologyVersion currTopVer0 = currTopVer;
+
+                                    if (currTopVer0 != topVer) {
+                                        if (log.isInfoEnabled())
+                                            log.info("Service processor detected a topology change during " +
+                                                "assignments calculation (will abort current iteration and " +
+                                                "re-calculate on the newer version): " +
+                                                "[topVer=" + topVer + ", newTopVer=" + currTopVer + ']');
+
+                                        return;
+                                    }
+
                                     Cache.Entry<Object, Object> e = it.next();
 
                                     if (firstTime) {


[28/46] ignite git commit: 2.1 Unused imports

Posted by vo...@apache.org.
2.1 Unused imports


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c84328d4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c84328d4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c84328d4

Branch: refs/heads/ignite-2.1
Commit: c84328d46776de62a341c64a463d3d0e429768a4
Parents: 740b0b2
Author: sboikov <sb...@gridgain.com>
Authored: Thu Jul 6 12:30:52 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Jul 6 12:30:52 2017 +0300

----------------------------------------------------------------------
 .../main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java   | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c84328d4/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
----------------------------------------------------------------------
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 c2d9b7e..d75aae9 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
@@ -143,7 +143,6 @@ import static org.apache.ignite.events.EventType.EVT_NODE_JOINED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 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.internal.IgniteNodeAttributes.ATTR_ACTIVE_ON_START;
 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;