You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by yz...@apache.org on 2016/09/30 17:01:42 UTC

[1/3] ignite git commit: IGNITE-3897 Test transactional behaviour of caches during rolling restart

Repository: ignite
Updated Branches:
  refs/heads/ignite-3897-pr1059 [created] c75f6fc14


IGNITE-3897 Test transactional behaviour of caches during rolling restart


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

Branch: refs/heads/ignite-3897-pr1059
Commit: a853ee325dd93e5c2adfe32ae1e89fa687aee9b2
Parents: 3db0a3d
Author: John Levey <jo...@workday.com>
Authored: Wed Aug 3 11:32:22 2016 +0100
Committer: John Levey <jo...@workday.com>
Committed: Fri Sep 16 10:42:48 2016 +0200

----------------------------------------------------------------------
 .../rebalancing/CacheNodeSafeAssertion.java     | 118 -------
 .../GridCacheRebalancingAggregationTest.java    | 263 ++++++++++++++
 ...cheRebalancingPartitionDistributionTest.java |   1 +
 .../GridCacheRebalancingTransactionTest.java    | 339 +++++++++++++++++++
 .../testframework/assertions/Assertion.java     |   2 +-
 .../assertions/CacheNodeSafeAssertion.java      | 117 +++++++
 .../assertions/EventualAssertion.java           |  99 ++++++
 .../IgniteCacheFailoverTestSuite.java           |   4 +
 8 files changed, 824 insertions(+), 119 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/CacheNodeSafeAssertion.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/CacheNodeSafeAssertion.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/CacheNodeSafeAssertion.java
deleted file mode 100644
index bf6b63f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/CacheNodeSafeAssertion.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.rebalancing;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.testframework.assertions.Assertion;
-
-/**
- * {@link Assertion} that checks that the primary and backup partitions are distributed such that we won't lose any data
- * if we lose a single node. This implies that the cache in question was configured with a backup count of at least one
- * and that all partitions are backed up to a different node from the primary.
- */
-public class CacheNodeSafeAssertion implements Assertion {
-    /** The {@link Ignite} instance. */
-    private final Ignite ignite;
-
-    /** The cache name. */
-    private final String cacheName;
-
-    /**
-     * Construct a new {@link CacheNodeSafeAssertion} for the given {@code cacheName}.
-     *
-     * @param ignite The Ignite instance.
-     * @param cacheName The cache name.
-     */
-    public CacheNodeSafeAssertion(Ignite ignite, String cacheName) {
-        this.ignite = ignite;
-        this.cacheName = cacheName;
-    }
-
-    /**
-     * @return Ignite instance.
-     */
-    protected Ignite ignite() {
-        return ignite;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void test() throws AssertionError {
-        Affinity<?> affinity = ignite.affinity(cacheName);
-
-        int partCnt = affinity.partitions();
-
-        boolean hostSafe = true;
-
-        boolean nodeSafe = true;
-
-        for (int x = 0; x < partCnt; ++x) {
-            // Results are returned with the primary node first and backups after. We want to ensure that there is at
-            // least one backup on a different host.
-            Collection<ClusterNode> results = affinity.mapPartitionToPrimaryAndBackups(x);
-
-            Iterator<ClusterNode> nodes = results.iterator();
-
-            boolean newHostSafe = false;
-
-            boolean newNodeSafe = false;
-
-            if (nodes.hasNext()) {
-                ClusterNode primary = nodes.next();
-
-                // For host safety, get all nodes on the same host as the primary node and ensure at least one of the
-                // backups is on a different host. For node safety, make sure at least of of the backups is not the
-                // primary.
-                Collection<ClusterNode> neighbors = hostSafe ? ignite.cluster().forHost(primary).nodes() : null;
-
-                while (nodes.hasNext()) {
-                    ClusterNode backup = nodes.next();
-
-                    if (hostSafe) {
-                        if (!neighbors.contains(backup))
-                            newHostSafe = true;
-                    }
-
-                    if (nodeSafe) {
-                        if (!backup.equals(primary))
-                            newNodeSafe = true;
-                    }
-                }
-            }
-
-            hostSafe = newHostSafe;
-
-            nodeSafe = newNodeSafe;
-
-            if (!hostSafe && !nodeSafe)
-                break;
-        }
-
-        if (hostSafe)
-            return;
-
-        if (nodeSafe)
-            return;
-
-        throw new AssertionError("Cache " + cacheName + " is endangered!");
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java
new file mode 100644
index 0000000..1d566e9
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java
@@ -0,0 +1,263 @@
+/*
+ * 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.rebalancing;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import javax.cache.Cache;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.cache.CacheAtomicityMode;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.testframework.assertions.Assertion;
+import org.apache.ignite.testframework.assertions.CacheNodeSafeAssertion;
+import org.apache.ignite.testframework.junits.common.GridRollingRestartAbstractTest;
+import org.apache.ignite.transactions.Transaction;
+
+/**
+ * Test running a continuous aggregate sum against a running cluster that is undergoing a rolling restart.
+ */
+public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstractTest {
+    /** The number of entries to put to the test cache. */
+    private static final int ENTRY_COUNT = 100;
+
+    /** The maximum number of times to restart nodes in the cluster. */
+    private static final int MAX_RESTARTS = 5;
+
+    /** The key of the cache entry that contains the current upper range of the aggregation. */
+    private static final int CEILING_KEY = Integer.MAX_VALUE;
+
+    /** Test cache name. */
+    private static final String CACHE_NAME = "AGGREGATION_TEST";
+
+    /** Keys of entries under test. */
+    private static final Set<Integer> KEYS;
+    static {
+        final Set<Integer> keys = new LinkedHashSet<>();
+        for (int i = 0; i < ENTRY_COUNT; i++) {
+            keys.add(i);
+        }
+        KEYS = Collections.unmodifiableSet(keys);
+    }
+
+    /** Thread responsible for writing to the cache.*/
+    private UpdateCacheThread updateThread;
+
+    /** The number of aggregations since the last node restart.*/
+    private volatile int aggregationCount;
+
+    /** Total number of times we updated the cache.*/
+    private volatile int totalUpdateCount;
+
+    /** {@inheritDoc} */
+    @Override
+    public int serverCount() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMaxRestarts() {
+        return MAX_RESTARTS;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected long getTestTimeout() {
+        return 1000 * 60 * 5;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected CacheConfiguration<?, ?> getCacheConfiguration() {
+        return new CacheConfiguration<Integer, Integer>(CACHE_NAME)
+                        .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
+                        .setCacheMode(CacheMode.PARTITIONED)
+                        .setBackups(1);
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgnitePredicate<Ignite> getRestartCheck() {
+        return new IgnitePredicate<Ignite>() {
+            @Override public boolean apply(final Ignite ignite) {
+                return serverCount() >= ignite.cluster().forServers().nodes().size()
+                        && GridCacheRebalancingAggregationTest.this.aggregationCount > 0;
+            }
+        };
+    }
+
+    /** {@inheritDoc} */
+    @Override public Assertion getRestartAssertion() {
+        return new CacheNodeSafeAssertion(grid(0), CACHE_NAME);
+    }
+
+    /**
+     * This test has three threads; the writer thread updates a monotonically increasing set of values for the keys,
+     * while the reader thread is performing a checksum on the contents of the cache while the restart thread is
+     * killing nodes. This test will fail if we lose any data.
+     */
+    public void testRollingRestartAggregation()
+        throws InterruptedException {
+
+        startUpdateThread();
+        RollingRestartThread restartThread = super.rollingRestartThread;
+
+        int totalAggregationCount = 0;
+        int checksumFailures = 0;
+        do {
+            if (!checksumCache()) {
+                checksumFailures++;
+            }
+
+            totalAggregationCount++;
+            this.aggregationCount++;
+        } while (restartThread.isAlive());
+
+        grid(0).log().info("Total successful aggregations during the test were: " + totalAggregationCount);
+        grid(0).log().info("Total successful updates during the test were: " + this.totalUpdateCount);
+        grid(0).log().info("Total node restarts during the test were: " + restartThread.getRestartTotal());
+
+        this.updateThread.join();
+
+        assertEquals(0, checksumFailures);
+        assertEquals(getMaxRestarts(), restartThread.getRestartTotal());
+    }
+
+    /**
+     * Create and start the {@link UpdateCacheThread}.
+     */
+    private void startUpdateThread() {
+        UpdateCacheThread updateThread = new UpdateCacheThread();
+        updateThread.start();
+        this.updateThread = updateThread;
+    }
+
+    /**
+     * Check that the values in the cache are equal to the sum of values between the floor and ceiling (key in the cache
+     * signifying the highest value that has been written).
+     *
+     * @return true if the cache values sum to the expected value
+     */
+    private boolean checksumCache() {
+        final Ignite ignite = grid(0);
+        Cache<Integer, Integer> cache = ignite.cache(CACHE_NAME);
+        Throwable e = null;
+        for (int i = 0, c = 20; i <= c; ++i) {
+            try (Transaction tx = ignite.transactions().txStart()) {
+                tx.timeout(2*60*1000l);
+
+                Integer ceiling = cache.get(CEILING_KEY);
+                if (ceiling == null) {
+                    return Boolean.TRUE;
+                }
+                int floor = ceiling - ENTRY_COUNT + 1;
+                Map<Integer, Integer> results = cache.getAll(KEYS);
+                tx.commit();
+
+                int sum = 0;
+                for (Integer j : results.values()) {
+                    sum += j;
+                }
+
+                if (sum == calculateSum(floor, ceiling)) {
+                    return Boolean.TRUE;
+                }
+
+                grid(0).log().info("Failed testing that sum of " + sum + " equals sum(" + floor + "," + ceiling + ")");
+                return Boolean.FALSE;
+            }
+            catch (Throwable ee) {
+                e = ee;
+            }
+        }
+        throw new RuntimeException("Failed to commit transaction after " + 20 + " retries", e);
+    }
+
+    /**
+     * Update the values in the cache.
+     */
+    private void updateCache() {
+        final Ignite ignite = grid(0);
+        Cache<Integer, Integer> cache = ignite.cache(CACHE_NAME);
+        Throwable e = null;
+        for (int i = 0, c = 20; i <= c; ++i) {
+            try (Transaction tx = ignite.transactions().txStart()) {
+                tx.timeout(2*60*1000l);
+
+                Integer currentCeiling = cache.get(CEILING_KEY);
+                int newCeiling = currentCeiling == null ? ENTRY_COUNT - 1 : currentCeiling + ENTRY_COUNT;
+                int value = currentCeiling == null ? 0 : currentCeiling + 1;
+                Map<Integer, Integer> entries = new TreeMap<>();
+                for (Integer key : KEYS) {
+                    entries.put(key, value++);
+                }
+                cache.putAll(entries);
+                cache.put(CEILING_KEY, newCeiling);
+
+                GridCacheRebalancingAggregationTest.this.totalUpdateCount++;
+                 if (!tx.isRollbackOnly()) {
+                     tx.commit();
+                 }
+                return;
+            }
+            catch (Throwable ee) {
+                e = ee;
+            }
+        }
+        throw new RuntimeException("Failed to commit transaction after " + 20 + " retries", e);
+    }
+
+    /**
+     * Calculate the sums of a range of values from floor to ceiling. This expects 0 gaps in the range.
+     *
+     * @param f The floor of the range.
+     * @param c The ceiling of the range.
+     *
+     * @return The sum.
+     */
+    private int calculateSum(long f, long c) {
+        return (int) ((c * (c + 1)) / 2 - ((f - 1) * ((f - 1) + 1)) / 2);
+    }
+
+    /**
+     * Update cache thread.
+     */
+    private class UpdateCacheThread extends Thread {
+        /**
+         * Default Constructor sets this thread to run as a daemon.
+         */
+        public UpdateCacheThread() {
+            setDaemon(true);
+            setName(UpdateCacheThread.class.getSimpleName());
+        }
+
+        /** {@inheritDoc} */
+        @Override public void run() {
+            RollingRestartThread restartThread =  GridCacheRebalancingAggregationTest.this.rollingRestartThread;
+            do {
+                GridCacheRebalancingAggregationTest.this.updateCache();
+            }
+            while (restartThread.isAlive());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingPartitionDistributionTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingPartitionDistributionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingPartitionDistributionTest.java
index 61ee9ea..cc1f83e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingPartitionDistributionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingPartitionDistributionTest.java
@@ -33,6 +33,7 @@ import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.testframework.assertions.Assertion;
+import org.apache.ignite.testframework.assertions.CacheNodeSafeAssertion;
 import org.apache.ignite.testframework.junits.common.GridRollingRestartAbstractTest;
 
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingTransactionTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingTransactionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingTransactionTest.java
new file mode 100644
index 0000000..b74fb5c
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingTransactionTest.java
@@ -0,0 +1,339 @@
+/*
+ * 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.rebalancing;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.cache.Cache;
+import javax.cache.processor.EntryProcessor;
+import javax.cache.processor.EntryProcessorResult;
+import javax.cache.processor.MutableEntry;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.cache.CacheAtomicWriteOrderMode;
+import org.apache.ignite.cache.CacheAtomicityMode;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cache.CacheRebalanceMode;
+import org.apache.ignite.cache.CacheWriteSynchronizationMode;
+import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
+import org.apache.ignite.cache.eviction.lru.LruEvictionPolicy;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.NearCacheConfiguration;
+import org.apache.ignite.configuration.TransactionConfiguration;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.testframework.assertions.Assertion;
+import org.apache.ignite.testframework.assertions.CacheNodeSafeAssertion;
+import org.apache.ignite.testframework.assertions.EventualAssertion;
+import org.apache.ignite.testframework.junits.common.GridRollingRestartAbstractTest;
+import org.apache.ignite.transactions.Transaction;
+
+/**
+ * Test running transactional gets and puts against a running cluster that is undergoing a rolling restart.
+ */
+public class GridCacheRebalancingTransactionTest extends GridRollingRestartAbstractTest {
+    /** The number of entries to put to the test cache. */
+    private static final int ENTRY_COUNT = 100;
+
+    /** Test cache name. */
+    private static final String CACHE_NAME = "TRANSACTION_TEST_NEAR";
+
+    /** Near Cache Configuration. */
+    private static final NearCacheConfiguration<Integer, Integer> NEAR_CACHE_CONFIGURATION = new NearCacheConfiguration<Integer, Integer>()
+            .setNearEvictionPolicy(new LruEvictionPolicy<Integer, Integer>(Integer.MAX_VALUE));
+
+    /** The {@link CacheConfiguration} used by this test. */
+    @Override
+    protected CacheConfiguration<?, ?> getCacheConfiguration() {
+        return new CacheConfiguration<Integer, Integer>(CACHE_NAME)
+                .setCacheMode(CacheMode.PARTITIONED)
+                .setBackups(1)
+                .setAffinity(new RendezvousAffinityFunction(true /* machine-safe */, 271))
+                .setAtomicWriteOrderMode(CacheAtomicWriteOrderMode.CLOCK)
+                .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
+                .setRebalanceMode(CacheRebalanceMode.SYNC)
+                .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)
+                .setEvictionPolicy(NEAR_CACHE_CONFIGURATION.getNearEvictionPolicy())
+                .setCopyOnRead(false)
+                .setNearConfiguration(NEAR_CACHE_CONFIGURATION);
+    }
+
+    /** Keys of entries being read and updated. */
+    private static final Set<Integer> KEYS;
+    static {
+        final Set<Integer> keys = new LinkedHashSet<>();
+        for (int i = 0; i < ENTRY_COUNT; i++) {
+            keys.add(i);
+        }
+        KEYS = Collections.unmodifiableSet(keys);
+    }
+
+    /** The number of transactions since the last node restart. */
+    private volatile int transactionCount;
+
+    /** {@inheritDoc} */
+    @Override public int serverCount() {
+        return 3;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int getMaxRestarts() {
+        return 5;
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgnitePredicate<Ignite> getRestartCheck() {
+        return new IgnitePredicate<Ignite>() {
+            @Override
+            public boolean apply(Ignite ignite) {
+                return serverCount() <= grid(0).cluster().forServers().nodes().size()
+                        && GridCacheRebalancingTransactionTest.this.transactionCount > 0;
+            }
+        };
+    }
+
+    /** {@inheritDoc} */
+    @Override public Assertion getRestartAssertion() {
+        return new EventualAssertion(5000, new CacheNodeSafeAssertion(grid(0), CACHE_NAME));
+    }
+
+    /**
+     * This test performs a transactional update and checksum of the cache, as well as validates that the cache is
+     * not changed when a transaction is rolled back.
+     */
+    public void testRollingRestartTransaction()
+            throws InterruptedException {
+
+        Cache<Integer, Integer> cache = (Cache<Integer, Integer>) grid(0).getOrCreateCache(getCacheConfiguration());
+
+        boolean invoke = true;
+        int currentValue = 0;
+        int checksumFailures = 0;
+        int transactionCount = 0;
+        Map<Integer, Integer> lastChecksum = null;
+        do {
+            updateCache(cache, currentValue, invoke, false);
+            Map<Integer, Integer> checksum = checksumCache(cache, currentValue, lastChecksum);
+            if (checksum == null) {
+                grid(0).log().info(
+                        "Checksum failure after commit (expected " + currentValue + ", invoke " + invoke + ").");
+                checksumFailures++;
+            }
+            else {
+                lastChecksum = checksum;
+                updateCache(cache, currentValue + 1, invoke, true);
+                checksum = checksumCache(cache, currentValue, lastChecksum);
+                if (checksum == null) {
+                    checksumFailures++;
+                    grid(0).log().info(
+                            "Checksum failure after rollback (expected " + currentValue + ", invoke " + invoke + ").");
+                }
+                else {
+                    lastChecksum = checksum;
+                }
+            }
+
+            invoke = !invoke;
+            currentValue++;
+            transactionCount++;
+            this.transactionCount = transactionCount;
+        } while (this.rollingRestartThread.isAlive());
+
+        grid(0).log().info("Total checksum failures during the test were: " + checksumFailures);
+        grid(0).log().info("Total transactions during the test were: " + transactionCount);
+        grid(0).log().info("Total node restarts during the test were: " + this.rollingRestartThread.getRestartTotal());
+
+        assertEquals(getMaxRestarts(), this.rollingRestartThread.getRestartTotal());
+        assertEquals(0, checksumFailures);
+    }
+
+    /**
+     * Updates the cache and either commit or rollback the update.
+     *
+     * @param cache the cache
+     * @param newValue the new value to update the entries with
+     * @param invoke whether to use invokeAll() or putAll()
+     * @param rollback whether to rollback the changes or commit
+     */
+    private void updateCache(final Cache<Integer, Integer> cache, final int newValue, final boolean invoke, final boolean rollback) {
+        final TransactionConfiguration txConfig = new TransactionConfiguration();
+        transact(new TransactionalTask<Object>() {
+            @Override
+            public Object run(Transaction tx) {
+                if (invoke) {
+                    for (EntryProcessorResult<Boolean> result : cache.invokeAll(KEYS, new IntegerSetValue(newValue)).values()) {
+                        if (!Boolean.TRUE.equals(result.get())) {
+                            throw new IllegalStateException();
+                        }
+                    }
+                }
+                else {
+                    Map<Integer, Integer> entries = new HashMap<>(ENTRY_COUNT);
+                    for (Integer key : KEYS) {
+                        entries.put(key, newValue);
+                    }
+                    cache.putAll(entries);
+                }
+
+                if (rollback) {
+                    tx.rollback();
+                }
+                else {
+                    tx.commit();
+                }
+                return null;
+            }
+        }, txConfig);
+    }
+
+    /**
+     * Validate that all entries in the cache have the same value.
+     *
+     * @param cache The cache.
+     * @param currentValue The value to validate.
+     * @param lastChecksum The last validated entries returned by this method.
+     *
+     * @return A map of all validated entries or null if there was a checksum error.
+     */
+    private Map<Integer, Integer> checksumCache(final Cache<Integer, Integer> cache,
+                                                final int currentValue,
+                                                final Map<Integer, Integer> lastChecksum) {
+        TransactionConfiguration txConfig = new TransactionConfiguration();
+        return transact(new TransactionalTask<Map<Integer, Integer>>() {
+            @Override
+            public Map<Integer, Integer> run(Transaction tx) {
+                Map<Integer, Integer> map = cache.getAll(KEYS);
+                for (int value : map.values()) {
+                    if (value != currentValue) {
+                        grid(0).log().info(
+                                "Failed testing that all entries have a value of: " + currentValue + "\n\nCurrent: "
+                                        + map + "\n\nLast: " + lastChecksum);
+                        return null;
+                    }
+                }
+                return map;
+            }
+        }, txConfig);
+    }
+
+    /**
+     * Execute the {@link TransactionalTask} and return the result obtained.
+     *
+     * @param task The task to execute.
+     * @param config The transaction configuration.
+     * @param <T> The type of result.
+     *
+     * @return The result of executing the transaction.
+     * @throws RuntimeException If there are errors.
+     */
+    private <T> T transact(TransactionalTask<T> task, TransactionConfiguration config) {
+        if (task == null) {
+            throw new IllegalArgumentException("Missing TransactionalTask");
+        }
+        if (config == null) {
+            throw new IllegalArgumentException("Missing TransactionConfiguration");
+        }
+        Throwable e = null;
+        for (int i = 0, c = 20; i <= c; ++i) {
+            try (Transaction tx = startTransaction(config)) {
+                T t = task.run(tx);
+                if (!tx.isRollbackOnly()) {
+                    tx.commit();
+                }
+                return t;
+            }
+            catch (final Throwable ee) {
+                e = ee;
+            }
+        }
+        throw new RuntimeException("Failed to commit transaction", e);
+    }
+
+    /**
+     * Helper method to start / continue an existing {@link Transaction}.
+     *
+     * @param config The transaction configuration to use to determine the timeout.
+     *
+     * @return The existing Transaction or a newly started Transaction.
+     * @throws IllegalStateException If there are exceptions.
+     */
+    private Transaction startTransaction(TransactionConfiguration config) {
+        Ignite ignite = grid(0);
+        Transaction txThread = ignite.transactions().tx();
+
+        // We do not support nested transactions. If one has already been started, return the existing transaction
+        if (txThread == null) {
+            try {
+                Transaction tx = ignite.transactions().txStart();
+                tx.timeout(config.getDefaultTxTimeout());
+                return tx;
+            }
+            catch (RuntimeException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+        else {
+            return txThread;
+        }
+    }
+
+    /**
+     * Interface to represent the execution of a transaction that returns a result.
+     *
+     * @param <T> The results of executing the transaction.
+     */
+    interface TransactionalTask<T> {
+        /**
+         * Run the task.
+         *
+         * @param tx The current transaction.
+         * @return The result from running the task.
+         */
+        T run(Transaction tx);
+    }
+
+    /**
+     * {@link EntryProcessor} used to update an entry with a specified integer value.
+     */
+    private static class IntegerSetValue
+            implements EntryProcessor<Integer, Integer, Boolean>, Serializable {
+        /** The value. */
+        private final int newValue;
+
+        /**
+         * Create a new {@link IntegerSetValue} processor that will update a targeted entry with the specified value.
+         *
+         * @param newValue The new value.
+         */
+        public IntegerSetValue(int newValue) {
+            this.newValue = newValue;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public Boolean process(MutableEntry<Integer, Integer> entry, Object... args) {
+            entry.setValue(this.newValue);
+            return Boolean.TRUE;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/testframework/assertions/Assertion.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/assertions/Assertion.java b/modules/core/src/test/java/org/apache/ignite/testframework/assertions/Assertion.java
index 4799d88..62e04dc 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/assertions/Assertion.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/assertions/Assertion.java
@@ -27,5 +27,5 @@ public interface Assertion {
      *
      * @throws AssertionError if the condition was not satisfied.
      */
-    public void test() throws AssertionError;
+    void test() throws AssertionError;
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/testframework/assertions/CacheNodeSafeAssertion.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/assertions/CacheNodeSafeAssertion.java b/modules/core/src/test/java/org/apache/ignite/testframework/assertions/CacheNodeSafeAssertion.java
new file mode 100644
index 0000000..5d74c11
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/assertions/CacheNodeSafeAssertion.java
@@ -0,0 +1,117 @@
+/*
+ * 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.testframework.assertions;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.cache.affinity.Affinity;
+import org.apache.ignite.cluster.ClusterNode;
+
+/**
+ * {@link Assertion} that checks that the primary and backup partitions are distributed such that we won't lose any data
+ * if we lose a single node. This implies that the cache in question was configured with a backup count of at least one
+ * and that all partitions are backed up to a different node from the primary.
+ */
+public class CacheNodeSafeAssertion implements Assertion {
+    /** The {@link Ignite} instance. */
+    private final Ignite ignite;
+
+    /** The cache name. */
+    private final String cacheName;
+
+    /**
+     * Construct a new {@link CacheNodeSafeAssertion} for the given {@code cacheName}.
+     *
+     * @param ignite The Ignite instance.
+     * @param cacheName The cache name.
+     */
+    public CacheNodeSafeAssertion(Ignite ignite, String cacheName) {
+        this.ignite = ignite;
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Ignite instance.
+     */
+    protected Ignite ignite() {
+        return ignite;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void test() throws AssertionError {
+        Affinity<?> affinity = ignite.affinity(cacheName);
+
+        int partCnt = affinity.partitions();
+
+        boolean hostSafe = true;
+
+        boolean nodeSafe = true;
+
+        for (int x = 0; x < partCnt; ++x) {
+            // Results are returned with the primary node first and backups after. We want to ensure that there is at
+            // least one backup on a different host.
+            Collection<ClusterNode> results = affinity.mapPartitionToPrimaryAndBackups(x);
+
+            Iterator<ClusterNode> nodes = results.iterator();
+
+            boolean newHostSafe = false;
+
+            boolean newNodeSafe = false;
+
+            if (nodes.hasNext()) {
+                ClusterNode primary = nodes.next();
+
+                // For host safety, get all nodes on the same host as the primary node and ensure at least one of the
+                // backups is on a different host. For node safety, make sure at least of of the backups is not the
+                // primary.
+                Collection<ClusterNode> neighbors = hostSafe ? ignite.cluster().forHost(primary).nodes() : null;
+
+                while (nodes.hasNext()) {
+                    ClusterNode backup = nodes.next();
+
+                    if (hostSafe) {
+                        if (!neighbors.contains(backup))
+                            newHostSafe = true;
+                    }
+
+                    if (nodeSafe) {
+                        if (!backup.equals(primary))
+                            newNodeSafe = true;
+                    }
+                }
+            }
+
+            hostSafe = newHostSafe;
+
+            nodeSafe = newNodeSafe;
+
+            if (!hostSafe && !nodeSafe)
+                break;
+        }
+
+        if (hostSafe)
+            return;
+
+        if (nodeSafe)
+            return;
+
+        throw new AssertionError("Cache " + cacheName + " is endangered!");
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/testframework/assertions/EventualAssertion.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/assertions/EventualAssertion.java b/modules/core/src/test/java/org/apache/ignite/testframework/assertions/EventualAssertion.java
new file mode 100644
index 0000000..6fa7994
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/assertions/EventualAssertion.java
@@ -0,0 +1,99 @@
+/*
+ * 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.testframework.assertions;
+
+/**
+ * An {@link Assertion} that attempts to assert a condition within a maximum amount of time.
+ */
+public class EventualAssertion implements Assertion {
+    /** The assertion condition. */
+    private final Assertion assertion;
+
+    /**
+     * The amount of time in milliseconds to wait for the assertion to succeed. If zero try forever, if negative
+     * try once and return immediately.
+     */
+    private final long timeout;
+
+    /**
+     * Create a new EventualAssertion.
+     *
+     * @param timeout The maximum amount of time in milliseconds to wait for the specified assertion to succeed; if zero
+     * the implementation will try forever and if negative try once and return immediately.
+     * @param assertion The assertion to test.
+     */
+    public EventualAssertion(long timeout, Assertion assertion) {
+        if (assertion == null) {
+            throw new IllegalArgumentException("Assertion cannot be null");
+        }
+        this.timeout = timeout;
+        this.assertion = assertion;
+    }
+
+    /**
+     * Test that the assertion is satisfied within the configured timeout.
+     * <p>
+     *     Note: this implementation uses an exponential back-off between successive retries of the assertion.
+     *
+     * @throws AssertionError If the condition was not satisfied within the timeout.
+     */
+    public void test() throws AssertionError {
+
+        // compute the ending time
+        long endTime = timeout == 0 ? Long.MAX_VALUE : System.currentTimeMillis() + this.timeout;
+
+        // current wait time
+        long waitTime = 2;
+
+        // last assertion error
+        Throwable lastError;
+        do {
+            try {
+                this.assertion.test();
+                return;
+            }
+            catch (final Throwable e) {
+                lastError = e;
+            }
+
+            // see if we're done
+            long currentTime = System.currentTimeMillis();
+            if (currentTime > endTime) {
+                break;
+            }
+
+            // wait for the current wait time
+            try {
+                synchronized (this) {
+                    wait(waitTime);
+                }
+            }
+            catch (InterruptedException e) {
+                lastError = e;
+                Thread.currentThread().interrupt();
+                break;
+            }
+
+            // exponential back-off
+            waitTime = Math.min(endTime - currentTime, Math.max(waitTime << 2, 8));
+        }
+        while (true);
+
+        throw new AssertionError(this.assertion.getClass().getName() + " failed", lastError);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/a853ee32/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFailoverTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFailoverTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFailoverTestSuite.java
index 26cea39..95e889e 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFailoverTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFailoverTestSuite.java
@@ -41,7 +41,9 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridCa
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCacheAtomicNearRemoveFailureTest;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCacheAtomicPrimaryWriteOrderNearRemoveFailureTest;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCacheNearRemoveFailureTest;
+import org.apache.ignite.internal.processors.cache.distributed.rebalancing.GridCacheRebalancingAggregationTest;
 import org.apache.ignite.internal.processors.cache.distributed.rebalancing.GridCacheRebalancingPartitionDistributionTest;
+import org.apache.ignite.internal.processors.cache.distributed.rebalancing.GridCacheRebalancingTransactionTest;
 import org.apache.ignite.testframework.GridTestUtils;
 
 /**
@@ -66,7 +68,9 @@ public class IgniteCacheFailoverTestSuite extends TestSuite {
 
         suite.addTestSuite(GridCacheAtomicInvalidPartitionHandlingSelfTest.class);
         suite.addTestSuite(GridCacheAtomicClientInvalidPartitionHandlingSelfTest.class);
+        suite.addTestSuite(GridCacheRebalancingAggregationTest.class);
         suite.addTestSuite(GridCacheRebalancingPartitionDistributionTest.class);
+        suite.addTestSuite(GridCacheRebalancingTransactionTest.class);
 
         GridTestUtils.addTestIfNeeded(suite, GridCacheIncrementTransformTest.class, ignoredTests);
 


[2/3] ignite git commit: Merge branch 'master' into jlevey-review-1059

Posted by yz...@apache.org.
Merge branch 'master' into jlevey-review-1059


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

Branch: refs/heads/ignite-3897-pr1059
Commit: f41f5a88cdd31a1b21338e27d257679d8a188315
Parents: a853ee3 e7f3532
Author: Yakov Zhdanov <Yakov Zhdanov>
Authored: Fri Sep 30 17:29:42 2016 +0200
Committer: Yakov Zhdanov <Yakov Zhdanov>
Committed: Fri Sep 30 17:29:42 2016 +0200

----------------------------------------------------------------------
 bin/include/setenv.bat                          |     8 -
 bin/include/setenv.sh                           |    31 -
 .../s3/S3CheckpointManagerSelfTest.java         |     3 +
 .../checkpoint/s3/S3CheckpointSpiSelfTest.java  |     4 +
 .../s3/S3CheckpointSpiStartStopSelfTest.java    |     7 +
 .../s3/S3SessionCheckpointSelfTest.java         |     2 +
 .../s3/TcpDiscoveryS3IpFinderSelfTest.java      |     7 +
 .../ignite/testsuites/IgniteS3TestSuite.java    |    15 +-
 .../store/cassandra/CassandraCacheStore.java    |   169 +-
 .../cassandra/CassandraCacheStoreFactory.java   |     2 +-
 .../store/cassandra/common/CassandraHelper.java |    47 +-
 .../cassandra/common/PropertyMappingHelper.java |     3 +-
 .../store/cassandra/common/RandomSleeper.java   |     2 +-
 .../persistence/KeyPersistenceSettings.java     |    55 +-
 .../KeyValuePersistenceSettings.java            |   112 +-
 .../persistence/PersistenceController.java      |   467 +-
 .../persistence/PersistenceSettings.java        |   157 +-
 .../store/cassandra/persistence/PojoField.java  |    58 +-
 .../cassandra/persistence/PojoKeyField.java     |    10 +-
 .../cassandra/persistence/PojoValueField.java   |    21 +-
 .../persistence/ValuePersistenceSettings.java   |    21 +-
 .../session/BatchExecutionAssistant.java        |     7 +
 .../cassandra/session/CassandraSession.java     |    10 +
 .../cassandra/session/CassandraSessionImpl.java |   179 +-
 .../cassandra/session/ExecutionAssistant.java   |    13 +-
 .../cassandra/session/pool/SessionPool.java     |     2 +-
 .../session/transaction/BaseMutation.java       |    68 +
 .../session/transaction/DeleteMutation.java     |    57 +
 .../cassandra/session/transaction/Mutation.java |    63 +
 .../session/transaction/WriteMutation.java      |    60 +
 .../session/transaction/package-info.java       |    21 +
 .../store/cassandra/utils/DDLGenerator.java     |     6 +-
 .../tests/CassandraDirectPersistenceTest.java   |   409 +-
 .../ignite/tests/CassandraLocalServer.java      |    59 +
 .../apache/ignite/tests/DDLGeneratorTest.java   |    28 +-
 .../ignite/tests/IgnitePersistentStoreTest.java |   294 +-
 .../LoadTestsCassandraArtifactsCreator.java     |     4 +-
 .../apache/ignite/tests/load/IntGenerator.java  |     2 +-
 .../ignite/tests/load/LoadTestDriver.java       |    14 +-
 .../ignite/tests/load/PersonGenerator.java      |     2 +-
 .../org/apache/ignite/tests/load/Worker.java    |    18 +-
 .../org/apache/ignite/tests/pojos/Person.java   |    35 +-
 .../org/apache/ignite/tests/pojos/Product.java  |   123 +
 .../apache/ignite/tests/pojos/ProductOrder.java |   148 +
 .../ignite/tests/utils/CacheStoreHelper.java    |    17 +-
 .../ignite/tests/utils/TestCacheSession.java    |    12 +-
 .../ignite/tests/utils/TestTransaction.java     |   132 +
 .../apache/ignite/tests/utils/TestsHelper.java  |   321 +-
 .../tests/persistence/pojo/ignite-config.xml    |    56 +
 .../ignite/tests/persistence/pojo/order.xml     |    21 +
 .../persistence/pojo/persistence-settings-3.xml |     2 +
 .../persistence/pojo/persistence-settings-4.xml |   175 +
 .../ignite/tests/persistence/pojo/product.xml   |    21 +
 .../store/src/test/resources/tests.properties   |    15 +
 .../TcpDiscoveryCloudIpFinderSelfTest.java      |     6 +-
 .../ignite/testsuites/IgniteCloudTestSuite.java |     5 +-
 .../apache/ignite/IgniteSystemProperties.java   |    12 +
 .../store/jdbc/CacheAbstractJdbcStore.java      |   142 +-
 .../cache/store/jdbc/CacheJdbcPojoStore.java    |     5 +-
 .../store/jdbc/CacheJdbcPojoStoreFactory.java   |    45 +-
 .../ignite/cache/store/jdbc/JdbcType.java       |     2 +-
 .../store/jdbc/dialect/BasicJdbcDialect.java    |     8 +-
 .../cache/store/jdbc/dialect/DB2Dialect.java    |     6 +-
 .../cache/store/jdbc/dialect/H2Dialect.java     |     5 +-
 .../cache/store/jdbc/dialect/JdbcDialect.java   |    18 +-
 .../cache/store/jdbc/dialect/MySQLDialect.java  |     9 +-
 .../cache/store/jdbc/dialect/OracleDialect.java |     5 +-
 .../store/jdbc/dialect/SQLServerDialect.java    |    14 +-
 .../apache/ignite/compute/ComputeTaskSpis.java  |     8 +-
 .../configuration/FileSystemConfiguration.java  |     2 +-
 .../local/LocalIgfsSecondaryFileSystem.java     |    32 +-
 .../internal/GridEventConsumeHandler.java       |     5 -
 .../ignite/internal/GridKernalContext.java      |     8 +
 .../ignite/internal/GridKernalContextImpl.java  |    12 +
 .../internal/GridMessageListenHandler.java      |     5 -
 .../ignite/internal/GridTaskSessionImpl.java    |    15 +-
 .../ignite/internal/IgniteComponentType.java    |    11 +-
 .../apache/ignite/internal/IgniteKernal.java    |    14 +-
 .../org/apache/ignite/internal/IgnitionEx.java  |    19 +
 .../internal/binary/BinaryClassDescriptor.java  |    16 +-
 .../ignite/internal/binary/BinaryContext.java   |     5 +
 .../internal/binary/BinaryEnumObjectImpl.java   |     5 +
 .../ignite/internal/binary/BinaryObjectEx.java  |     8 +
 .../internal/binary/BinaryObjectExImpl.java     |   164 +-
 .../internal/binary/BinaryObjectImpl.java       |     7 +
 .../binary/BinaryObjectOffheapImpl.java         |     7 +
 .../ignite/internal/binary/BinaryUtils.java     |     5 +-
 .../internal/binary/BinaryWriterExImpl.java     |    27 +-
 .../binary/builder/BinaryObjectBuilderImpl.java |    11 +-
 .../internal/managers/GridManagerAdapter.java   |    15 +
 .../communication/GridIoMessageFactory.java     |     6 +
 .../discovery/GridDiscoveryManager.java         |    73 +-
 .../loadbalancer/GridLoadBalancerManager.java   |    10 +-
 .../processors/cache/GridCacheEntryEx.java      |     8 +
 .../processors/cache/GridCacheMapEntry.java     |     9 +-
 .../processors/cache/GridCacheProcessor.java    |     2 +
 .../GridCacheReturnCompletableWrapper.java      |   101 +
 .../cache/GridCacheSharedContext.java           |    24 +-
 .../cache/GridCacheSharedTtlCleanupManager.java |   132 +
 .../processors/cache/GridCacheSwapManager.java  |    14 +
 .../processors/cache/GridCacheTtlManager.java   |   145 +-
 .../processors/cache/GridCacheUtils.java        |     5 +
 .../cache/GridDeferredAckMessageSender.java     |   219 +
 .../GridDistributedTxRemoteAdapter.java         |    65 +-
 .../distributed/dht/GridDhtTxFinishFuture.java  |    12 +-
 .../distributed/dht/GridDhtTxFinishRequest.java |    33 +-
 .../dht/GridDhtTxFinishResponse.java            |    52 +-
 .../dht/GridDhtTxOnePhaseCommitAckRequest.java  |   134 +
 .../distributed/dht/GridDhtTxPrepareFuture.java |    42 +-
 .../dht/GridDhtTxPrepareRequest.java            |    93 +-
 .../cache/distributed/dht/GridDhtTxRemote.java  |     6 +-
 .../dht/atomic/GridDhtAtomicCache.java          |   227 +-
 ...arOptimisticSerializableTxPrepareFuture.java |     4 +-
 .../near/GridNearOptimisticTxPrepareFuture.java |     7 +-
 .../GridNearPessimisticTxPrepareFuture.java     |     4 +-
 .../near/GridNearTxFinishFuture.java            |   112 +-
 .../continuous/CacheContinuousQueryHandler.java |     5 -
 .../cache/transactions/IgniteTxAdapter.java     |    46 +-
 .../cache/transactions/IgniteTxEntry.java       |    44 +-
 .../cache/transactions/IgniteTxHandler.java     |   163 +-
 .../transactions/IgniteTxLocalAdapter.java      |    27 +-
 .../cache/transactions/IgniteTxManager.java     |   159 +-
 .../continuous/GridContinuousHandler.java       |     8 -
 .../continuous/GridContinuousProcessor.java     |    33 +-
 .../processors/hadoop/HadoopClassLoader.java    |   487 +
 .../processors/hadoop/HadoopClasspathUtils.java |   424 +
 .../processors/hadoop/HadoopDefaultJobInfo.java |   156 +
 .../processors/hadoop/HadoopHelper.java         |    55 +
 .../processors/hadoop/HadoopJobInfo.java        |     4 +-
 .../processors/hadoop/HadoopLocations.java      |   123 +
 .../processors/hadoop/HadoopNoopHelper.java     |    66 +
 .../processors/hadoop/HadoopNoopProcessor.java  |     4 +-
 .../igfs/IgfsAbstractOutputStream.java          |   266 +
 .../internal/processors/igfs/IgfsContext.java   |    35 +
 .../processors/igfs/IgfsDataManager.java        |   123 +-
 .../internal/processors/igfs/IgfsImpl.java      |   130 +-
 .../processors/igfs/IgfsInputStreamImpl.java    |   103 +-
 .../processors/igfs/IgfsKernalContextAware.java |    32 +
 .../processors/igfs/IgfsOutputStreamImpl.java   |   319 +-
 .../igfs/IgfsOutputStreamProxyImpl.java         |   163 +
 .../internal/processors/igfs/IgfsProcessor.java |    17 +-
 .../processors/job/GridJobProcessor.java        |     3 +-
 .../offheap/GridOffHeapProcessor.java           |    14 +
 .../platform/PlatformConfigurationEx.java       |     7 +
 .../platform/PlatformContextImpl.java           |     3 -
 .../processors/platform/PlatformProcessor.java  |    10 +-
 .../platform/PlatformProcessorImpl.java         |    72 +-
 .../platform/cache/PlatformCache.java           |   114 +-
 .../platform/cache/PlatformCacheExtension.java  |    47 +
 .../cpp/PlatformCppConfigurationEx.java         |     7 +
 .../dotnet/PlatformDotNetConfigurationEx.java   |     9 +
 .../PlatformDotNetSessionCacheExtension.java    |   144 +
 .../websession/PlatformDotNetSessionData.java   |   260 +
 .../PlatformDotNetSessionLockProcessor.java     |    84 +
 .../PlatformDotNetSessionLockResult.java        |   106 +
 ...tformDotNetSessionSetAndUnlockProcessor.java |   179 +
 .../session/GridTaskSessionProcessor.java       |     9 +-
 .../processors/task/GridTaskProcessor.java      |     3 +-
 .../processors/task/GridTaskWorker.java         |     2 +-
 .../util/GridBoundedConcurrentOrderedMap.java   |     5 +
 .../ignite/internal/util/IgniteUtils.java       |    23 +-
 .../org/apache/ignite/spi/IgniteSpiAdapter.java |    11 +
 .../org/apache/ignite/spi/IgniteSpiContext.java |    26 +-
 .../ignite/spi/discovery/tcp/ClientImpl.java    |    18 +-
 .../TcpDiscoveryMulticastIpFinder.java          |     3 -
 .../spi/swapspace/file/FileSwapSpaceSpi.java    |    91 +-
 .../CacheJdbcPojoStoreAbstractSelfTest.java     |   103 +-
 ...heJdbcPojoStoreBinaryMarshallerSelfTest.java |    14 +-
 ...reBinaryMarshallerWithSqlEscapeSelfTest.java |    28 +
 ...dbcPojoStoreOptimizedMarshallerSelfTest.java |     2 +-
 ...ptimizedMarshallerWithSqlEscapeSelfTest.java |    28 +
 .../IgniteClientReconnectCacheTest.java         |    35 +
 .../binary/BinaryMarshallerSelfTest.java        |    53 +-
 .../binary/BinaryObjectToStringSelfTest.java    |    92 +
 ...GridManagerLocalMessageListenerSelfTest.java |   222 +
 .../GridDiscoveryManagerAliveCacheSelfTest.java |     4 +-
 .../discovery/GridDiscoveryManagerSelfTest.java |     6 +-
 .../CacheSwapUnswapGetTestSmallQueueSize.java   |    35 +
 ...idAbstractCacheInterceptorRebalanceTest.java |   356 +
 .../cache/GridCacheAbstractFullApiSelfTest.java |     2 +-
 ...heInterceptorAtomicOffheapRebalanceTest.java |    30 +
 ...GridCacheInterceptorAtomicRebalanceTest.java |    36 +
 ...ceptorTransactionalOffheapRebalanceTest.java |    35 +
 ...heInterceptorTransactionalRebalanceTest.java |    36 +
 .../cache/GridCacheOffHeapCleanupTest.java      |   169 +
 ...ridCacheStoreManagerDeserializationTest.java |     1 +
 .../cache/GridCacheSwapCleanupTest.java         |    99 +
 .../processors/cache/GridCacheTestEntryEx.java  |     4 +
 .../GridCacheTtlManagerNotificationTest.java    |   107 +-
 .../cache/GridCacheUtilsSelfTest.java           |    64 +-
 ...calCacheStoreManagerDeserializationTest.java |     2 +-
 .../IgniteCacheInterceptorSelfTestSuite.java    |     5 +
 .../GridCacheBinaryObjectsAbstractSelfTest.java |    31 +
 .../IgniteCachePutRetryAbstractSelfTest.java    |    39 +-
 ...gniteCachePutRetryTransactionalSelfTest.java |    75 +-
 .../IgniteCacheExpiryPolicyTestSuite.java       |     2 +
 ...eCacheOnlyOneTtlCleanupThreadExistsTest.java |   102 +
 ...ContinuousQueryFailoverAbstractSelfTest.java |    99 +
 ...eContinuousQueryMultiNodesFilteringTest.java |   161 +
 .../igfs/IgfsAbstractBaseSelfTest.java          |    12 +-
 .../processors/igfs/IgfsAbstractSelfTest.java   |    26 +-
 .../IgfsAtomicPrimaryMultiNodeSelfTest.java     |    39 +
 .../IgfsAtomicPrimaryOffheapTieredSelfTest.java |    39 +
 .../IgfsAtomicPrimaryOffheapValuesSelfTest.java |    39 +
 .../igfs/IgfsAtomicPrimarySelfTest.java         |    39 +
 ...SecondaryFileSystemDualAbstractSelfTest.java |     3 +-
 ...lSecondaryFileSystemProxyClientSelfTest.java |    28 +
 ...fsLocalSecondaryFileSystemProxySelfTest.java |   272 +
 .../processors/igfs/IgfsProxySelfTest.java      |     2 +-
 .../loadtests/hashmap/GridCacheTestContext.java |     2 +
 .../marshaller/MarshallerContextTestImpl.java   |    28 +-
 .../tcp/TcpClientDiscoverySpiMulticastTest.java |     2 +-
 .../spi/discovery/tcp/TcpDiscoverySelfTest.java |     2 +-
 .../TcpDiscoveryMulticastIpFinderSelfTest.java  |     6 +-
 .../GridInternalTasksLoadBalancingSelfTest.java |   201 +
 .../file/GridFileSwapSpaceSpiSelfTest.java      |    89 +
 .../testframework/GridSpiTestContext.java       |   115 +-
 .../ignite/testframework/IgniteTestSuite.java   |   163 +-
 .../testframework/junits/GridAbstractTest.java  |    22 +-
 .../IgniteBinaryObjectsTestSuite.java           |     2 +
 .../ignite/testsuites/IgniteCacheTestSuite.java |     6 +
 .../testsuites/IgniteCacheTestSuite4.java       |     2 +
 .../testsuites/IgniteCacheTestSuite5.java       |     3 +
 .../ignite/testsuites/IgniteIgfsTestSuite.java  |    16 +
 .../apache/ignite/testsuites/IgniteIgnore.java  |    11 +-
 .../testsuites/IgniteIgnoredTestSuite.java      |    63 -
 .../IgniteSpiLoadBalancingSelfTestSuite.java    |    34 +-
 .../ignite/testsuites/IgniteSpiTestSuite.java   |     6 +-
 .../hadoop/fs/BasicHadoopFileSystemFactory.java |   132 +-
 .../fs/CachingHadoopFileSystemFactory.java      |    54 +-
 .../hadoop/fs/HadoopFileSystemFactory.java      |    11 +-
 .../fs/IgniteHadoopFileSystemCounterWriter.java |    79 +-
 .../fs/IgniteHadoopIgfsSecondaryFileSystem.java |   402 +-
 .../fs/KerberosHadoopFileSystemFactory.java     |    77 +-
 .../hadoop/fs/v1/IgniteHadoopFileSystem.java    |    47 +-
 .../hadoop/fs/v2/IgniteHadoopFileSystem.java    |    47 +-
 .../IgniteHadoopClientProtocolProvider.java     |    11 +-
 .../mapreduce/IgniteHadoopMapReducePlanner.java |    22 +-
 .../IgniteHadoopWeightedMapReducePlanner.java   |     4 +-
 .../ignite/hadoop/util/UserNameMapper.java      |     4 +-
 .../processors/hadoop/HadoopClassLoader.java    |   966 --
 .../processors/hadoop/HadoopClasspathMain.java  |    44 -
 .../processors/hadoop/HadoopClasspathUtils.java |   295 -
 .../processors/hadoop/HadoopCommonUtils.java    |   154 +
 .../processors/hadoop/HadoopContext.java        |     1 -
 .../processors/hadoop/HadoopDefaultJobInfo.java |   157 -
 .../processors/hadoop/HadoopExternalSplit.java  |    88 +
 .../processors/hadoop/HadoopHelperImpl.java     |   120 +
 .../processors/hadoop/HadoopLocations.java      |   123 -
 .../hadoop/HadoopMapReduceCounterGroup.java     |   123 -
 .../hadoop/HadoopMapReduceCounters.java         |   228 -
 .../processors/hadoop/HadoopProcessor.java      |    32 +-
 .../processors/hadoop/HadoopSplitWrapper.java   |   119 +
 .../internal/processors/hadoop/HadoopUtils.java |   436 -
 .../hadoop/counter/HadoopCounterAdapter.java    |     1 +
 .../counter/HadoopPerformanceCounter.java       |    12 +-
 .../hadoop/delegate/HadoopDelegateUtils.java    |   138 +
 .../HadoopFileSystemCounterWriterDelegate.java  |    36 +
 .../HadoopFileSystemFactoryDelegate.java        |    36 +
 .../HadoopIgfsSecondaryFileSystemDelegate.java  |    28 +
 .../hadoop/fs/HadoopFileSystemCacheUtils.java   |   242 -
 .../hadoop/fs/HadoopFileSystemsUtils.java       |    51 -
 .../hadoop/fs/HadoopLazyConcurrentMap.java      |   212 -
 .../hadoop/fs/HadoopLocalFileSystemV1.java      |    39 -
 .../hadoop/fs/HadoopLocalFileSystemV2.java      |    88 -
 .../processors/hadoop/fs/HadoopParameters.java  |    94 -
 .../hadoop/fs/HadoopRawLocalFileSystem.java     |   314 -
 .../processors/hadoop/igfs/HadoopIgfs.java      |   202 -
 .../igfs/HadoopIgfsCommunicationException.java  |    57 -
 .../processors/hadoop/igfs/HadoopIgfsEx.java    |    93 -
 .../hadoop/igfs/HadoopIgfsFuture.java           |    97 -
 .../hadoop/igfs/HadoopIgfsInProc.java           |   510 -
 .../hadoop/igfs/HadoopIgfsInputStream.java      |   629 -
 .../processors/hadoop/igfs/HadoopIgfsIo.java    |    76 -
 .../processors/hadoop/igfs/HadoopIgfsIpcIo.java |   624 -
 .../hadoop/igfs/HadoopIgfsIpcIoListener.java    |    36 -
 .../hadoop/igfs/HadoopIgfsJclLogger.java        |   116 -
 .../hadoop/igfs/HadoopIgfsOutProc.java          |   524 -
 .../hadoop/igfs/HadoopIgfsOutputStream.java     |   201 -
 .../hadoop/igfs/HadoopIgfsProperties.java       |    86 -
 .../hadoop/igfs/HadoopIgfsProxyInputStream.java |   337 -
 .../igfs/HadoopIgfsProxyOutputStream.java       |   165 -
 ...fsSecondaryFileSystemPositionedReadable.java |   105 -
 .../hadoop/igfs/HadoopIgfsStreamDelegate.java   |    96 -
 .../igfs/HadoopIgfsStreamEventListener.java     |    39 -
 .../processors/hadoop/igfs/HadoopIgfsUtils.java |   174 -
 .../hadoop/igfs/HadoopIgfsWrapper.java          |   552 -
 .../impl/HadoopMapReduceCounterGroup.java       |   124 +
 .../hadoop/impl/HadoopMapReduceCounters.java    |   229 +
 .../processors/hadoop/impl/HadoopUtils.java     |   328 +
 .../HadoopBasicFileSystemFactoryDelegate.java   |   164 +
 .../HadoopCachingFileSystemFactoryDelegate.java |    75 +
 .../HadoopDefaultFileSystemFactoryDelegate.java |    62 +
 ...doopFileSystemCounterWriterDelegateImpl.java |   108 +
 ...doopIgfsSecondaryFileSystemDelegateImpl.java |   472 +
 ...HadoopKerberosFileSystemFactoryDelegate.java |   112 +
 .../impl/fs/HadoopFileSystemCacheUtils.java     |   243 +
 .../hadoop/impl/fs/HadoopFileSystemsUtils.java  |    51 +
 .../hadoop/impl/fs/HadoopLazyConcurrentMap.java |   210 +
 .../hadoop/impl/fs/HadoopLocalFileSystemV1.java |    40 +
 .../hadoop/impl/fs/HadoopLocalFileSystemV2.java |    89 +
 .../hadoop/impl/fs/HadoopParameters.java        |    94 +
 .../impl/fs/HadoopRawLocalFileSystem.java       |   315 +
 .../processors/hadoop/impl/igfs/HadoopIgfs.java |   203 +
 .../igfs/HadoopIgfsCommunicationException.java  |    57 +
 .../hadoop/impl/igfs/HadoopIgfsEx.java          |    94 +
 .../hadoop/impl/igfs/HadoopIgfsFuture.java      |    97 +
 .../hadoop/impl/igfs/HadoopIgfsInProc.java      |   511 +
 .../hadoop/impl/igfs/HadoopIgfsInputStream.java |   630 +
 .../hadoop/impl/igfs/HadoopIgfsIo.java          |    76 +
 .../hadoop/impl/igfs/HadoopIgfsIpcIo.java       |   625 +
 .../impl/igfs/HadoopIgfsIpcIoListener.java      |    36 +
 .../hadoop/impl/igfs/HadoopIgfsJclLogger.java   |   116 +
 .../hadoop/impl/igfs/HadoopIgfsOutProc.java     |   525 +
 .../impl/igfs/HadoopIgfsOutputStream.java       |   202 +
 .../hadoop/impl/igfs/HadoopIgfsProperties.java  |    87 +
 .../impl/igfs/HadoopIgfsProxyInputStream.java   |   338 +
 .../impl/igfs/HadoopIgfsProxyOutputStream.java  |   166 +
 ...fsSecondaryFileSystemPositionedReadable.java |   106 +
 .../impl/igfs/HadoopIgfsStreamDelegate.java     |    96 +
 .../igfs/HadoopIgfsStreamEventListener.java     |    39 +
 .../hadoop/impl/igfs/HadoopIgfsUtils.java       |   175 +
 .../hadoop/impl/igfs/HadoopIgfsWrapper.java     |   554 +
 .../hadoop/impl/proto/HadoopClientProtocol.java |   354 +
 .../hadoop/impl/v1/HadoopV1CleanupTask.java     |    65 +
 .../hadoop/impl/v1/HadoopV1Counter.java         |   107 +
 .../hadoop/impl/v1/HadoopV1MapTask.java         |   122 +
 .../hadoop/impl/v1/HadoopV1OutputCollector.java |   138 +
 .../hadoop/impl/v1/HadoopV1Partitioner.java     |    44 +
 .../hadoop/impl/v1/HadoopV1ReduceTask.java      |   101 +
 .../hadoop/impl/v1/HadoopV1Reporter.java        |    81 +
 .../hadoop/impl/v1/HadoopV1SetupTask.java       |    57 +
 .../hadoop/impl/v1/HadoopV1Splitter.java        |   103 +
 .../processors/hadoop/impl/v1/HadoopV1Task.java |    98 +
 .../processors/hadoop/impl/v2/HadoopDaemon.java |   126 +
 .../impl/v2/HadoopSerializationWrapper.java     |   139 +
 .../impl/v2/HadoopShutdownHookManager.java      |    98 +
 .../hadoop/impl/v2/HadoopV2CleanupTask.java     |    73 +
 .../hadoop/impl/v2/HadoopV2Context.java         |   244 +
 .../hadoop/impl/v2/HadoopV2Counter.java         |    89 +
 .../processors/hadoop/impl/v2/HadoopV2Job.java  |   452 +
 .../impl/v2/HadoopV2JobResourceManager.java     |   324 +
 .../hadoop/impl/v2/HadoopV2MapTask.java         |    99 +
 .../hadoop/impl/v2/HadoopV2Partitioner.java     |    44 +
 .../hadoop/impl/v2/HadoopV2ReduceTask.java      |    91 +
 .../hadoop/impl/v2/HadoopV2SetupTask.java       |    66 +
 .../hadoop/impl/v2/HadoopV2Splitter.java        |   112 +
 .../processors/hadoop/impl/v2/HadoopV2Task.java |   186 +
 .../hadoop/impl/v2/HadoopV2TaskContext.java     |   563 +
 .../impl/v2/HadoopWritableSerialization.java    |    76 +
 .../hadoop/jobtracker/HadoopJobTracker.java     |    23 +-
 .../planner/HadoopDefaultMapReducePlan.java     |     7 +-
 .../hadoop/proto/HadoopClientProtocol.java      |   349 -
 .../child/HadoopChildProcessRunner.java         |    16 +-
 .../hadoop/v1/HadoopV1CleanupTask.java          |    64 -
 .../processors/hadoop/v1/HadoopV1Counter.java   |   106 -
 .../processors/hadoop/v1/HadoopV1MapTask.java   |   122 -
 .../hadoop/v1/HadoopV1OutputCollector.java      |   137 -
 .../hadoop/v1/HadoopV1Partitioner.java          |    44 -
 .../hadoop/v1/HadoopV1ReduceTask.java           |   101 -
 .../processors/hadoop/v1/HadoopV1Reporter.java  |    81 -
 .../processors/hadoop/v1/HadoopV1SetupTask.java |    56 -
 .../processors/hadoop/v1/HadoopV1Splitter.java  |   102 -
 .../processors/hadoop/v1/HadoopV1Task.java      |    97 -
 .../processors/hadoop/v2/HadoopDaemon.java      |   126 -
 .../hadoop/v2/HadoopExternalSplit.java          |    89 -
 .../hadoop/v2/HadoopSerializationWrapper.java   |   138 -
 .../hadoop/v2/HadoopShutdownHookManager.java    |    98 -
 .../hadoop/v2/HadoopSplitWrapper.java           |   119 -
 .../hadoop/v2/HadoopV2CleanupTask.java          |    72 -
 .../processors/hadoop/v2/HadoopV2Context.java   |   243 -
 .../processors/hadoop/v2/HadoopV2Counter.java   |    88 -
 .../processors/hadoop/v2/HadoopV2Job.java       |   443 -
 .../hadoop/v2/HadoopV2JobResourceManager.java   |   322 -
 .../processors/hadoop/v2/HadoopV2MapTask.java   |    99 -
 .../hadoop/v2/HadoopV2Partitioner.java          |    44 -
 .../hadoop/v2/HadoopV2ReduceTask.java           |    91 -
 .../processors/hadoop/v2/HadoopV2SetupTask.java |    65 -
 .../processors/hadoop/v2/HadoopV2Splitter.java  |   111 -
 .../processors/hadoop/v2/HadoopV2Task.java      |   185 -
 .../hadoop/v2/HadoopV2TaskContext.java          |   559 -
 .../hadoop/v2/HadoopWritableSerialization.java  |    75 -
 .../HadoopClientProtocolEmbeddedSelfTest.java   |    35 -
 .../hadoop/HadoopClientProtocolSelfTest.java    |   654 -
 .../hadoop/cache/HadoopTxConfigCacheTest.java   |    42 -
 ...KerberosHadoopFileSystemFactorySelfTest.java |   121 -
 .../util/BasicUserNameMapperSelfTest.java       |   133 -
 .../util/ChainedUserNameMapperSelfTest.java     |   107 -
 .../util/KerberosUserNameMapperSelfTest.java    |    99 -
 .../ignite/igfs/Hadoop1DualAbstractTest.java    |   158 -
 .../igfs/Hadoop1OverIgfsDualAsyncTest.java      |    30 -
 .../igfs/Hadoop1OverIgfsDualSyncTest.java       |    30 -
 .../igfs/HadoopFIleSystemFactorySelfTest.java   |   327 -
 .../HadoopIgfs20FileSystemAbstractSelfTest.java |  2040 ---
 ...Igfs20FileSystemLoopbackPrimarySelfTest.java |    74 -
 ...oopIgfs20FileSystemShmemPrimarySelfTest.java |    74 -
 .../igfs/HadoopIgfsDualAbstractSelfTest.java    |   321 -
 .../igfs/HadoopIgfsDualAsyncSelfTest.java       |    32 -
 .../ignite/igfs/HadoopIgfsDualSyncSelfTest.java |    32 -
 ...adoopIgfsSecondaryFileSystemTestAdapter.java |   149 -
 ...oopSecondaryFileSystemConfigurationTest.java |   575 -
 .../apache/ignite/igfs/IgfsEventsTestSuite.java |   285 -
 .../igfs/IgfsNearOnlyMultiNodeSelfTest.java     |   223 -
 .../IgniteHadoopFileSystemAbstractSelfTest.java |  2432 ---
 .../IgniteHadoopFileSystemClientSelfTest.java   |   212 -
 ...IgniteHadoopFileSystemHandshakeSelfTest.java |   389 -
 .../IgniteHadoopFileSystemIpcCacheSelfTest.java |   214 -
 .../IgniteHadoopFileSystemLoggerSelfTest.java   |   298 -
 ...niteHadoopFileSystemLoggerStateSelfTest.java |   329 -
 ...adoopFileSystemLoopbackAbstractSelfTest.java |    46 -
 ...SystemLoopbackEmbeddedDualAsyncSelfTest.java |    33 -
 ...eSystemLoopbackEmbeddedDualSyncSelfTest.java |    33 -
 ...leSystemLoopbackEmbeddedPrimarySelfTest.java |    33 -
 ...SystemLoopbackEmbeddedSecondarySelfTest.java |    34 -
 ...SystemLoopbackExternalDualAsyncSelfTest.java |    33 -
 ...eSystemLoopbackExternalDualSyncSelfTest.java |    33 -
 ...leSystemLoopbackExternalPrimarySelfTest.java |    33 -
 ...SystemLoopbackExternalSecondarySelfTest.java |    34 -
 ...condaryFileSystemInitializationSelfTest.java |   214 -
 ...teHadoopFileSystemShmemAbstractSelfTest.java |    91 -
 ...ileSystemShmemEmbeddedDualAsyncSelfTest.java |    33 -
 ...FileSystemShmemEmbeddedDualSyncSelfTest.java |    33 -
 ...pFileSystemShmemEmbeddedPrimarySelfTest.java |    33 -
 ...ileSystemShmemEmbeddedSecondarySelfTest.java |    33 -
 ...ileSystemShmemExternalDualAsyncSelfTest.java |    33 -
 ...FileSystemShmemExternalDualSyncSelfTest.java |    33 -
 ...pFileSystemShmemExternalPrimarySelfTest.java |    33 -
 ...ileSystemShmemExternalSecondarySelfTest.java |    33 -
 .../hadoop/HadoopAbstractMapReduceTest.java     |   429 -
 .../hadoop/HadoopAbstractSelfTest.java          |   239 -
 .../hadoop/HadoopAbstractWordCountTest.java     |   175 -
 .../hadoop/HadoopClassLoaderTest.java           |   110 -
 .../hadoop/HadoopCommandLineTest.java           |   474 -
 .../HadoopDefaultMapReducePlannerSelfTest.java  |   615 -
 .../processors/hadoop/HadoopErrorSimulator.java |   326 -
 .../hadoop/HadoopFileSystemsTest.java           |   155 -
 .../processors/hadoop/HadoopGroupingTest.java   |   307 -
 .../hadoop/HadoopJobTrackerSelfTest.java        |   345 -
 .../hadoop/HadoopMapReduceEmbeddedSelfTest.java |   253 -
 .../HadoopMapReduceErrorResilienceTest.java     |   154 -
 .../processors/hadoop/HadoopMapReduceTest.java  |    66 -
 .../hadoop/HadoopNoHadoopMapReduceTest.java     |    47 -
 .../processors/hadoop/HadoopPlannerMockJob.java |   168 -
 .../hadoop/HadoopPopularWordsTest.java          |   298 -
 .../HadoopSerializationWrapperSelfTest.java     |    79 -
 .../processors/hadoop/HadoopSharedMap.java      |     1 +
 .../hadoop/HadoopSnappyFullMapReduceTest.java   |    36 -
 .../processors/hadoop/HadoopSnappyTest.java     |   102 -
 .../hadoop/HadoopSortingExternalTest.java       |    46 -
 .../processors/hadoop/HadoopSortingTest.java    |   303 -
 .../hadoop/HadoopSplitWrapperSelfTest.java      |    72 -
 .../processors/hadoop/HadoopStartup.java        |    54 -
 .../hadoop/HadoopTaskExecutionSelfTest.java     |   567 -
 .../hadoop/HadoopTasksAllVersionsTest.java      |   260 -
 .../processors/hadoop/HadoopTasksV1Test.java    |    58 -
 .../processors/hadoop/HadoopTasksV2Test.java    |    77 -
 .../hadoop/HadoopTestClassLoader.java           |   106 +
 .../hadoop/HadoopTestRoundRobinMrPlanner.java   |    71 -
 .../hadoop/HadoopTestTaskContext.java           |   228 -
 .../processors/hadoop/HadoopTestUtils.java      |   107 -
 .../processors/hadoop/HadoopV2JobSelfTest.java  |   100 -
 .../hadoop/HadoopValidationSelfTest.java        |    53 -
 .../HadoopWeightedMapReducePlannerTest.java     |   599 -
 .../HadoopWeightedPlannerMapReduceTest.java     |    38 -
 .../hadoop/books/alice-in-wonderland.txt        |  3735 -----
 .../processors/hadoop/books/art-of-war.txt      |  6982 ---------
 .../hadoop/books/huckleberry-finn.txt           | 11733 ---------------
 .../processors/hadoop/books/sherlock-holmes.txt | 13052 -----------------
 .../processors/hadoop/books/tom-sawyer.txt      |  8858 -----------
 .../hadoop/deps/CircularWIthHadoop.java         |    32 -
 .../hadoop/deps/CircularWithoutHadoop.java      |    27 -
 .../processors/hadoop/deps/WithCast.java        |    41 -
 .../hadoop/deps/WithClassAnnotation.java        |    28 -
 .../hadoop/deps/WithConstructorInvocation.java  |    31 -
 .../processors/hadoop/deps/WithExtends.java     |    27 -
 .../processors/hadoop/deps/WithField.java       |    29 -
 .../processors/hadoop/deps/WithImplements.java  |    36 -
 .../hadoop/deps/WithIndirectField.java          |    27 -
 .../processors/hadoop/deps/WithInitializer.java |    33 -
 .../processors/hadoop/deps/WithInnerClass.java  |    31 -
 .../hadoop/deps/WithLocalVariable.java          |    38 -
 .../hadoop/deps/WithMethodAnnotation.java       |    32 -
 .../hadoop/deps/WithMethodArgument.java         |    31 -
 .../hadoop/deps/WithMethodCheckedException.java |    31 -
 .../hadoop/deps/WithMethodInvocation.java       |    31 -
 .../hadoop/deps/WithMethodReturnType.java       |    31 -
 .../hadoop/deps/WithMethodRuntimeException.java |    31 -
 .../processors/hadoop/deps/WithOuterClass.java  |    38 -
 .../hadoop/deps/WithParameterAnnotation.java    |    31 -
 .../processors/hadoop/deps/WithStaticField.java |    29 -
 .../hadoop/deps/WithStaticInitializer.java      |    34 -
 .../processors/hadoop/deps/Without.java         |    25 -
 .../hadoop/examples/HadoopWordCount1.java       |    94 -
 .../hadoop/examples/HadoopWordCount1Map.java    |    79 -
 .../hadoop/examples/HadoopWordCount1Reduce.java |    61 -
 .../hadoop/examples/HadoopWordCount2.java       |   111 -
 .../examples/HadoopWordCount2Combiner.java      |    45 -
 .../hadoop/examples/HadoopWordCount2Mapper.java |    88 -
 .../examples/HadoopWordCount2Reducer.java       |   113 -
 .../impl/HadoopAbstractMapReduceTest.java       |   430 +
 .../hadoop/impl/HadoopAbstractSelfTest.java     |   239 +
 .../impl/HadoopAbstractWordCountTest.java       |   175 +
 .../hadoop/impl/HadoopCommandLineTest.java      |   476 +
 .../HadoopDefaultMapReducePlannerSelfTest.java  |   619 +
 .../hadoop/impl/HadoopErrorSimulator.java       |   326 +
 .../hadoop/impl/HadoopFileSystemsTest.java      |   155 +
 .../hadoop/impl/HadoopGroupingTest.java         |   302 +
 .../hadoop/impl/HadoopJobTrackerSelfTest.java   |   334 +
 .../impl/HadoopMapReduceEmbeddedSelfTest.java   |   249 +
 .../HadoopMapReduceErrorResilienceTest.java     |   154 +
 .../hadoop/impl/HadoopMapReduceTest.java        |    66 +
 .../impl/HadoopNoHadoopMapReduceTest.java       |    47 +
 .../hadoop/impl/HadoopPlannerMockJob.java       |   175 +
 .../hadoop/impl/HadoopPopularWordsTest.java     |   298 +
 .../HadoopSerializationWrapperSelfTest.java     |    80 +
 .../impl/HadoopSnappyFullMapReduceTest.java     |    36 +
 .../hadoop/impl/HadoopSnappyTest.java           |   104 +
 .../hadoop/impl/HadoopSortingExternalTest.java  |    46 +
 .../hadoop/impl/HadoopSortingTest.java          |   304 +
 .../hadoop/impl/HadoopSplitWrapperSelfTest.java |    72 +
 .../processors/hadoop/impl/HadoopStartup.java   |    54 +
 .../impl/HadoopTaskExecutionSelfTest.java       |   550 +
 .../hadoop/impl/HadoopTasksAllVersionsTest.java |   264 +
 .../hadoop/impl/HadoopTasksV1Test.java          |    62 +
 .../hadoop/impl/HadoopTasksV2Test.java          |    81 +
 .../impl/HadoopTestRoundRobinMrPlanner.java     |    75 +
 .../hadoop/impl/HadoopTestTaskContext.java      |   233 +
 .../processors/hadoop/impl/HadoopTestUtils.java |   178 +
 .../hadoop/impl/HadoopTxConfigCacheTest.java    |    42 +
 .../hadoop/impl/HadoopUserLibsSelfTest.java     |   261 +
 .../hadoop/impl/HadoopV2JobSelfTest.java        |   108 +
 .../hadoop/impl/HadoopValidationSelfTest.java   |    53 +
 .../HadoopWeightedMapReducePlannerTest.java     |   602 +
 .../HadoopWeightedPlannerMapReduceTest.java     |    38 +
 .../hadoop/impl/books/alice-in-wonderland.txt   |  3735 +++++
 .../processors/hadoop/impl/books/art-of-war.txt |  6982 +++++++++
 .../hadoop/impl/books/huckleberry-finn.txt      | 11733 +++++++++++++++
 .../hadoop/impl/books/sherlock-holmes.txt       | 13052 +++++++++++++++++
 .../processors/hadoop/impl/books/tom-sawyer.txt |  8858 +++++++++++
 .../HadoopClientProtocolEmbeddedSelfTest.java   |    35 +
 .../client/HadoopClientProtocolSelfTest.java    |   654 +
 .../hadoop/impl/examples/HadoopWordCount1.java  |    94 +
 .../impl/examples/HadoopWordCount1Map.java      |    79 +
 .../impl/examples/HadoopWordCount1Reduce.java   |    61 +
 .../hadoop/impl/examples/HadoopWordCount2.java  |   111 +
 .../impl/examples/HadoopWordCount2Combiner.java |    45 +
 .../impl/examples/HadoopWordCount2Mapper.java   |    88 +
 .../impl/examples/HadoopWordCount2Reducer.java  |   113 +
 ...KerberosHadoopFileSystemFactorySelfTest.java |   126 +
 .../impl/igfs/Hadoop1DualAbstractTest.java      |   157 +
 .../impl/igfs/Hadoop1OverIgfsDualAsyncTest.java |    32 +
 .../impl/igfs/Hadoop1OverIgfsDualSyncTest.java  |    32 +
 .../igfs/HadoopFIleSystemFactorySelfTest.java   |   345 +
 .../HadoopIgfs20FileSystemAbstractSelfTest.java |  2047 +++
 ...Igfs20FileSystemLoopbackPrimarySelfTest.java |    77 +
 ...oopIgfs20FileSystemShmemPrimarySelfTest.java |    77 +
 .../igfs/HadoopIgfsDualAbstractSelfTest.java    |   328 +
 .../impl/igfs/HadoopIgfsDualAsyncSelfTest.java  |    32 +
 .../impl/igfs/HadoopIgfsDualSyncSelfTest.java   |    32 +
 ...adoopIgfsSecondaryFileSystemTestAdapter.java |   153 +
 ...oopSecondaryFileSystemConfigurationTest.java |   583 +
 .../hadoop/impl/igfs/IgfsEventsTestSuite.java   |   289 +
 .../igfs/IgfsNearOnlyMultiNodeSelfTest.java     |   226 +
 .../IgniteHadoopFileSystemAbstractSelfTest.java |  2435 +++
 .../IgniteHadoopFileSystemClientSelfTest.java   |   216 +
 ...IgniteHadoopFileSystemHandshakeSelfTest.java |   393 +
 .../IgniteHadoopFileSystemIpcCacheSelfTest.java |   215 +
 .../IgniteHadoopFileSystemLoggerSelfTest.java   |   299 +
 ...niteHadoopFileSystemLoggerStateSelfTest.java |   332 +
 ...adoopFileSystemLoopbackAbstractSelfTest.java |    50 +
 ...SystemLoopbackEmbeddedDualAsyncSelfTest.java |    33 +
 ...eSystemLoopbackEmbeddedDualSyncSelfTest.java |    33 +
 ...leSystemLoopbackEmbeddedPrimarySelfTest.java |    33 +
 ...SystemLoopbackEmbeddedSecondarySelfTest.java |    34 +
 ...SystemLoopbackExternalDualAsyncSelfTest.java |    33 +
 ...eSystemLoopbackExternalDualSyncSelfTest.java |    33 +
 ...leSystemLoopbackExternalPrimarySelfTest.java |    33 +
 ...SystemLoopbackExternalSecondarySelfTest.java |    34 +
 ...condaryFileSystemInitializationSelfTest.java |   217 +
 ...teHadoopFileSystemShmemAbstractSelfTest.java |    94 +
 ...ileSystemShmemEmbeddedDualAsyncSelfTest.java |    33 +
 ...FileSystemShmemEmbeddedDualSyncSelfTest.java |    33 +
 ...pFileSystemShmemEmbeddedPrimarySelfTest.java |    33 +
 ...ileSystemShmemEmbeddedSecondarySelfTest.java |    33 +
 ...ileSystemShmemExternalDualAsyncSelfTest.java |    33 +
 ...FileSystemShmemExternalDualSyncSelfTest.java |    33 +
 ...pFileSystemShmemExternalPrimarySelfTest.java |    33 +
 ...ileSystemShmemExternalSecondarySelfTest.java |    33 +
 .../collections/HadoopAbstractMapTest.java      |   175 +
 .../HadoopConcurrentHashMultimapSelftest.java   |   280 +
 .../collections/HadoopHashMapSelfTest.java      |   133 +
 .../collections/HadoopSkipListSelfTest.java     |   320 +
 .../streams/HadoopDataStreamSelfTest.java       |   153 +
 .../taskexecutor/HadoopExecutorServiceTest.java |   119 +
 .../HadoopExternalTaskExecutionSelfTest.java    |   232 +
 .../HadoopExternalCommunicationSelfTest.java    |   222 +
 .../impl/util/BasicUserNameMapperSelfTest.java  |   134 +
 .../util/ChainedUserNameMapperSelfTest.java     |   111 +
 .../util/KerberosUserNameMapperSelfTest.java    |   100 +
 .../collections/HadoopAbstractMapTest.java      |   174 -
 .../HadoopConcurrentHashMultimapSelftest.java   |   278 -
 .../collections/HadoopHashMapSelfTest.java      |   131 -
 .../collections/HadoopSkipListSelfTest.java     |   318 -
 .../streams/HadoopDataStreamSelfTest.java       |   150 -
 .../hadoop/state/HadoopGroupingTestState.java   |    40 +
 .../state/HadoopJobTrackerSelfTestState.java    |    45 +
 .../HadoopMapReduceEmbeddedSelfTestState.java   |    32 +
 .../HadoopTaskExecutionSelfTestValues.java      |    51 +
 .../taskexecutor/HadoopExecutorServiceTest.java |   118 -
 .../HadoopExternalTaskExecutionSelfTest.java    |   232 -
 .../HadoopExternalCommunicationSelfTest.java    |   220 -
 .../testsuites/IgniteHadoopTestSuite.java       |   115 +-
 .../IgniteIgfsLinuxAndMacOSTestSuite.java       |    25 +-
 modules/ignored-tests/README.txt                |     4 +
 modules/ignored-tests/pom.xml                   |   121 +
 .../testsuites/IgniteIgnoredTestSuite.java      |    48 +
 .../apache/ignite/testsuites/package-info.java  |    22 +
 .../stream/jms11/IgniteJmsStreamerTest.java     |   206 +-
 .../jms11/IgniteJmsStreamerTestSuite.java       |     2 +-
 modules/platforms/cpp/configure.ac              |     2 +-
 modules/platforms/cpp/examples/configure.ac     |     2 +-
 modules/platforms/cpp/odbc-test/Makefile.am     |     1 +
 .../cpp/odbc-test/include/test_utils.h          |     8 +
 .../cpp/odbc-test/project/vs/odbc-test.vcxproj  |     1 +
 .../project/vs/odbc-test.vcxproj.filters        |     3 +
 .../cpp/odbc-test/src/api_robustness_test.cpp   |  1006 ++
 .../src/application_data_buffer_test.cpp        |   129 +-
 .../platforms/cpp/odbc-test/src/column_test.cpp |    10 +-
 .../cpp/odbc-test/src/queries_test.cpp          |   143 +-
 .../platforms/cpp/odbc-test/src/row_test.cpp    |     4 +-
 modules/platforms/cpp/odbc/Makefile.am          |     3 +-
 .../platforms/cpp/odbc/include/ignite/odbc.h    |     6 +-
 .../ignite/odbc/app/application_data_buffer.h   |    58 +-
 .../odbc/include/ignite/odbc/app/parameter.h    |    27 +-
 .../cpp/odbc/include/ignite/odbc/common_types.h |    26 +-
 .../include/ignite/odbc/config/configuration.h  |    17 +-
 .../cpp/odbc/include/ignite/odbc/statement.h    |    58 +-
 .../platforms/cpp/odbc/project/vs/module.def    |     1 -
 .../platforms/cpp/odbc/project/vs/odbc.vcxproj  |     2 +-
 .../odbc/src/app/application_data_buffer.cpp    |   343 +-
 .../platforms/cpp/odbc/src/app/parameter.cpp    |   126 +-
 modules/platforms/cpp/odbc/src/common_types.cpp |     3 +
 .../cpp/odbc/src/config/configuration.cpp       |    27 +
 .../cpp/odbc/src/config/connection_info.cpp     |    35 +-
 modules/platforms/cpp/odbc/src/connection.cpp   |     2 +-
 .../odbc/src/diagnostic/diagnostic_record.cpp   |    18 +
 modules/platforms/cpp/odbc/src/entry_points.cpp |    49 +-
 modules/platforms/cpp/odbc/src/odbc.cpp         |   240 +-
 modules/platforms/cpp/odbc/src/statement.cpp    |   152 +-
 .../Apache.Ignite.AspNet.Tests.csproj           |    77 +
 .../Apache.Ignite.AspNet.Tests.snk              |   Bin 0 -> 596 bytes
 .../Apache.Ignite.AspNet.Tests/App.config       |    72 +
 .../ExpiryCacheHolderTest.cs                    |   492 +
 .../IgniteOutputCacheProviderTest.cs            |   172 +
 .../IgniteSessionStateItemCollectionTest.cs     |   267 +
 .../IgniteSessionStateStoreDataTest.cs          |   117 +
 .../IgniteSessionStateStoreProviderTest.cs      |   425 +
 .../Properties/AssemblyInfo.cs                  |    42 +
 .../Apache.Ignite.AspNet.Tests/packages.config  |    22 +
 .../Apache.Ignite.AspNet.csproj                 |     6 +
 .../Apache.Ignite.AspNet.ruleset                |     3 +
 .../IgniteOutputCacheProvider.cs                |   120 +-
 .../IgniteSessionStateStoreProvider.cs          |   494 +
 .../Apache.Ignite.AspNet/Impl/ConfigUtil.cs     |   109 +
 .../Impl/ExpiryCacheHolder.cs                   |   113 +
 .../Impl/IgniteSessionStateItemCollection.cs    |   534 +
 .../Impl/IgniteSessionStateStoreData.cs         |   116 +
 .../Impl/SessionStateLockResult.cs              |    91 +
 .../Properties/AssemblyInfo.cs                  |    11 +-
 .../Properties/AssemblyInfo.cs                  |    40 +-
 .../Properties/AssemblyInfo.cs                  |    38 +-
 .../Properties/AssemblyInfo.cs                  |    38 +-
 .../Apache.Ignite.Core.Tests.csproj             |     6 -
 .../AspNet/IgniteOutputCacheProviderTest.cs     |   172 -
 .../Affinity/AffinityFunctionSpringTest.cs      |    38 +-
 .../Compute/ComputeApiTest.cs                   |    26 +
 .../IgniteConfigurationSerializerTest.cs        |     4 +-
 .../ProjectFilesTest.cs                         |    38 +-
 .../Properties/AssemblyInfo.cs                  |    40 +-
 .../Apache.Ignite.Core.Tests/TestRunner.cs      |    37 +-
 .../Apache.Ignite.Core.Tests/packages.config    |    18 +
 .../Apache.Ignite.Core/Cache/ICacheLock.cs      |     2 +-
 .../Apache.Ignite.Core/Cache/ICacheMetrics.cs   |     8 +-
 .../Apache.Ignite.Core/Cluster/IClusterGroup.cs |    14 +
 .../Apache.Ignite.Core/Compute/ICompute.cs      |     6 +-
 .../Apache.Ignite.Core/Impl/Cache/CacheImpl.cs  |    15 +
 .../Apache.Ignite.Core/Impl/Cache/CacheOp.cs    |     3 +-
 .../Impl/Cache/ICacheInternal.cs                |    14 +
 .../Impl/Cluster/ClusterGroupImpl.cs            |     6 +
 .../Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs  |     2 +-
 .../Common/IgniteConfigurationXmlSerializer.cs  |    21 +-
 .../dotnet/Apache.Ignite.Core/Impl/Ignite.cs    |    10 +-
 .../Apache.Ignite.Core/Impl/IgniteProxy.cs      |     6 +
 .../Memory/PlatformBigEndianMemoryStream.cs     |    34 +-
 .../Impl/Unmanaged/UnmanagedCallbacks.cs        |    90 +-
 .../NuGet/LINQPad/PutGetExample.linq            |     2 +-
 .../NuGet/LINQPad/QueryExample.linq             |     6 +-
 .../Properties/AssemblyInfo.cs                  |    41 +-
 .../Apache.Ignite.Linq/ICacheQueryable.cs       |    32 +-
 .../NuGet/LINQPad/QueryExample.linq             |     4 +-
 .../Properties/AssemblyInfo.cs                  |    40 +-
 .../dotnet/Apache.Ignite.NLog/packages.config   |    18 +
 modules/platforms/dotnet/Apache.Ignite.sln      |    14 +
 .../Apache.Ignite/Properties/AssemblyInfo.cs    |    40 +-
 .../Properties/AssemblyInfo.cs                  |    44 +-
 .../Events/LocalListener.cs                     |     2 +-
 .../Properties/AssemblyInfo.cs                  |    42 +-
 .../apache/ignite/schema/parser/DbColumn.java   |    16 +-
 .../parser/dialect/DatabaseMetadataDialect.java |     9 +
 .../parser/dialect/JdbcMetadataDialect.java     |    21 +-
 .../parser/dialect/MySQLMetadataDialect.java    |    24 +-
 .../parser/dialect/OracleMetadataDialect.java   |     5 +-
 .../ignite/schema/model/PojoDescriptor.java     |    24 +-
 .../org/apache/ignite/IgniteSpringBean.java     |     2 +-
 .../src/test/config/jdbc-pojo-store-builtin.xml |    12 +-
 .../src/test/config/jdbc-pojo-store-obj.xml     |    12 +-
 .../jdbc/CacheJdbcBlobStoreFactorySelfTest.java |    12 +-
 .../jdbc/CacheJdbcPojoStoreFactorySelfTest.java |    14 +-
 .../store/jdbc/CachePojoStoreXmlSelfTest.java   |    13 +-
 .../CachePojoStoreXmlWithSqlEscapeSelfTest.java |    28 +
 .../testsuites/IgniteSpringTestSuite.java       |     5 +-
 modules/web-console/DEVNOTES.txt                |    25 +-
 modules/web-console/backend/.babelrc            |     9 -
 modules/web-console/backend/.eslintrc           |     4 +-
 modules/web-console/backend/.gitignore          |     2 -
 modules/web-console/backend/app/agent.js        |    66 +-
 modules/web-console/backend/app/app.js          |     2 +
 modules/web-console/backend/app/browser.js      |    41 +-
 modules/web-console/backend/app/index.js        |   116 -
 modules/web-console/backend/app/mongo.js        |     7 +-
 modules/web-console/backend/app/mongoose.js     |    29 +
 modules/web-console/backend/app/settings.js     |    10 +-
 .../backend/errors/AuthFailedException.js       |     2 +-
 .../backend/errors/DuplicateKeyException.js     |     2 +-
 .../backend/errors/IllegalAccessError.js        |     4 +-
 .../backend/errors/IllegalArgumentException.js  |     2 +-
 .../backend/errors/MissingResourceException.js  |     2 +-
 modules/web-console/backend/errors/index.js     |    14 +-
 modules/web-console/backend/index.js            |    89 +-
 modules/web-console/backend/injector.js         |     2 +-
 modules/web-console/backend/package.json        |    23 +-
 modules/web-console/backend/routes/demo.js      |     8 +-
 modules/web-console/backend/routes/public.js    |    69 +-
 modules/web-console/backend/services/auth.js    |    79 +-
 modules/web-console/backend/services/domains.js |     2 +
 modules/web-console/backend/services/mails.js   |    16 +-
 .../web-console/backend/services/sessions.js    |     4 +-
 modules/web-console/backend/test/app/db.js      |    66 +
 .../web-console/backend/test/app/httpAgent.js   |    50 +
 .../web-console/backend/test/app/mockgoose.js   |    30 +
 .../web-console/backend/test/data/accounts.json |     5 +-
 .../web-console/backend/test/data/caches.json   |    30 +-
 .../web-console/backend/test/data/clusters.json |    10 +-
 .../web-console/backend/test/data/domains.json  |    10 +
 .../web-console/backend/test/data/igfss.json    |     4 +-
 .../web-console/backend/test/data/spaces.json   |    14 +
 modules/web-console/backend/test/index.js       |    35 +
 modules/web-console/backend/test/injector.js    |    43 +-
 .../web-console/backend/test/routes/clusters.js |    83 +
 .../web-console/backend/test/routes/public.js   |    68 +
 .../backend/test/unit/AuthService.test.js       |   107 +
 .../backend/test/unit/CacheService.test.js      |    20 +-
 .../backend/test/unit/ClusterService.test.js    |    19 +-
 .../backend/test/unit/DomainService.test.js     |    19 +-
 .../backend/test/unit/IgfsService.test.js       |    19 +-
 modules/web-console/frontend/app/app.config.js  |     2 +-
 modules/web-console/frontend/app/app.js         |    27 +-
 .../frontend/app/data/jdbc-types.json           |    44 +
 .../frontend/app/data/sql-keywords.json         |    41 +
 .../frontend/app/decorator/tooltip.js           |    38 +-
 .../directives/retain-selection.directive.js    |    67 +
 .../ui-ace-pom/ui-ace-pom.controller.js         |     4 +-
 .../frontend/app/helpers/jade/form.jade         |     1 +
 .../helpers/jade/form/form-field-datalist.jade  |     8 +-
 .../helpers/jade/form/form-field-dropdown.jade  |     8 +-
 .../app/helpers/jade/form/form-field-label.jade |     4 +-
 .../helpers/jade/form/form-field-number.jade    |     8 +-
 .../helpers/jade/form/form-field-password.jade  |    47 +
 .../app/helpers/jade/form/form-field-text.jade  |    10 +-
 .../frontend/app/helpers/jade/mixins.jade       |   101 +-
 .../modules/configuration/Version.service.js    |    25 +
 .../configuration/configuration.module.js       |     2 +
 .../configuration/generator/Pom.service.js      |    30 +-
 .../form/validator/java-identifier.directive.js |     4 +-
 .../form/validator/java-keywords.directive.js   |     6 +-
 .../validator/java-package-name.directive.js    |     4 +-
 .../java-package-specified.directive.js         |     7 +-
 .../modules/form/validator/uuid.directive.js    |    12 +-
 .../frontend/app/modules/sql/Notebook.data.js   |    16 +-
 .../states/configuration/caches/memory.jade     |     5 +-
 .../states/configuration/caches/query.jade      |    12 +-
 .../configuration/clusters/cache-key-cfg.jade   |     2 +-
 .../configuration/clusters/communication.jade   |     2 +-
 .../states/configuration/clusters/odbc.jade     |    47 +
 .../states/configuration/domains/general.jade   |     4 +-
 .../states/configuration/domains/query.jade     |    16 +-
 .../configuration/summary/summary.controller.js |    24 +-
 .../app/modules/version/Version.provider.js     |    32 -
 .../app/services/ErrorPopover.service.js        |     3 +
 .../frontend/app/services/JavaTypes.service.js  |   163 +-
 .../app/services/LegacyUtils.service.js         |    44 -
 .../frontend/app/services/SqlTypes.service.js   |    67 +
 .../frontend/controllers/admin-controller.js    |     7 +-
 .../frontend/controllers/domains-controller.js  |    86 +-
 .../frontend/controllers/profile-controller.js  |     5 +-
 .../frontend/generator/generator-common.js      |    19 +-
 .../frontend/generator/generator-java.js        |    89 +-
 .../frontend/generator/generator-properties.js  |     2 +-
 .../frontend/generator/generator-xml.js         |    17 +-
 .../frontend/public/stylesheets/form-field.scss |   108 +
 .../frontend/public/stylesheets/style.scss      |     1 +
 .../frontend/test/unit/JavaTypes.test.js        |    82 +-
 .../frontend/test/unit/SqlTypes.test.js         |    68 +
 .../frontend/views/configuration/clusters.jade  |     1 +
 .../views/configuration/domains-import.jade     |   116 +-
 .../IgniteWebSessionSelfTestSuite.java          |    68 +-
 .../WebSessionReplicatedSelfTest.java           |    28 +
 .../WebSessionReplicatedV1SelfTest.java         |    28 +
 .../internal/websession/WebSessionSelfTest.java |     2 +
 .../WebSessionTransactionalSelfTest.java        |    48 +
 .../WebSessionTransactionalV1SelfTest.java      |    28 +
 .../websession/WebSessionV1SelfTest.java        |    28 +
 .../config/benchmark-client-mode.properties     |     2 +
 .../config/benchmark-tx-win.properties          |     2 +
 .../yardstick/config/benchmark-tx.properties    |     2 +
 .../yardstick/config/benchmark-win.properties   |     2 +
 modules/yardstick/config/benchmark.properties   |     2 +
 .../cache/IgniteAtomicSequenceBenchmark.java    |     2 +
 .../cache/IgniteGetAndPutBenchmark.java         |    41 +
 .../cache/IgniteGetAndPutTxBenchmark.java       |    70 +
 .../cache/IgniteInvokeTxBenchmark.java          |    40 +
 parent/pom.xml                                  |    18 +-
 pom.xml                                         |     7 +
 833 files changed, 97111 insertions(+), 81711 deletions(-)
----------------------------------------------------------------------



[3/3] ignite git commit: reviewing changes

Posted by yz...@apache.org.
reviewing changes


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

Branch: refs/heads/ignite-3897-pr1059
Commit: c75f6fc14b7b309e49ce9b3ee96cecf5ddee2da8
Parents: f41f5a8
Author: yzhdanov <yz...@gridgain.com>
Authored: Fri Sep 30 18:27:45 2016 +0200
Committer: yzhdanov <yz...@gridgain.com>
Committed: Fri Sep 30 18:27:45 2016 +0200

----------------------------------------------------------------------
 .../GridCacheRebalancingAggregationTest.java    | 87 +++++++++++++-------
 1 file changed, 55 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c75f6fc1/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java
index 1d566e9..d5020f2 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingAggregationTest.java
@@ -53,11 +53,16 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
 
     /** Keys of entries under test. */
     private static final Set<Integer> KEYS;
+
+    /*
+     *
+     */
     static {
         final Set<Integer> keys = new LinkedHashSet<>();
-        for (int i = 0; i < ENTRY_COUNT; i++) {
+
+        for (int i = 0; i < ENTRY_COUNT; i++)
             keys.add(i);
-        }
+
         KEYS = Collections.unmodifiableSet(keys);
     }
 
@@ -71,29 +76,26 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
     private volatile int totalUpdateCount;
 
     /** {@inheritDoc} */
-    @Override
-    public int serverCount() {
+    @Override public int serverCount() {
         return 3;
     }
 
     /** {@inheritDoc} */
-    @Override
-    public int getMaxRestarts() {
+    @Override public int getMaxRestarts() {
         return MAX_RESTARTS;
     }
 
     /** {@inheritDoc} */
-    @Override
-    protected long getTestTimeout() {
+    @Override protected long getTestTimeout() {
         return 1000 * 60 * 5;
     }
 
     /** {@inheritDoc} */
     @Override protected CacheConfiguration<?, ?> getCacheConfiguration() {
         return new CacheConfiguration<Integer, Integer>(CACHE_NAME)
-                        .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
-                        .setCacheMode(CacheMode.PARTITIONED)
-                        .setBackups(1);
+            .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
+            .setCacheMode(CacheMode.PARTITIONED)
+            .setBackups(1);
     }
 
     /** {@inheritDoc} */
@@ -120,18 +122,21 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
         throws InterruptedException {
 
         startUpdateThread();
+
         RollingRestartThread restartThread = super.rollingRestartThread;
 
         int totalAggregationCount = 0;
         int checksumFailures = 0;
+
         do {
-            if (!checksumCache()) {
+            if (!checksumCache())
                 checksumFailures++;
-            }
 
             totalAggregationCount++;
+
             this.aggregationCount++;
-        } while (restartThread.isAlive());
+        }
+        while (restartThread.isAlive());
 
         grid(0).log().info("Total successful aggregations during the test were: " + totalAggregationCount);
         grid(0).log().info("Total successful updates during the test were: " + this.totalUpdateCount);
@@ -148,8 +153,10 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
      */
     private void startUpdateThread() {
         UpdateCacheThread updateThread = new UpdateCacheThread();
-        updateThread.start();
+
         this.updateThread = updateThread;
+
+        updateThread.start();
     }
 
     /**
@@ -160,36 +167,43 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
      */
     private boolean checksumCache() {
         final Ignite ignite = grid(0);
+
         Cache<Integer, Integer> cache = ignite.cache(CACHE_NAME);
+
         Throwable e = null;
+
         for (int i = 0, c = 20; i <= c; ++i) {
             try (Transaction tx = ignite.transactions().txStart()) {
-                tx.timeout(2*60*1000l);
+                tx.timeout(2 * 60 * 1000L);
 
                 Integer ceiling = cache.get(CEILING_KEY);
-                if (ceiling == null) {
+
+                if (ceiling == null)
                     return Boolean.TRUE;
-                }
+
                 int floor = ceiling - ENTRY_COUNT + 1;
+
                 Map<Integer, Integer> results = cache.getAll(KEYS);
+
                 tx.commit();
 
                 int sum = 0;
-                for (Integer j : results.values()) {
+
+                for (Integer j : results.values())
                     sum += j;
-                }
 
-                if (sum == calculateSum(floor, ceiling)) {
+                if (sum == calculateSum(floor, ceiling))
                     return Boolean.TRUE;
-                }
 
                 grid(0).log().info("Failed testing that sum of " + sum + " equals sum(" + floor + "," + ceiling + ")");
+
                 return Boolean.FALSE;
             }
             catch (Throwable ee) {
                 e = ee;
             }
         }
+
         throw new RuntimeException("Failed to commit transaction after " + 20 + " retries", e);
     }
 
@@ -198,32 +212,40 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
      */
     private void updateCache() {
         final Ignite ignite = grid(0);
+
         Cache<Integer, Integer> cache = ignite.cache(CACHE_NAME);
+
         Throwable e = null;
+
         for (int i = 0, c = 20; i <= c; ++i) {
             try (Transaction tx = ignite.transactions().txStart()) {
-                tx.timeout(2*60*1000l);
+                tx.timeout(2 * 60 * 1000L);
+
+                Integer curCeiling = cache.get(CEILING_KEY);
+
+                int newCeiling = curCeiling == null ? ENTRY_COUNT - 1 : curCeiling + ENTRY_COUNT;
+                int value = curCeiling == null ? 0 : curCeiling + 1;
 
-                Integer currentCeiling = cache.get(CEILING_KEY);
-                int newCeiling = currentCeiling == null ? ENTRY_COUNT - 1 : currentCeiling + ENTRY_COUNT;
-                int value = currentCeiling == null ? 0 : currentCeiling + 1;
                 Map<Integer, Integer> entries = new TreeMap<>();
-                for (Integer key : KEYS) {
+
+                for (Integer key : KEYS)
                     entries.put(key, value++);
-                }
+
                 cache.putAll(entries);
                 cache.put(CEILING_KEY, newCeiling);
 
                 GridCacheRebalancingAggregationTest.this.totalUpdateCount++;
-                 if (!tx.isRollbackOnly()) {
-                     tx.commit();
-                 }
+
+                if (!tx.isRollbackOnly())
+                    tx.commit();
+
                 return;
             }
             catch (Throwable ee) {
                 e = ee;
             }
         }
+
         throw new RuntimeException("Failed to commit transaction after " + 20 + " retries", e);
     }
 
@@ -246,7 +268,7 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
         /**
          * Default Constructor sets this thread to run as a daemon.
          */
-        public UpdateCacheThread() {
+        UpdateCacheThread() {
             setDaemon(true);
             setName(UpdateCacheThread.class.getSimpleName());
         }
@@ -254,6 +276,7 @@ public class GridCacheRebalancingAggregationTest extends GridRollingRestartAbstr
         /** {@inheritDoc} */
         @Override public void run() {
             RollingRestartThread restartThread =  GridCacheRebalancingAggregationTest.this.rollingRestartThread;
+
             do {
                 GridCacheRebalancingAggregationTest.this.updateCache();
             }