You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2014/12/16 16:12:04 UTC

[01/18] incubator-ignite git commit: GG-9141 - Fixed group lock transactions.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-41 c2a513218 -> 688a2e715


GG-9141 - Fixed group lock transactions.


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

Branch: refs/heads/ignite-41
Commit: f60670a9263d9e4005b971b0d278e07fab2433b3
Parents: d7309f4
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Fri Dec 12 18:43:20 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Fri Dec 12 18:43:20 2014 -0800

----------------------------------------------------------------------
 .../org/apache/ignite/IgniteTransactions.java   | 10 +-
 .../processors/cache/GridCacheAdapter.java      | 97 +-------------------
 .../cache/GridCacheSharedContext.java           |  1 -
 .../processors/cache/GridCacheTxHandler.java    |  6 +-
 .../cache/GridCacheTxLocalAdapter.java          |  2 +-
 .../distributed/dht/GridDhtCacheEntryImpl.java  |  2 +-
 .../distributed/dht/GridDhtTxFinishFuture.java  |  1 -
 .../distributed/dht/GridDhtTxLocalAdapter.java  | 10 +-
 .../transactions/IgniteTransactionsImpl.java    | 86 +++++++++++++++--
 .../ipc/shmem/GridIpcSharedMemorySpace.java     |  1 -
 .../GridCacheGroupLockAbstractSelfTest.java     | 49 +++-------
 ...ockPartitionedMultiNodeAbstractSelfTest.java |  1 -
 12 files changed, 110 insertions(+), 156 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java b/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
index 061ec38..d28954c 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
@@ -9,7 +9,7 @@
 
 package org.apache.ignite;
 
-import org.gridgain.grid.*;
+import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
 import org.jetbrains.annotations.*;
 
@@ -64,7 +64,7 @@ public interface IgniteTransactions {
      * transaction. All updates to the keys involved should always go through {@code affinity-group-locked}
      * transaction, otherwise cache may be left in inconsistent state.
      * <p>
-     * If cache sanity check is enabled ({@link org.apache.ignite.configuration.IgniteConfiguration#isCacheSanityCheckEnabled()}),
+     * If cache sanity check is enabled ({@link IgniteConfiguration#isCacheSanityCheckEnabled()}),
      * the following checks are performed:
      * <ul>
      *     <li>
@@ -86,7 +86,7 @@ public interface IgniteTransactions {
      * @throws IgniteCheckedException If local node is not primary for any of provided keys.
      * @throws UnsupportedOperationException If cache is {@link GridCacheAtomicityMode#ATOMIC}.
      */
-    public GridCacheTx txStartAffinity(Object affinityKey, GridCacheTxConcurrency concurrency,
+    public GridCacheTx txStartAffinity(String cacheName, Object affinityKey, GridCacheTxConcurrency concurrency,
         GridCacheTxIsolation isolation, long timeout, int txSize) throws IllegalStateException, IgniteCheckedException;
 
     /**
@@ -100,7 +100,7 @@ public interface IgniteTransactions {
      * transaction. All updates to the keys involved should always go through {@code partition-group-locked}
      * transaction, otherwise, cache may be left in inconsistent state.
      * <p>
-     * If cache sanity check is enabled ({@link org.apache.ignite.configuration.IgniteConfiguration#isCacheSanityCheckEnabled()}),
+     * If cache sanity check is enabled ({@link IgniteConfiguration#isCacheSanityCheckEnabled()}),
      * the following checks are performed:
      * <ul>
      *     <li>
@@ -122,7 +122,7 @@ public interface IgniteTransactions {
      * @throws IgniteCheckedException If local node is not primary for any of provided keys.
      * @throws UnsupportedOperationException If cache is {@link GridCacheAtomicityMode#ATOMIC}.
      */
-    public GridCacheTx txStartPartition(int partId, GridCacheTxConcurrency concurrency,
+    public GridCacheTx txStartPartition(String cacheName, int partId, GridCacheTxConcurrency concurrency,
         GridCacheTxIsolation isolation, long timeout, int txSize) throws IllegalStateException, IgniteCheckedException;
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
index bf40a85..4d136a1 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
@@ -52,8 +52,6 @@ import static org.gridgain.grid.cache.GridCacheFlag.*;
 import static org.gridgain.grid.cache.GridCachePeekMode.*;
 import static org.gridgain.grid.cache.GridCacheTxConcurrency.*;
 import static org.gridgain.grid.cache.GridCacheTxIsolation.*;
-import static org.gridgain.grid.cache.GridCacheTxState.*;
-import static org.apache.ignite.events.IgniteEventType.*;
 import static org.gridgain.grid.kernal.GridClosureCallMode.*;
 import static org.gridgain.grid.kernal.processors.dr.GridDrType.*;
 import static org.gridgain.grid.kernal.processors.task.GridTaskThreadContextKey.*;
@@ -3138,106 +3136,21 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im
     /** {@inheritDoc} */
     @Override public GridCacheTx txStart(GridCacheTxConcurrency concurrency,
         GridCacheTxIsolation isolation, long timeout, int txSize) throws IllegalStateException {
-        A.notNull(concurrency, "concurrency");
-        A.notNull(isolation, "isolation");
-        A.ensure(timeout >= 0, "timeout cannot be negative");
-        A.ensure(txSize >= 0, "transaction size cannot be negative");
-
-        GridTransactionsConfiguration cfg = ctx.gridConfig().getTransactionsConfiguration();
-
-        if (!cfg.isTxSerializableEnabled() && isolation == SERIALIZABLE)
-            throw new IllegalArgumentException("SERIALIZABLE isolation level is disabled (to enable change " +
-                "'txSerializableEnabled' configuration property)");
-
-        GridCacheTxEx<K, V> tx = (GridCacheTxEx<K, V>)ctx.tm().userTx();
-
-        if (tx != null)
-            throw new IllegalStateException("Failed to start new transaction " +
-                "(current thread already has a transaction): " + tx);
-
-        tx = ctx.tm().newTx(
-            false,
-            false,
-            concurrency,
-            isolation,
-            timeout,
-            false,
-            txSize,
-            /** group lock keys */null,
-            /** partition lock */false
-        );
-
-        assert tx != null;
-
-        // Wrap into proxy.
-        return new GridCacheTxProxyImpl<>(tx, ctx.shared());
+        return ctx.kernalContext().cache().transactions().txStart(concurrency, isolation, timeout, txSize);
     }
 
     /** {@inheritDoc} */
     @Override public GridCacheTx txStartAffinity(Object affinityKey, GridCacheTxConcurrency concurrency,
         GridCacheTxIsolation isolation, long timeout, int txSize) throws IllegalStateException, IgniteCheckedException {
-        return txStartGroupLock(ctx.txKey((K)affinityKey), concurrency, isolation, false, timeout, txSize);
+        return ctx.kernalContext().cache().transactions().txStartAffinity(name(), affinityKey, concurrency, isolation,
+            timeout, txSize);
     }
 
     /** {@inheritDoc} */
     @Override public GridCacheTx txStartPartition(int partId, GridCacheTxConcurrency concurrency,
         GridCacheTxIsolation isolation, long timeout, int txSize) throws IllegalStateException, IgniteCheckedException {
-        Object grpLockKey = ctx.affinity().partitionAffinityKey(partId);
-
-        return txStartGroupLock(ctx.txKey((K)grpLockKey), concurrency, isolation, true, timeout, txSize);
-    }
-
-    /**
-     * Internal method to start group-lock transaction.
-     *
-     * @param grpLockKey Group lock key.
-     * @param concurrency Transaction concurrency control.
-     * @param isolation Transaction isolation level.
-     * @param partLock {@code True} if this is a partition-lock transaction. In this case {@code grpLockKey}
-     *      should be a unique partition-specific key.
-     * @param timeout Tx timeout.
-     * @param txSize Expected transaction size.
-     * @return Started transaction.
-     * @throws IllegalStateException If other transaction was already started.
-     * @throws IgniteCheckedException In case of error.
-     */
-    @SuppressWarnings("unchecked")
-    private GridCacheTx txStartGroupLock(GridCacheTxKey grpLockKey, GridCacheTxConcurrency concurrency,
-        GridCacheTxIsolation isolation, boolean partLock, long timeout, int txSize)
-        throws IllegalStateException, IgniteCheckedException {
-        GridCacheTx tx = ctx.tm().userTx();
-
-        if (tx != null)
-            throw new IllegalStateException("Failed to start new transaction " +
-                "(current thread already has a transaction): " + tx);
-
-        GridCacheTxLocalEx<K, V> tx0 = ctx.tm().newTx(
-            false,
-            false,
-            concurrency,
-            isolation,
-            timeout,
-            ctx.hasFlag(INVALIDATE),
-            txSize,
-            grpLockKey,
-            partLock
-        );
-
-        assert tx0 != null;
-
-        IgniteFuture<?> lockFut = tx0.groupLockAsync(ctx, (Collection)F.asList(grpLockKey));
-
-        try {
-            lockFut.get();
-        }
-        catch (IgniteCheckedException e) {
-            tx0.rollback();
-
-            throw e;
-        }
-
-        // Wrap into proxy.
-        return new GridCacheTxProxyImpl<>(tx0, ctx.shared());
+        return ctx.kernalContext().cache().transactions().txStartPartition(name(), partId, concurrency, isolation,
+            timeout, txSize);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
index 33ffea5..e67519b 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
@@ -14,7 +14,6 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.managers.communication.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
index 85a240c..e629d3f 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.dht.*;
@@ -1229,13 +1228,14 @@ public class GridCacheTxHandler<K, V> {
 
                 while (true) {
                     try {
-                        entry = cacheCtx.dht().near().peekExx(txEntry.key());
+                        entry = cacheCtx.near().peekExx(txEntry.key());
 
                         if (entry != null) {
                             entry.keyBytes(txEntry.keyBytes());
 
                             // Handle implicit locks for pessimistic transactions.
-                            tx = ctx.tm().tx(req.version());
+                            if (tx == null)
+                                tx = ctx.tm().nearTx(req.version());
 
                             if (tx == null) {
                                 tx = new GridNearTxRemote<>(

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
index 4ac7b4e..2c52e0a 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
@@ -2541,7 +2541,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                             ", part=" + part + ", groupLockKey=" + grpLockKey + ']');
                 }
                 else {
-                    Object affinityKey = cacheCtx.config().getAffinityMapper().affinityKey(key);
+                    GridCacheTxKey affinityKey = cacheCtx.txKey((K)cacheCtx.config().getAffinityMapper().affinityKey(key));
 
                     if (!grpLockKey.equals(affinityKey))
                         throw new IgniteCheckedException("Failed to enlist key into group-lock transaction (affinity key was " +

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheEntryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheEntryImpl.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheEntryImpl.java
index 094df1b..c37fb90 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheEntryImpl.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheEntryImpl.java
@@ -60,7 +60,7 @@ public class GridDhtCacheEntryImpl<K, V> extends GridCacheEntryImpl<K, V> {
 
     /** {@inheritDoc} */
     @Override public V peek(@Nullable Collection<GridCachePeekMode> modes) throws IgniteCheckedException {
-        if (!ctx.isNear() && !ctx.isReplicated() && modes.contains(NEAR_ONLY))
+        if (!ctx.isNear() && modes.contains(NEAR_ONLY))
             return null;
 
         V val = null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
index 2e9311d..a836ff8 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache.distributed.dht;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
index d594df3..95cd4ad 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
@@ -635,10 +635,10 @@ public abstract class GridDhtTxLocalAdapter<K, V> extends GridCacheTxLocalAdapte
         for (GridCacheTxKey<K> key : keys) {
             GridCacheTxEntry<K, V> txEntry = entry(key);
 
-            if (!txEntry.groupLockEntry())
+            if (!txEntry.groupLockEntry() || txEntry.context().isNear())
                 continue;
 
-            assert txEntry.cached() instanceof GridDhtCacheEntry;
+            assert txEntry.cached() instanceof GridDhtCacheEntry : "Invalid entry type: " + txEntry.cached();
 
             while (true) {
                 try {
@@ -674,10 +674,10 @@ public abstract class GridDhtTxLocalAdapter<K, V> extends GridCacheTxLocalAdapte
                     txEntry.cached(txEntry.context().dht().entryExx(key.key(), topologyVersion()), txEntry.keyBytes());
                 }
             }
-
-            if (locNearMap != null)
-                addNearMapping(locNearMap);
         }
+
+        if (locNearMap != null)
+            addNearMapping(locNearMap);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
index 89bbb74..a8e1344 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
@@ -10,12 +10,16 @@
 package org.gridgain.grid.kernal.processors.cache.transactions;
 
 import org.apache.ignite.*;
-import org.gridgain.grid.*;
+import org.apache.ignite.lang.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.processors.cache.*;
+import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.jetbrains.annotations.*;
 
+import java.util.*;
+
+import static org.gridgain.grid.cache.GridCacheFlag.*;
 import static org.gridgain.grid.cache.GridCacheTxIsolation.*;
 
 /**
@@ -115,22 +119,86 @@ public class IgniteTransactionsImpl<K, V> implements IgniteTransactions {
     }
 
     /** {@inheritDoc} */
-    @Override public GridCacheTx txStartAffinity(Object affinityKey, GridCacheTxConcurrency concurrency,
+    @Override public GridCacheTx txStartAffinity(String cacheName, Object affinityKey, GridCacheTxConcurrency concurrency,
         GridCacheTxIsolation isolation, long timeout, int txSize) throws IllegalStateException, IgniteCheckedException {
-        // TODO: implement.
-        return null;
+        GridCacheAdapter<Object, Object> cache = cctx.kernalContext().cache().internalCache(cacheName);
+
+        if (cache == null)
+            throw new IllegalArgumentException("Failed to find cache with given name (cache is not configured): " +
+                cacheName);
+
+        return txStartGroupLock(cache.context(), affinityKey, concurrency, isolation, false, timeout, txSize);
     }
 
     /** {@inheritDoc} */
-    @Override public GridCacheTx txStartPartition(int partId, GridCacheTxConcurrency concurrency,
+    @Override public GridCacheTx txStartPartition(String cacheName, int partId, GridCacheTxConcurrency concurrency,
         GridCacheTxIsolation isolation, long timeout, int txSize) throws IllegalStateException, IgniteCheckedException {
-        // TODO: implement.
-        return null;
+        GridCacheAdapter<Object, Object> cache = cctx.kernalContext().cache().internalCache(cacheName);
+
+        if (cache == null)
+            throw new IllegalArgumentException("Failed to find cache with given name (cache is not configured): " +
+                cacheName);
+
+        Object grpLockKey = cache.context().affinity().partitionAffinityKey(partId);
+
+        return txStartGroupLock(cache.context(), grpLockKey, concurrency, isolation, true, timeout, txSize);
+    }
+
+    /**
+     * Internal method to start group-lock transaction.
+     *
+     * @param grpLockKey Group lock key.
+     * @param concurrency Transaction concurrency control.
+     * @param isolation Transaction isolation level.
+     * @param partLock {@code True} if this is a partition-lock transaction. In this case {@code grpLockKey}
+     *      should be a unique partition-specific key.
+     * @param timeout Tx timeout.
+     * @param txSize Expected transaction size.
+     * @return Started transaction.
+     * @throws IllegalStateException If other transaction was already started.
+     * @throws IgniteCheckedException In case of error.
+     */
+    @SuppressWarnings("unchecked")
+    private GridCacheTx txStartGroupLock(GridCacheContext ctx, Object grpLockKey, GridCacheTxConcurrency concurrency,
+        GridCacheTxIsolation isolation, boolean partLock, long timeout, int txSize)
+        throws IllegalStateException, IgniteCheckedException {
+        GridCacheTx tx = cctx.tm().userTx();
+
+        if (tx != null)
+            throw new IllegalStateException("Failed to start new transaction " +
+                "(current thread already has a transaction): " + tx);
+
+        GridCacheTxLocalEx<K, V> tx0 = cctx.tm().newTx(
+            false,
+            false,
+            concurrency,
+            isolation,
+            timeout,
+            ctx.hasFlag(INVALIDATE),
+            txSize,
+            ctx.txKey(grpLockKey),
+            partLock
+        );
+
+        assert tx0 != null;
+
+        IgniteFuture<?> lockFut = tx0.groupLockAsync(ctx, (Collection)F.asList(grpLockKey));
+
+        try {
+            lockFut.get();
+        }
+        catch (IgniteCheckedException e) {
+            tx0.rollback();
+
+            throw e;
+        }
+
+        // Wrap into proxy.
+        return new GridCacheTxProxyImpl<>(tx0, cctx);
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public GridCacheTx tx() {
-        // TODO: implement.
-        return null;
+        return cctx.tm().userTx();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/main/java/org/gridgain/grid/util/ipc/shmem/GridIpcSharedMemorySpace.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/util/ipc/shmem/GridIpcSharedMemorySpace.java b/modules/core/src/main/java/org/gridgain/grid/util/ipc/shmem/GridIpcSharedMemorySpace.java
index 6d81561..d25338b 100644
--- a/modules/core/src/main/java/org/gridgain/grid/util/ipc/shmem/GridIpcSharedMemorySpace.java
+++ b/modules/core/src/main/java/org/gridgain/grid/util/ipc/shmem/GridIpcSharedMemorySpace.java
@@ -10,7 +10,6 @@
 package org.gridgain.grid.util.ipc.shmem;
 
 import org.apache.ignite.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.util.typedef.internal.*;
 
 import java.io.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockAbstractSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockAbstractSelfTest.java
index f9fe5e9..34cd126 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockAbstractSelfTest.java
@@ -13,7 +13,7 @@ import org.apache.ignite.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
+import org.apache.ignite.spi.communication.tcp.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.cache.store.*;
@@ -73,8 +73,6 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
         cacheCfg.setWriteSynchronizationMode(GridCacheWriteSynchronizationMode.FULL_SYNC);
         cacheCfg.setAtomicityMode(TRANSACTIONAL);
 
-        boolean txBatchUpdate = batchUpdate();
-
         cacheCfg.setStore(store);
 
         cfg.setCacheConfiguration(cacheCfg);
@@ -86,6 +84,12 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
 
         cfg.setDiscoverySpi(discoSpi);
 
+        TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
+
+        commSpi.setSharedMemoryPort(-1);
+
+        cfg.setCommunicationSpi(commSpi);
+
         return cfg;
     }
 
@@ -797,8 +801,8 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
         }
 
         for (int i = 0; i < gridCount(); i++) {
-            assertNull("For cache: " + i, cache(i).peek("val1"));
-            assertNull("For cache: " + i, cache(i).peek("val2"));
+            assertNull("For cache [i=" + i + ", val=" + cache(i).peek(key1) + ']', cache(i).peek(key1));
+            assertNull("For cache [i=" + i + ", val=" + cache(i).peek(key2) + ']', cache(i).peek(key2));
 
             assertTrue("For cache [idx=" + i + ", keySet=" + cache(i).keySet() + ']', cache(i).size() <= 1);
         }
@@ -911,7 +915,7 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
 
         cache(0).put(key, "val");
 
-        try (GridCacheTx tx = cache(0).txStartPartition(cache(0).affinity().partition(key), concurrency,
+        try (GridCacheTx ignored = cache(0).txStartPartition(cache(0).affinity().partition(key), concurrency,
             REPEATABLE_READ, 0, 1)) {
             assertEquals("val", cache(0).get(key));
         }
@@ -939,7 +943,7 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
 
         final GridCache<GridCacheAffinityKey<String>, String> cache = grid(0).cache(null);
 
-        try (GridCacheTx tx = cache.txStartAffinity(affinityKey, concurrency, READ_COMMITTED, 0, 1)) {
+        try (GridCacheTx ignored = cache.txStartAffinity(affinityKey, concurrency, READ_COMMITTED, 0, 1)) {
             // Key with affinity key different from enlisted on tx start should raise exception.
             cache.put(new GridCacheAffinityKey<>("key1", UUID.randomUUID()), "val1");
 
@@ -978,7 +982,7 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
 
         cache.put(key, "val");
 
-        try (GridCacheTx tx = cache.txStartAffinity(affinityKey, concurrency, READ_COMMITTED, 0, 1)) {
+        try (GridCacheTx ignored = cache.txStartAffinity(affinityKey, concurrency, READ_COMMITTED, 0, 1)) {
             // Key with affinity key different from enlisted on tx start should raise exception.
             cache.remove(key);
 
@@ -1062,9 +1066,6 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
      * @throws Exception If failed.
      */
     public void testGroupLockWriteThroughBatchUpdateOptimistic() throws Exception {
-        // Configuration changed according to test name.
-        assert batchUpdate();
-
         checkGroupLockWriteThrough(OPTIMISTIC);
     }
 
@@ -1072,25 +1073,6 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
      * @throws Exception If failed.
      */
     public void testGroupLockWriteThroughBatchUpdatePessimistic() throws Exception {
-        // Configuration changed according to test name.
-        assert batchUpdate();
-
-        checkGroupLockWriteThrough(PESSIMISTIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGroupLockWriteThroughSingleUpdateOptimistic() throws Exception {
-        // Configuration changed according to test name.
-        checkGroupLockWriteThrough(OPTIMISTIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGroupLockWriteThroughSingleUpdatePessimistic() throws Exception {
-        // Configuration changed according to test name.
         checkGroupLockWriteThrough(PESSIMISTIC);
     }
 
@@ -1142,12 +1124,7 @@ public abstract class GridCacheGroupLockAbstractSelfTest extends GridCommonAbstr
 
         // Check the store.
         assertTrue(store.storeMap().equals(putMap));
-        assertEquals(batchUpdate() ? 1 : 4, store.putCount());
-    }
-
-    /** @return {@code True} if batch update should be enabled. */
-    private boolean batchUpdate() {
-        return getName().contains("testGroupLockWriteThroughBatchUpdate");
+        assertEquals(1, store.putCount());
     }
 
     /** @return {@code True} if sanity check should be enabled. */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f60670a9/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheGroupLockPartitionedMultiNodeAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheGroupLockPartitionedMultiNodeAbstractSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheGroupLockPartitionedMultiNodeAbstractSelfTest.java
index 12a7cbd..aa1d4ad 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheGroupLockPartitionedMultiNodeAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheGroupLockPartitionedMultiNodeAbstractSelfTest.java
@@ -10,7 +10,6 @@
 package org.gridgain.grid.kernal.processors.cache.distributed.dht;
 
 import org.apache.ignite.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.util.typedef.*;


[07/18] incubator-ignite git commit: GG-9141 - Enabled test.

Posted by sb...@apache.org.
GG-9141 - Enabled test.


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

Branch: refs/heads/ignite-41
Commit: 1c5984f1c5bad7b966ef22e6714f7f96232ab47d
Parents: 7964632
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:33:53 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:33:53 2014 -0800

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


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1c5984f1/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxSingleThreadedAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxSingleThreadedAbstractTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxSingleThreadedAbstractTest.java
index 98f30a6..1dc7b44 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxSingleThreadedAbstractTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxSingleThreadedAbstractTest.java
@@ -9,7 +9,7 @@
 
 package org.gridgain.grid.kernal.processors.cache;
 
-import org.gridgain.grid.*;
+import org.apache.ignite.*;
 
 import static org.gridgain.grid.cache.GridCacheTxConcurrency.*;
 import static org.gridgain.grid.cache.GridCacheTxIsolation.*;
@@ -49,7 +49,7 @@ public abstract class GridCacheTxSingleThreadedAbstractTest extends GridCacheTxA
     /**
      * @throws IgniteCheckedException If test failed.
      */
-    public void _testOptimisticReadCommittedCommit() throws Exception { // TODO GG-9141
+    public void testOptimisticReadCommittedCommit() throws Exception {
         checkCommit(OPTIMISTIC, READ_COMMITTED);
 
         finalChecks();


[08/18] incubator-ignite git commit: GG-9141 - Fixed and enabled test.

Posted by sb...@apache.org.
GG-9141 - Fixed and enabled test.


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

Branch: refs/heads/ignite-41
Commit: 62b9617e78e420dce512cd126f2c0851d29ae518
Parents: 1c5984f
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:41:03 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:41:03 2014 -0800

----------------------------------------------------------------------
 .../distributed/near/GridCacheNearMultiNodeSelfTest.java    | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/62b9617e/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
index 4a53985..e6d1dff 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache.distributed.near;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.cache.store.*;
@@ -362,7 +361,7 @@ public class GridCacheNearMultiNodeSelfTest extends GridCommonAbstractTest {
      * @throws Exception If failed.
      */
     @SuppressWarnings({"ConstantConditions"})
-    public void _testOptimisticWriteThrough() throws Exception { // TODO GG-9141
+    public void testOptimisticWriteThrough() throws Exception {
         GridCache<Integer, String> near = cache(0);
 
         if (transactional()) {
@@ -377,7 +376,11 @@ public class GridCacheNearMultiNodeSelfTest extends GridCommonAbstractTest {
                 assertEquals("2", near.get(2));
                 assertEquals("3", near.get(3));
 
-                assertNull(dht(primaryGrid(2)).peek(2));
+                GridDhtCacheEntry<Integer, String> entry = dht(primaryGrid(2)).peekExx(2);
+
+                if (entry != null)
+                    assertNull("Unexpected entry: " + entry, entry.rawGetOrUnmarshal(false));
+
                 assertNotNull(dht(primaryGrid(3)).peek(3));
 
                 tx.commit();


[12/18] incubator-ignite git commit: GG-9141 - Enabling passing tests.

Posted by sb...@apache.org.
GG-9141 - Enabling passing tests.


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

Branch: refs/heads/ignite-41
Commit: a94ce9311c678ae3e35e5d7d9ddb908ae76144d6
Parents: 806a44d
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:48:16 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:48:16 2014 -0800

----------------------------------------------------------------------
 .../org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a94ce931/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java b/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
index a939fdf..7a2ec15 100644
--- a/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
+++ b/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
@@ -54,7 +54,7 @@ public class GridCacheQuerySelfTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheSqlQueryMultiThreadedSelfTest.class);
 
         // Fields queries.
-//        suite.addTestSuite(GridCacheLocalFieldsQuerySelfTest.class); // TODO GG-9141
+        suite.addTestSuite(GridCacheLocalFieldsQuerySelfTest.class);
         suite.addTestSuite(GridCacheReplicatedFieldsQuerySelfTest.class);
         suite.addTestSuite(GridCacheReplicatedFieldsQueryP2PDisabledSelfTest.class);
         suite.addTestSuite(GridCachePartitionedFieldsQuerySelfTest.class);
@@ -64,7 +64,7 @@ public class GridCacheQuerySelfTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheFieldsQueryNoDataSelfTest.class);
 
         // Continuous queries.
-//        suite.addTestSuite(GridCacheContinuousQueryLocalSelfTest.class); // TODO GG-9141
+        suite.addTestSuite(GridCacheContinuousQueryLocalSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryLocalAtomicSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryReplicatedSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryReplicatedAtomicSelfTest.class);


[09/18] incubator-ignite git commit: GG-9141 - Fixed and enabled test.

Posted by sb...@apache.org.
GG-9141 - Fixed and enabled test.


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

Branch: refs/heads/ignite-41
Commit: 766e45cf279ce270a59b835efa5433b837bb4336
Parents: 62b9617
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:43:25 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:43:25 2014 -0800

----------------------------------------------------------------------
 .../near/GridCacheNearOneNodeSelfTest.java      | 23 +++++++++++---------
 1 file changed, 13 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/766e45cf/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearOneNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearOneNodeSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearOneNodeSelfTest.java
index 10d438d..728336d 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearOneNodeSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearOneNodeSelfTest.java
@@ -15,6 +15,7 @@ import org.apache.ignite.spi.discovery.tcp.*;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.store.*;
+import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.testframework.junits.common.*;
 import org.jetbrains.annotations.*;
 
@@ -135,22 +136,24 @@ public class GridCacheNearOneNodeSelfTest extends GridCommonAbstractTest {
      * @throws Exception If failed.
      */
     @SuppressWarnings({"ConstantConditions"})
-    public void _testOptimisticTxWriteThrough() throws Exception { // TODO GG-9141
+    public void testOptimisticTxWriteThrough() throws Exception {
         GridCache<Integer, String> near = cache();
-        GridCache<Integer, String> dht = dht();
+        GridCacheAdapter<Integer, String> dht = dht();
 
-        GridCacheTx tx = cache().txStart(OPTIMISTIC, REPEATABLE_READ);
+        try (GridCacheTx tx = cache().txStart(OPTIMISTIC, REPEATABLE_READ) ) {
+            near.putx(2, "2");
+            near.put(3, "3");
 
-        near.putx(2, "2");
-        near.put(3, "3");
+            assert "2".equals(near.get(2));
+            assert "3".equals(near.get(3));
 
-        assert "2".equals(near.get(2));
-        assert "3".equals(near.get(3));
+            GridCacheEntryEx<Integer, String> entry = dht.peekEx(2);
 
-        assert dht.peek(2) == null;
-        assert dht.peek(3) != null;
+            assert entry == null || entry.rawGetOrUnmarshal(false) == null : "Invalid entry: " + entry;
+            assert dht.peek(3) != null;
 
-        tx.commit();
+            tx.commit();
+        }
 
         assert "2".equals(near.get(2));
         assert "3".equals(near.get(3));


[14/18] incubator-ignite git commit: GG-9141 - Cleanup, fixed delayed preloading.

Posted by sb...@apache.org.
GG-9141 - Cleanup, fixed delayed preloading.


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

Branch: refs/heads/ignite-41
Commit: fa69fe8827b189d12f34378f9533d208ce062e46
Parents: 2ad4e6d
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Mon Dec 15 16:18:24 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Mon Dec 15 16:18:24 2014 -0800

----------------------------------------------------------------------
 .../java/org/apache/ignite/IgniteCompute.java   |  75 ++++++------
 .../grid/cache/GridCacheConfiguration.java      | 115 ++-----------------
 .../processors/cache/GridCacheAttributes.java   |  40 -------
 .../GridCachePartitionExchangeManager.java      |  16 +--
 .../processors/cache/GridCacheProcessor.java    |  16 ---
 .../preloader/GridDhtPartitionDemandPool.java   |   2 +-
 .../visor/cache/VisorCacheDgcConfiguration.java |   4 -
 .../tcp/GridCacheDhtLockBackupSelfTest.java     |   7 --
 .../GridCacheAbstractFailoverSelfTest.java      |   2 -
 .../GridCacheAbstractRemoveFailureTest.java     |   9 --
 .../GridCacheGroupLockFailoverSelfTest.java     |   3 -
 .../cache/GridCachePutAllFailoverSelfTest.java  |   3 -
 .../GridCacheReferenceCleanupSelfTest.java      |   1 -
 ...dCacheQueueMultiNodeConsistencySelfTest.java |   1 -
 ...dCachePartitionedQueueMultiNodeSelfTest.java |   1 -
 ...dCacheMultithreadedFailoverAbstractTest.java |   5 +-
 ...cOriginatingNodeFailureAbstractSelfTest.java |   1 -
 .../dht/GridCacheDhtPreloadDelayedSelfTest.java |   2 +-
 ...titionedExplicitLockNodeFailureSelfTest.java |   1 -
 ...idCachePartitionedMultiNodeLockSelfTest.java |   1 -
 ...GridCachePartitionedNodeFailureSelfTest.java |   1 -
 .../GridCachePartitionedNodeRestartTest.java    |   1 -
 ...ePartitionedOptimisticTxNodeRestartTest.java |   1 -
 .../GridCachePartitionedTxSalvageSelfTest.java  |   2 -
 .../near/GridCachePutArrayValueSelfTest.java    |   2 -
 25 files changed, 59 insertions(+), 253 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/main/java/org/apache/ignite/IgniteCompute.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCompute.java b/modules/core/src/main/java/org/apache/ignite/IgniteCompute.java
index 613a521..16da89f 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteCompute.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteCompute.java
@@ -12,7 +12,10 @@ package org.apache.ignite;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.compute.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
+import org.apache.ignite.marshaller.optimized.IgniteOptimizedMarshaller;
+import org.apache.ignite.resources.*;
+import org.apache.ignite.spi.failover.FailoverSpi;
+import org.apache.ignite.spi.loadbalancing.LoadBalancingSpi;
 import org.jetbrains.annotations.*;
 
 import java.io.*;
@@ -21,66 +24,66 @@ import java.util.concurrent.*;
 
 /**
  * Defines compute grid functionality for executing tasks and closures over nodes
- * in the {@link org.apache.ignite.cluster.ClusterGroup}. Instance of {@code GridCompute} is obtained from grid projection
+ * in the {@link ClusterGroup}. Instance of {@code GridCompute} is obtained from grid projection
  * as follows:
  * <pre name="code" class="java">
  * GridCompute c = GridGain.grid().compute();
  * </pre>
  * The methods are grouped as follows:
  * <ul>
- * <li>{@code apply(...)} methods execute {@link org.apache.ignite.lang.IgniteClosure} jobs over nodes in the projection.</li>
+ * <li>{@code apply(...)} methods execute {@link IgniteClosure} jobs over nodes in the projection.</li>
  * <li>
  *     {@code call(...)} methods execute {@link Callable} jobs over nodes in the projection.
- *     Use {@link org.apache.ignite.lang.IgniteCallable} for better performance as it implements {@link Serializable}.
+ *     Use {@link IgniteCallable} for better performance as it implements {@link Serializable}.
  * </li>
  * <li>
  *     {@code run(...)} methods execute {@link Runnable} jobs over nodes in the projection.
- *     Use {@link org.apache.ignite.lang.IgniteRunnable} for better performance as it implements {@link Serializable}.
+ *     Use {@link IgniteRunnable} for better performance as it implements {@link Serializable}.
  * </li>
  * <li>{@code broadcast(...)} methods broadcast jobs to all nodes in the projection.</li>
  * <li>{@code affinity(...)} methods colocate jobs with nodes on which a specified key is cached.</li>
  * </ul>
  * Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does
- * not have any alive nodes), then {@link org.apache.ignite.cluster.ClusterGroupEmptyException} will be thrown out of result future.
+ * not have any alive nodes), then {@link ClusterGroupEmptyException} will be thrown out of result future.
  * <h1 class="header">Serializable</h1>
  * Also note that {@link Runnable} and {@link Callable} implementations must support serialization as required
- * by the configured marshaller. For example, {@link org.apache.ignite.marshaller.optimized.IgniteOptimizedMarshaller} requires {@link Serializable}
+ * by the configured marshaller. For example, {@link IgniteOptimizedMarshaller} requires {@link Serializable}
  * objects by default, but can be configured not to. Generally speaking objects that implement {@link Serializable}
  * or {@link Externalizable} will perform better. For {@link Runnable} and {@link Callable} interfaces
- * GridGain provides analogous {@link org.apache.ignite.lang.IgniteRunnable} and {@link org.apache.ignite.lang.IgniteCallable} classes which are
+ * GridGain provides analogous {@link IgniteRunnable} and {@link IgniteCallable} classes which are
  * {@link Serializable} and should be used to run computations on the grid.
  * <h1 class="header">Load Balancing</h1>
  * In all cases other than {@code broadcast(...)}, GridGain must select a node for a computation
- * to be executed. The node will be selected based on the underlying {@link org.apache.ignite.spi.loadbalancing.LoadBalancingSpi},
+ * to be executed. The node will be selected based on the underlying {@link LoadBalancingSpi},
  * which by default sequentially picks next available node from grid projection. Other load balancing
  * policies, such as {@code random} or {@code adaptive}, can be configured as well by selecting
  * a different load balancing SPI in grid configuration. If your logic requires some custom
- * load balancing behavior, consider implementing {@link org.apache.ignite.compute.ComputeTask} directly.
+ * load balancing behavior, consider implementing {@link ComputeTask} directly.
  * <h1 class="header">Fault Tolerance</h1>
  * GridGain guarantees that as long as there is at least one grid node standing, every job will be
  * executed. Jobs will automatically failover to another node if a remote node crashed
  * or has rejected execution due to lack of resources. By default, in case of failover, next
  * load balanced node will be picked for job execution. Also jobs will never be re-routed to the
  * nodes they have failed on. This behavior can be changed by configuring any of the existing or a custom
- * {@link org.apache.ignite.spi.failover.FailoverSpi} in grid configuration.
+ * {@link FailoverSpi} in grid configuration.
  * <h1 class="header">Resource Injection</h1>
  * All compute jobs, including closures, runnables, callables, and tasks can be injected with
  * grid resources. Both, field and method based injections are supported. The following grid
  * resources can be injected:
  * <ul>
- * <li>{@link org.apache.ignite.resources.IgniteTaskSessionResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteInstanceResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteLoggerResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteHomeResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteExecutorServiceResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteLocalNodeIdResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteMBeanServerResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteMarshallerResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteSpringApplicationContextResource}</li>
- * <li>{@link org.apache.ignite.resources.IgniteSpringResource}</li>
+ * <li>{@link IgniteTaskSessionResource}</li>
+ * <li>{@link IgniteInstanceResource}</li>
+ * <li>{@link IgniteLoggerResource}</li>
+ * <li>{@link IgniteHomeResource}</li>
+ * <li>{@link IgniteExecutorServiceResource}</li>
+ * <li>{@link IgniteLocalNodeIdResource}</li>
+ * <li>{@link IgniteMBeanServerResource}</li>
+ * <li>{@link IgniteMarshallerResource}</li>
+ * <li>{@link IgniteSpringApplicationContextResource}</li>
+ * <li>{@link IgniteSpringResource}</li>
  * </ul>
  * Refer to corresponding resource documentation for more information.
- * Here is an example of how to inject instance of {@link org.apache.ignite.Ignite} into a computation:
+ * Here is an example of how to inject instance of {@link Ignite} into a computation:
  * <pre name="code" class="java">
  * public class MyGridJob extends GridRunnable {
  *      ...
@@ -93,7 +96,7 @@ import java.util.concurrent.*;
  * Note that regardless of which method is used for executing computations, all relevant SPI implementations
  * configured for this grid instance will be used (i.e. failover, load balancing, collision resolution,
  * checkpoints, etc.). If you need to override configured defaults, you should use compute task together with
- * {@link org.apache.ignite.compute.ComputeTaskSpis} annotation. Refer to {@link org.apache.ignite.compute.ComputeTask} documentation for more information.
+ * {@link ComputeTaskSpis} annotation. Refer to {@link ComputeTask} documentation for more information.
  */
 public interface IgniteCompute extends IgniteAsyncSupport {
     /**
@@ -112,8 +115,8 @@ public interface IgniteCompute extends IgniteAsyncSupport {
      * @param cacheName Name of the cache to use for affinity co-location.
      * @param affKey Affinity key.
      * @param job Job which will be co-located on the node with given affinity key.
-     * @see org.apache.ignite.compute.ComputeJobContext#cacheName()
-     * @see org.apache.ignite.compute.ComputeJobContext#affinityKey()
+     * @see ComputeJobContext#cacheName()
+     * @see ComputeJobContext#affinityKey()
      * @throws IgniteCheckedException If job failed.
      */
     public void affinityRun(@Nullable String cacheName, Object affKey, Runnable job) throws IgniteCheckedException;
@@ -129,18 +132,18 @@ public interface IgniteCompute extends IgniteAsyncSupport {
      * @param job Job which will be co-located on the node with given affinity key.
      * @return Job result.
      * @throws IgniteCheckedException If job failed.
-     * @see org.apache.ignite.compute.ComputeJobContext#cacheName()
-     * @see org.apache.ignite.compute.ComputeJobContext#affinityKey()
+     * @see ComputeJobContext#cacheName()
+     * @see ComputeJobContext#affinityKey()
      */
     public <R> R affinityCall(@Nullable String cacheName, Object affKey, Callable<R> job) throws IgniteCheckedException;
 
     /**
      * Executes given task on the grid projection. For step-by-step explanation of task execution process
-     * refer to {@link org.apache.ignite.compute.ComputeTask} documentation.
+     * refer to {@link ComputeTask} documentation.
      * <p>
      * Supports asynchronous execution (see {@link IgniteAsyncSupport}).
      *
-     * @param taskCls Class of the task to execute. If class has {@link org.apache.ignite.compute.ComputeTaskName} annotation,
+     * @param taskCls Class of the task to execute. If class has {@link ComputeTaskName} annotation,
      *      then task is deployed under a name specified within annotation. Otherwise, full
      *      class name is used as task name.
      * @param arg Optional argument of task execution, can be {@code null}.
@@ -151,11 +154,11 @@ public interface IgniteCompute extends IgniteAsyncSupport {
 
     /**
      * Executes given task on this grid projection. For step-by-step explanation of task execution process
-     * refer to {@link org.apache.ignite.compute.ComputeTask} documentation.
+     * refer to {@link ComputeTask} documentation.
      * <p>
      * Supports asynchronous execution (see {@link IgniteAsyncSupport}).
      *
-     * @param task Instance of task to execute. If task class has {@link org.apache.ignite.compute.ComputeTaskName} annotation,
+     * @param task Instance of task to execute. If task class has {@link ComputeTaskName} annotation,
      *      then task is deployed under a name specified within annotation. Otherwise, full
      *      class name is used as task name.
      * @param arg Optional argument of task execution, can be {@code null}.
@@ -166,7 +169,7 @@ public interface IgniteCompute extends IgniteAsyncSupport {
 
     /**
      * Executes given task on this grid projection. For step-by-step explanation of task execution process
-     * refer to {@link org.apache.ignite.compute.ComputeTask} documentation.
+     * refer to {@link ComputeTask} documentation.
      * <p>
      * If task for given name has not been deployed yet, then {@code taskName} will be
      * used as task class name to auto-deploy the task (see {@link #localDeployTask(Class, ClassLoader)} method).
@@ -177,7 +180,7 @@ public interface IgniteCompute extends IgniteAsyncSupport {
      * @param arg Optional argument of task execution, can be {@code null}.
      * @return Task result.
      * @throws IgniteCheckedException If task failed.
-     * @see org.apache.ignite.compute.ComputeTask for information about task execution.
+     * @see ComputeTask for information about task execution.
      */
     public <T, R> R execute(String taskName, @Nullable T arg) throws IgniteCheckedException;
 
@@ -330,7 +333,7 @@ public interface IgniteCompute extends IgniteAsyncSupport {
      * Sets task name for the next executed task on this projection in the <b>current thread</b>.
      * When task starts execution, the name is reset, so one name is used only once. You may use
      * this method to set task name when executing jobs directly, without explicitly
-     * defining {@link org.apache.ignite.compute.ComputeTask}.
+     * defining {@link ComputeTask}.
      * <p>
      * Here is an example.
      * <pre name="code" class="java">
@@ -346,7 +349,7 @@ public interface IgniteCompute extends IgniteAsyncSupport {
      * Sets task timeout for the next executed task on this projection in the <b>current thread</b>.
      * When task starts execution, the timeout is reset, so one timeout is used only once. You may use
      * this method to set task name when executing jobs directly, without explicitly
-     * defining {@link org.apache.ignite.compute.ComputeTask}.
+     * defining {@link ComputeTask}.
      * <p>
      * Here is an example.
      * <pre name="code" class="java">
@@ -391,7 +394,7 @@ public interface IgniteCompute extends IgniteAsyncSupport {
      * <p>
      * This method has no effect if the class passed in was already deployed.
      *
-     * @param taskCls Task class to deploy. If task class has {@link org.apache.ignite.compute.ComputeTaskName} annotation,
+     * @param taskCls Task class to deploy. If task class has {@link ComputeTaskName} annotation,
      *      then task will be deployed under the name specified within annotation. Otherwise, full
      *      class name will be used as task's name.
      * @param clsLdr Task class loader. This class loader is in charge

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheConfiguration.java b/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheConfiguration.java
index cb082fb..dff9bdc 100644
--- a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheConfiguration.java
+++ b/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheConfiguration.java
@@ -9,6 +9,10 @@
 
 package org.gridgain.grid.cache;
 
+import org.apache.ignite.Ignite;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.portables.PortableObject;
+import org.apache.ignite.spi.indexing.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.cache.affinity.consistenthash.*;
 import org.gridgain.grid.cache.cloner.*;
@@ -24,21 +28,17 @@ import java.util.*;
 
 /**
  * This class defines grid cache configuration. This configuration is passed to
- * grid via {@link org.apache.ignite.configuration.IgniteConfiguration#getCacheConfiguration()} method. It defines all configuration
+ * grid via {@link IgniteConfiguration#getCacheConfiguration()} method. It defines all configuration
  * parameters required to start a cache within grid instance. You can have multiple caches
  * configured with different names within one grid.
  * <p>
  * Cache configuration is set on {@link
- * org.apache.ignite.configuration.IgniteConfiguration#setCacheConfiguration(GridCacheConfiguration...)} method. This adapter is a simple bean and
+ * IgniteConfiguration#setCacheConfiguration(GridCacheConfiguration...)} method. This adapter is a simple bean and
  * can be configured from Spring XML files (or other DI frameworks). <p> Note that absolutely all configuration
  * properties are optional, so users should only change what they need.
  */
 @SuppressWarnings("RedundantFieldInitialization")
 public class GridCacheConfiguration extends MutableConfiguration {
-    /** DGC tracing logger name. */
-    public static final String DGC_TRACE_LOGGER_NAME =
-        "org.gridgain.grid.kernal.processors.cache.GridCacheDgcManager.trace";
-
     /** Default atomic sequence reservation size. */
     public static final int DFLT_ATOMIC_SEQUENCE_RESERVE_SIZE = 1000;
 
@@ -96,15 +96,6 @@ public class GridCacheConfiguration extends MutableConfiguration {
     /** Default preload batch size in bytes. */
     public static final int DFLT_PRELOAD_BATCH_SIZE = 512 * 1024; // 512K
 
-    /** Default distributed garbage collection frequency. */
-    public static final long DFLT_DGC_FREQUENCY = 10000;
-
-    /** Default timeout for lock not to be considered as suspicious. */
-    public static final long DFLT_DGC_SUSPECT_LOCK_TIMEOUT = 10000;
-
-    /** Default value for whether DGC should remove long running locks, or only report them. */
-    public static final boolean DFLT_DGC_REMOVE_LOCKS = true;
-
     /** Default maximum eviction queue ratio. */
     public static final float DFLT_MAX_EVICTION_OVERFLOW_RATIO = 10;
 
@@ -274,15 +265,6 @@ public class GridCacheConfiguration extends MutableConfiguration {
     /** Preload batch size. */
     private int preloadBatchSize = DFLT_PRELOAD_BATCH_SIZE;
 
-    /** Distributed garbage collection frequency. */
-    private long dgcFreq = DFLT_DGC_FREQUENCY;
-
-    /** Timeout after which DGC will consider remote locks as suspects. */
-    private long dgcSuspectLockTimeout = DFLT_DGC_SUSPECT_LOCK_TIMEOUT;
-
-    /** Flag indicating whether DGC should remove locks. */
-    private boolean dgcRmvLocks = DFLT_DGC_REMOVE_LOCKS;
-
     /** Off-heap memory size. */
     private long offHeapMaxMem = DFLT_OFFHEAP_MEMORY;
 
@@ -367,9 +349,6 @@ public class GridCacheConfiguration extends MutableConfiguration {
         cloner = cc.getCloner();
         dfltLockTimeout = cc.getDefaultLockTimeout();
         dfltQryTimeout = cc.getDefaultQueryTimeout();
-        dgcFreq = cc.getDgcFrequency();
-        dgcRmvLocks = cc.isDgcRemoveLocks();
-        dgcSuspectLockTimeout = cc.getDgcSuspectLockTimeout();
         distro = cc.getDistributionMode();
         eagerTtl = cc.isEagerTtl();
         evictFilter = cc.getEvictionFilter();
@@ -419,8 +398,8 @@ public class GridCacheConfiguration extends MutableConfiguration {
 
     /**
      * Cache name. If not provided or {@code null}, then this will be considered a default
-     * cache which can be accessed via {@link org.apache.ignite.Ignite#cache(String) Grid.cache(null)} method. Otherwise, if name
-     * is provided, the cache will be accessed via {@link org.apache.ignite.Ignite#cache(String)} method.
+     * cache which can be accessed via {@link Ignite#cache(String) Grid.cache(null)} method. Otherwise, if name
+     * is provided, the cache will be accessed via {@link Ignite#cache(String)} method.
      *
      * @return Cache name.
      */
@@ -1105,78 +1084,6 @@ public class GridCacheConfiguration extends MutableConfiguration {
     }
 
     /**
-     * Gets frequency at which distributed garbage collector will
-     * check other nodes if there are any zombie locks left over.
-     * <p>
-     * If not provided, default value is {@link GridCacheConfiguration#DFLT_DGC_FREQUENCY}.
-     *
-     * @return Frequency of distributed GC in milliseconds ({@code 0} to disable GC).
-     */
-    public long getDgcFrequency() {
-        return dgcFreq;
-    }
-
-    /**
-     * Sets frequency in milliseconds for internal distributed garbage collector. Pass {@code 0} to disable distributed
-     * garbage collection. <p> If not provided, default value is {@link GridCacheConfiguration#DFLT_DGC_FREQUENCY}.
-     *
-     * @param dgcFreq Frequency of distributed GC in milliseconds ({@code 0} to disable GC).
-     */
-    public void setDgcFrequency(long dgcFreq) {
-        this.dgcFreq = dgcFreq;
-    }
-
-    /**
-     * Gets timeout after which locks are considered to be suspicious.
-     * <p>
-     * If not provided, default value is {@link GridCacheConfiguration#DFLT_DGC_SUSPECT_LOCK_TIMEOUT}.
-     *
-     * @return Distributed GC suspect lock timeout.
-     */
-    public long getDgcSuspectLockTimeout() {
-        return dgcSuspectLockTimeout;
-    }
-
-    /**
-     * Sets suspect lock timeout in milliseconds for internal distributed garbage collector. If lock's lifetime is
-     * greater than the timeout, then lock is considered to be suspicious. <p> If not provided, default value is {@link
-     * GridCacheConfiguration#DFLT_DGC_SUSPECT_LOCK_TIMEOUT}.
-     *
-     * @param dgcSuspectLockTimeout Timeout in milliseconds.
-     */
-    public void setDgcSuspectLockTimeout(long dgcSuspectLockTimeout) {
-        this.dgcSuspectLockTimeout = dgcSuspectLockTimeout;
-    }
-
-    /**
-     * Gets system-wide flag indicating whether DGC manager should remove locks in question or only
-     * report them. Note, that this behavior could be overridden by specifically calling
-     * {@link GridCache#dgc(long, boolean, boolean)} method.
-     * <p>
-     * If {@code false} DGC manager will not release the locks that are not owned by any other node.
-     * This may be useful for debugging purposes. You may also enable DGC tracing by enabling DEBUG
-     * on {@link #DGC_TRACE_LOGGER_NAME} category.
-     * <p>
-     * If not provided, default value is {@link GridCacheConfiguration#DFLT_DGC_REMOVE_LOCKS}.
-     *
-     * @return {@code True} if DGC should remove locks.
-     * @see #DGC_TRACE_LOGGER_NAME
-     */
-    public boolean isDgcRemoveLocks() {
-        return dgcRmvLocks;
-    }
-
-    /**
-     * Sets DGC remove locks flag.
-     *
-     * @param dgcRmvLocks {@code True} to remove locks.
-     * @see #isDgcRemoveLocks()
-     */
-    public void setDgcRemoveLocks(boolean dgcRmvLocks) {
-        this.dgcRmvLocks = dgcRmvLocks;
-    }
-
-    /**
      * Flag indicating whether GridGain should use swap storage by default. By default
      * swap is disabled which is defined via {@link #DFLT_SWAP_ENABLED} constant.
      * <p>
@@ -1562,7 +1469,7 @@ public class GridCacheConfiguration extends MutableConfiguration {
      * SPI is configured. In majority of the cases default value should be used.
      *
      * @return Name of SPI to use for indexing.
-     * @see org.apache.ignite.spi.indexing.IndexingSpi
+     * @see GridIndexingSpi
      */
     public String getIndexingSpiName() {
         return indexingSpiName;
@@ -1576,7 +1483,7 @@ public class GridCacheConfiguration extends MutableConfiguration {
      * SPI is configured. In majority of the cases default value should be used.
      *
      * @param indexingSpiName Name.
-     * @see org.apache.ignite.spi.indexing.IndexingSpi
+     * @see GridIndexingSpi
      */
     public void setIndexingSpiName(String indexingSpiName) {
         this.indexingSpiName = indexingSpiName;
@@ -1744,7 +1651,7 @@ public class GridCacheConfiguration extends MutableConfiguration {
 
     /**
      * Flag indicating whether GridGain should store portable keys and values
-     * as instances of {@link org.apache.ignite.portables.PortableObject}.
+     * as instances of {@link PortableObject}.
      *
      * @return Portable enabled flag.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAttributes.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAttributes.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAttributes.java
index 0d659f6..531f816 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAttributes.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAttributes.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.cache.affinity.consistenthash.*;
-import org.gridgain.grid.kernal.processors.cache.dr.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.jetbrains.annotations.*;
 
@@ -70,15 +69,6 @@ public class GridCacheAttributes implements Externalizable {
     /** Preload batch size. */
     private int preloadBatchSize;
 
-    /** Distributed garbage collection frequency. */
-    private long dgcFreq;
-
-    /** Timeout after which DGC will consider remote locks as suspects. */
-    private long dgcSuspectLockTimeout;
-
-    /** Flag indicating whether DGC should remove locks. */
-    private boolean dgcRmvLocks;
-
     /** Synchronization mode. */
     private GridCacheWriteSynchronizationMode writeSyncMode;
 
@@ -162,9 +152,6 @@ public class GridCacheAttributes implements Externalizable {
         cacheMode = cfg.getCacheMode();
         dfltLockTimeout = cfg.getDefaultLockTimeout();
         dfltQryTimeout = cfg.getDefaultQueryTimeout();
-        dgcFreq = cfg.getDgcFrequency();
-        dgcRmvLocks = cfg.isDgcRemoveLocks();
-        dgcSuspectLockTimeout  = cfg.getDgcSuspectLockTimeout();
         evictMaxOverflowRatio = cfg.getEvictMaxOverflowRatio();
         evictNearSync = cfg.isEvictNearSynchronized();
         evictSync = cfg.isEvictSynchronized();
@@ -439,27 +426,6 @@ public class GridCacheAttributes implements Externalizable {
     }
 
     /**
-     * @return Distributed garbage collection frequency.
-     */
-    public long dgcFrequency() {
-        return dgcFreq;
-    }
-
-    /**
-     * @return Timeout after which DGC will consider remote locks as suspects.
-     */
-    public long dgcSuspectLockTimeout() {
-        return dgcSuspectLockTimeout;
-    }
-
-    /**
-     * @return Flag indicating whether DGC should remove locks.
-     */
-    public boolean dgcRemoveLocks() {
-        return dgcRmvLocks;
-    }
-
-    /**
      * @return Synchronization mode.
      */
     public GridCacheWriteSynchronizationMode writeSynchronization() {
@@ -535,9 +501,6 @@ public class GridCacheAttributes implements Externalizable {
         U.writeEnum0(out, cacheMode);
         out.writeLong(dfltLockTimeout);
         out.writeLong(dfltQryTimeout);
-        out.writeLong(dgcFreq);
-        out.writeBoolean(dgcRmvLocks);
-        out.writeLong(dgcSuspectLockTimeout);
         out.writeFloat(evictMaxOverflowRatio);
         out.writeBoolean(evictNearSync);
         out.writeBoolean(evictSync);
@@ -582,9 +545,6 @@ public class GridCacheAttributes implements Externalizable {
         cacheMode = GridCacheMode.fromOrdinal(U.readEnumOrdinal0(in));
         dfltLockTimeout = in.readLong();
         dfltQryTimeout = in.readLong();
-        dgcFreq = in.readLong();
-        dgcRmvLocks = in.readBoolean();
-        dgcSuspectLockTimeout = in.readLong();
         evictMaxOverflowRatio = in.readFloat();
         evictNearSync = in.readBoolean();
         evictSync  = in.readBoolean();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
index a553dd5..b0c319d 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
@@ -756,7 +756,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
 
                     busy = true;
 
-                    Map<Integer, GridDhtPreloaderAssignments<K, V>> assignsMap = null;
+                    Map<Integer, GridDhtPreloaderAssignments<K, V>> assignsMap = new HashMap<>();
 
                     boolean dummyReassign = exchFut.dummyReassign();
                     boolean forcePreload = exchFut.forcePreload();
@@ -820,17 +820,13 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
                         for (GridCacheContext<K, V> cacheCtx : cctx.cacheContexts()) {
                             long delay = cacheCtx.config().getPreloadPartitionedDelay();
 
-                            // Don't delay for dummy reassigns to avoid infinite recursion.
-                            if (delay == 0 || forcePreload) {
-                                GridDhtPreloaderAssignments<K, V> assigns = cacheCtx.preloader().assign(exchFut);
+                            GridDhtPreloaderAssignments<K, V> assigns = null;
 
-                                if (assigns != null) {
-                                    if (assignsMap == null)
-                                        assignsMap = new HashMap<>();
+                            // Don't delay for dummy reassigns to avoid infinite recursion.
+                            if (delay == 0 || forcePreload)
+                                assigns = cacheCtx.preloader().assign(exchFut);
 
-                                    assignsMap.put(cacheCtx.cacheId(), assigns);
-                                }
-                            }
+                            assignsMap.put(cacheCtx.cacheId(), assigns);
                         }
                     }
                     finally {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheProcessor.java
index a083805..1c08267 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheProcessor.java
@@ -1071,25 +1071,9 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                             "Default query timeout", locAttr.defaultQueryTimeout(), rmtAttr.defaultQueryTimeout(),
                             false);
 
-                        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "dgcFrequency",
-                            "Distributed garbage collector frequency", locAttr.dgcFrequency(), rmtAttr.dgcFrequency(),
-                            false);
-
                         CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "defaultTimeToLive",
                             "Default time to live", locAttr.defaultTimeToLive(), rmtAttr.defaultTimeToLive(), false);
 
-                        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "dgcFrequency",
-                            "Distributed garbage collector frequency", locAttr.dgcFrequency(), rmtAttr.dgcFrequency(),
-                            false);
-
-                        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "dgcRemoveLocks",
-                            "Distributed garbage collector remove locks", locAttr.dgcRemoveLocks(),
-                            rmtAttr.dgcRemoveLocks(), false);
-
-                        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "dgcSuspectLockTimeout",
-                            "Distributed garbage collector suspect lock timeout", locAttr.dgcSuspectLockTimeout(),
-                            rmtAttr.dgcSuspectLockTimeout(), false);
-
                         CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "preloadBatchSize",
                             "Preload batch size", locAttr.preloadBatchSize(), rmtAttr.preloadBatchSize(), false);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemandPool.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemandPool.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemandPool.java
index ac0b7e6..17291aa 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemandPool.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemandPool.java
@@ -568,7 +568,7 @@ public class GridDhtPartitionDemandPool<K, V> {
          * @param exchFut Exchange future.
          * @return Missed partitions.
          * @throws InterruptedException If interrupted.
-         * @throws org.apache.ignite.cluster.ClusterTopologyException If node left.
+         * @throws ClusterTopologyException If node left.
          * @throws IgniteCheckedException If failed to send message.
          */
         private Set<Integer> demandFromNode(ClusterNode node, final long topVer, GridDhtPartitionDemandMessage<K, V> d,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheDgcConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheDgcConfiguration.java b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheDgcConfiguration.java
index e030dc4..be170c6 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheDgcConfiguration.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheDgcConfiguration.java
@@ -37,10 +37,6 @@ public class VisorCacheDgcConfiguration implements Serializable {
     public static VisorCacheDgcConfiguration from(GridCacheConfiguration ccfg) {
         VisorCacheDgcConfiguration cfg = new VisorCacheDgcConfiguration();
 
-        cfg.frequency(ccfg.getDgcFrequency());
-        cfg.removedLocks(ccfg.isDgcRemoveLocks());
-        cfg.suspectLockTimeout(ccfg.getDgcSuspectLockTimeout());
-
         return cfg;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridCacheDhtLockBackupSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridCacheDhtLockBackupSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridCacheDhtLockBackupSelfTest.java
index 5031b2f..4445aaf 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridCacheDhtLockBackupSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridCacheDhtLockBackupSelfTest.java
@@ -14,8 +14,6 @@ import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
 import org.apache.ignite.marshaller.jdk.*;
-import org.apache.ignite.resources.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.managers.communication.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.near.*;
@@ -85,7 +83,6 @@ public class GridCacheDhtLockBackupSelfTest extends GridCommonAbstractTest {
         cacheCfg.setCacheMode(GridCacheMode.PARTITIONED);
         cacheCfg.setWriteSynchronizationMode(FULL_ASYNC);
         cacheCfg.setPreloadMode(SYNC);
-        cacheCfg.setDgcFrequency(0);
 
         return cacheCfg;
     }
@@ -232,10 +229,6 @@ public class GridCacheDhtLockBackupSelfTest extends GridCommonAbstractTest {
         /** */
         private int delayTime;
 
-        /** */
-        @IgniteMarshallerResource
-        private IgniteMarshaller marsh;
-
         /**
          * Creates test communication spi.
          *

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFailoverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFailoverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFailoverSelfTest.java
index aa0b031..21851f7 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFailoverSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFailoverSelfTest.java
@@ -14,7 +14,6 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.resources.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
@@ -70,7 +69,6 @@ public abstract class GridCacheAbstractFailoverSelfTest extends GridCacheAbstrac
         GridCacheConfiguration cfg = super.cacheConfiguration(gridName);
 
         cfg.setPreloadMode(SYNC);
-        cfg.setDgcFrequency(0);
 
         return cfg;
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractRemoveFailureTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractRemoveFailureTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractRemoveFailureTest.java
index 6686911..938a4a8 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractRemoveFailureTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractRemoveFailureTest.java
@@ -11,7 +11,6 @@ package org.gridgain.grid.kernal.processors.cache;
 
 import org.apache.ignite.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
@@ -98,14 +97,6 @@ public abstract class GridCacheAbstractRemoveFailureTest extends GridCacheAbstra
         return DUR + 60_000;
     }
 
-    @Override protected GridCacheConfiguration cacheConfiguration(String gridName) throws Exception {
-        GridCacheConfiguration cfg = super.cacheConfiguration(gridName);
-
-        cfg.setDgcFrequency(0);
-
-        return cfg;
-    }
-
     /**
      * @throws Exception If failed.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockFailoverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockFailoverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockFailoverSelfTest.java
index c812755..241de60 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockFailoverSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheGroupLockFailoverSelfTest.java
@@ -15,7 +15,6 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.compute.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.apache.ignite.spi.discovery.tcp.*;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
@@ -436,8 +435,6 @@ public class GridCacheGroupLockFailoverSelfTest extends GridCommonAbstractTest {
             cacheCfg.setCacheMode(GridCacheMode.PARTITIONED);
             cacheCfg.setStartSize(4500000);
             cacheCfg.setBackups(backups);
-            cacheCfg.setDgcSuspectLockTimeout(600000);
-            cacheCfg.setDgcFrequency(0);
             cacheCfg.setStoreValueBytes(true);
             cacheCfg.setDistributionMode(nearEnabled ? NEAR_PARTITIONED : PARTITIONED_ONLY);
             cacheCfg.setQueryIndexEnabled(false);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCachePutAllFailoverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCachePutAllFailoverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCachePutAllFailoverSelfTest.java
index 7998316..683cbd1 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCachePutAllFailoverSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCachePutAllFailoverSelfTest.java
@@ -8,7 +8,6 @@ import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.resources.*;
 import org.apache.ignite.spi.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.apache.ignite.spi.discovery.tcp.*;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
@@ -606,8 +605,6 @@ public class GridCachePutAllFailoverSelfTest extends GridCommonAbstractTest {
 
             cacheCfg.setBackups(backups);
 
-            cacheCfg.setDgcSuspectLockTimeout(600000);
-            cacheCfg.setDgcFrequency(0);
             cacheCfg.setStoreValueBytes(true);
             cacheCfg.setDistributionMode(nearEnabled ? NEAR_PARTITIONED : PARTITIONED_ONLY);
             cacheCfg.setQueryIndexEnabled(false);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
index 4602445..c01bb78 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
@@ -56,7 +56,6 @@ public class GridCacheReferenceCleanupSelfTest extends GridCommonAbstractTest {
 
         cacheCfg.setCacheMode(mode);
         cacheCfg.setWriteSynchronizationMode(GridCacheWriteSynchronizationMode.FULL_SYNC);
-        cacheCfg.setDgcRemoveLocks(false);
         cacheCfg.setAtomicityMode(TRANSACTIONAL);
         cacheCfg.setDistributionMode(NEAR_PARTITIONED);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/GridCacheQueueMultiNodeConsistencySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/GridCacheQueueMultiNodeConsistencySelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/GridCacheQueueMultiNodeConsistencySelfTest.java
index 54f70cf..8a12639 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/GridCacheQueueMultiNodeConsistencySelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/GridCacheQueueMultiNodeConsistencySelfTest.java
@@ -67,7 +67,6 @@ public class GridCacheQueueMultiNodeConsistencySelfTest extends GridCommonAbstra
         c.setDiscoverySpi(spi);
 
         cc.setCacheMode(PARTITIONED);
-        cc.setDgcFrequency(0);
         cc.setQueryIndexEnabled(true);
         cc.setSwapEnabled(false);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/partitioned/GridCachePartitionedQueueMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/partitioned/GridCachePartitionedQueueMultiNodeSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/partitioned/GridCachePartitionedQueueMultiNodeSelfTest.java
index e42d53b..1068e41 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/partitioned/GridCachePartitionedQueueMultiNodeSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/datastructures/partitioned/GridCachePartitionedQueueMultiNodeSelfTest.java
@@ -32,7 +32,6 @@ public class GridCachePartitionedQueueMultiNodeSelfTest extends GridCacheQueueMu
         cc.setCacheMode(PARTITIONED);
         cc.setBackups(1);
         cc.setWriteSynchronizationMode(FULL_SYNC);
-        cc.setDgcFrequency(0);
         cc.setAtomicityMode(TRANSACTIONAL);
         cc.setDistributionMode(PARTITIONED_ONLY);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheMultithreadedFailoverAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheMultithreadedFailoverAbstractTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheMultithreadedFailoverAbstractTest.java
index cab17f0..c7bab9b 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheMultithreadedFailoverAbstractTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheMultithreadedFailoverAbstractTest.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache.distributed;
 import org.apache.ignite.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.dht.*;
@@ -198,8 +197,6 @@ public class GridCacheMultithreadedFailoverAbstractTest extends GridCommonAbstra
         ccfg.setEvictionPolicy(null);
         ccfg.setNearEvictionPolicy(null);
 
-        ccfg.setDgcFrequency(0);
-
         if (cacheMode() == PARTITIONED)
             ccfg.setBackups(backups());
 
@@ -243,7 +240,7 @@ public class GridCacheMultithreadedFailoverAbstractTest extends GridCommonAbstra
 
         final CyclicBarrier startBarrier = new CyclicBarrier(putThreads());
 
-        final ConcurrentHashMap<Integer, Integer> expVals = new ConcurrentHashMap<>();
+        final Map<Integer, Integer> expVals = new ConcurrentHashMap<>();
 
         final int keysPerThread = keyRange() / putThreads();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTxPessimisticOriginatingNodeFailureAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTxPessimisticOriginatingNodeFailureAbstractSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTxPessimisticOriginatingNodeFailureAbstractSelfTest.java
index ec20f23..8204e50 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTxPessimisticOriginatingNodeFailureAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTxPessimisticOriginatingNodeFailureAbstractSelfTest.java
@@ -429,7 +429,6 @@ public abstract class GridCacheTxPessimisticOriginatingNodeFailureAbstractSelfTe
         GridCacheConfiguration cfg = super.cacheConfiguration(gridName);
 
         cfg.setStore(null);
-        cfg.setDgcFrequency(0);
 
         return cfg;
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadDelayedSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadDelayedSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadDelayedSelfTest.java
index ba1d3c3..9a21a5c 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadDelayedSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadDelayedSelfTest.java
@@ -170,7 +170,7 @@ public class GridCacheDhtPreloadDelayedSelfTest extends GridCommonAbstractTest {
     }
 
     /** @throws Exception If failed. */
-    public void _testDelayedPreload() throws Exception { // TODO GG-9141
+    public void testDelayedPreload() throws Exception {
         delay = PRELOAD_DELAY;
 
         Ignite g0 = startGrid(0);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedExplicitLockNodeFailureSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedExplicitLockNodeFailureSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedExplicitLockNodeFailureSelfTest.java
index 64f13d1..fd9caf8 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedExplicitLockNodeFailureSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedExplicitLockNodeFailureSelfTest.java
@@ -53,7 +53,6 @@ public class GridCachePartitionedExplicitLockNodeFailureSelfTest extends GridCom
         GridCacheConfiguration cc = defaultCacheConfiguration();
 
         cc.setCacheMode(PARTITIONED);
-        cc.setDgcFrequency(0);
         cc.setWriteSynchronizationMode(GridCacheWriteSynchronizationMode.FULL_SYNC);
         cc.setBackups(GRID_CNT - 1);
         cc.setAtomicityMode(TRANSACTIONAL);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedMultiNodeLockSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedMultiNodeLockSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedMultiNodeLockSelfTest.java
index ba4e427..f04e2db 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedMultiNodeLockSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedMultiNodeLockSelfTest.java
@@ -30,7 +30,6 @@ public class GridCachePartitionedMultiNodeLockSelfTest extends GridCacheMultiNod
 
         cc.setCacheMode(PARTITIONED);
         cc.setBackups(2); // 2 backups, so all nodes are involved.
-        cc.setDgcFrequency(0);
         cc.setAtomicityMode(TRANSACTIONAL);
         cc.setDistributionMode(NEAR_PARTITIONED);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeFailureSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeFailureSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeFailureSelfTest.java
index 4ea7431..da1ee9b 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeFailureSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeFailureSelfTest.java
@@ -30,7 +30,6 @@ public class GridCachePartitionedNodeFailureSelfTest extends GridCacheNodeFailur
         GridCacheConfiguration cc = defaultCacheConfiguration();
 
         cc.setCacheMode(PARTITIONED);
-        cc.setDgcFrequency(0);
         cc.setWriteSynchronizationMode(GridCacheWriteSynchronizationMode.FULL_SYNC);
         cc.setAtomicityMode(TRANSACTIONAL);
         cc.setDistributionMode(NEAR_PARTITIONED);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeRestartTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeRestartTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeRestartTest.java
index e8d0b41..aed997d 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeRestartTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedNodeRestartTest.java
@@ -40,7 +40,6 @@ public class GridCachePartitionedNodeRestartTest extends GridCacheAbstractNodeRe
         cc.setPreloadBatchSize(preloadBatchSize);
         cc.setAffinity(new GridCacheConsistentHashAffinityFunction(false, partitions));
         cc.setBackups(backups);
-        cc.setDgcFrequency(0);
 
         c.setCacheConfiguration(cc);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedOptimisticTxNodeRestartTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedOptimisticTxNodeRestartTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedOptimisticTxNodeRestartTest.java
index 90baf34..cf551a3 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedOptimisticTxNodeRestartTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedOptimisticTxNodeRestartTest.java
@@ -38,7 +38,6 @@ public class GridCachePartitionedOptimisticTxNodeRestartTest extends GridCacheAb
         cc.setPreloadBatchSize(preloadBatchSize);
         cc.setAffinity(new GridCacheConsistentHashAffinityFunction(false, partitions));
         cc.setBackups(backups);
-        cc.setDgcFrequency(0);
 
         c.setCacheConfiguration(cc);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedTxSalvageSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedTxSalvageSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedTxSalvageSelfTest.java
index 3ba8a10..7dee9bf 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedTxSalvageSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePartitionedTxSalvageSelfTest.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache.distributed.near;
 import org.apache.ignite.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.consistenthash.*;
 import org.gridgain.grid.kernal.*;
@@ -71,7 +70,6 @@ public class GridCachePartitionedTxSalvageSelfTest extends GridCommonAbstractTes
         cc.setAffinity(new GridCacheConsistentHashAffinityFunction(false, 18));
         cc.setBackups(1);
         cc.setPreloadMode(GridCachePreloadMode.SYNC);
-        cc.setDgcFrequency(0);
 
         c.setCacheConfiguration(cc);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fa69fe88/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePutArrayValueSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePutArrayValueSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePutArrayValueSelfTest.java
index 1785cb5..e1ce455 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePutArrayValueSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCachePutArrayValueSelfTest.java
@@ -10,7 +10,6 @@
 package org.gridgain.grid.kernal.processors.cache.distributed.near;
 
 import org.gridgain.grid.cache.*;
-import org.gridgain.grid.cache.affinity.consistenthash.*;
 import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.grid.util.typedef.internal.*;
 
@@ -33,7 +32,6 @@ public class GridCachePutArrayValueSelfTest extends GridCacheAbstractSelfTest {
 
         cacheCfg.setCacheMode(PARTITIONED);
         cacheCfg.setBackups(1);
-        cacheCfg.setDgcFrequency(0);
 
         return cacheCfg;
     }


[05/18] incubator-ignite git commit: GG-9141 - Enabling passing tests.

Posted by sb...@apache.org.
GG-9141 - Enabling passing tests.


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

Branch: refs/heads/ignite-41
Commit: 8963d2902965b13d42d7b271b8d2e8afc0d6ea29
Parents: 0cb0c33
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 10:45:25 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 10:45:25 2014 -0800

----------------------------------------------------------------------
 .../processors/cache/GridCacheAbstractProjectionSelfTest.java    | 4 ++--
 .../org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java    | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8963d290/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractProjectionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractProjectionSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractProjectionSelfTest.java
index 890d8f7..9c0437f 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractProjectionSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractProjectionSelfTest.java
@@ -588,7 +588,7 @@ public abstract class GridCacheAbstractProjectionSelfTest extends GridCacheAbstr
     /**
      * @throws Exception if failed.
      */
-    public void _testSkipStoreFlag() throws Exception { // TODO GG-9141
+    public void testSkipStoreFlag() throws Exception {
         assertNull(cache().put("kk1", 100500));
         assertEquals(100500, map.get("kk1"));
 
@@ -616,7 +616,7 @@ public abstract class GridCacheAbstractProjectionSelfTest extends GridCacheAbstr
             startGrid(i);
 
         try {
-            _testSkipStoreFlag();
+            testSkipStoreFlag();
         }
         finally {
             for (int i = 1; i < nGrids; i++)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8963d290/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
index c2fe016..3059c4e 100644
--- a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
+++ b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
@@ -95,7 +95,7 @@ public class GridDataGridTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheOffHeapTieredSelfTest.class);
 
         // Local cache.
-//        suite.addTestSuite(GridCacheLocalProjectionSelfTest.class);
+        suite.addTestSuite(GridCacheLocalProjectionSelfTest.class);
         suite.addTestSuite(GridCacheLocalAtomicProjectionSelfTest.class);
 //        suite.addTestSuite(GridCacheLocalBasicApiSelfTest.class);
 //        suite.addTestSuite(GridCacheLocalBasicStoreSelfTest.class);


[04/18] incubator-ignite git commit: GG-9141 - Fixing tests for clients suite.

Posted by sb...@apache.org.
GG-9141 - Fixing tests for clients suite.


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

Branch: refs/heads/ignite-41
Commit: 0cb0c334f10e512ca546611609052aee012c5b59
Parents: ee2df1d
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 10:42:59 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 10:42:59 2014 -0800

----------------------------------------------------------------------
 .../GridClientAbstractMultiNodeSelfTest.java    |  9 +++--
 .../client/suite/GridClientTestSuite.java       |  4 ---
 .../processors/cache/GridCacheAdapter.java      | 13 +++++--
 .../processors/cache/GridCacheTxAdapter.java    | 36 ++++++++++++++++++--
 .../kernal/processors/cache/GridCacheTxEx.java  |  8 ++++-
 .../processors/cache/GridCacheTxHandler.java    |  4 ++-
 .../cache/GridCacheTxLocalAdapter.java          | 29 ++++------------
 .../processors/cache/GridCacheTxManager.java    |  2 ++
 .../dht/GridDhtTransactionalCacheAdapter.java   |  2 ++
 .../distributed/dht/GridDhtTxLocalAdapter.java  | 19 ++---------
 .../colocated/GridDhtColocatedLockFuture.java   |  2 +-
 .../distributed/near/GridNearLockFuture.java    |  2 +-
 .../distributed/near/GridNearLockRequest.java   | 25 ++++++++++++++
 .../cache/distributed/near/GridNearTxLocal.java | 15 +++++---
 .../processors/cache/local/GridLocalTx.java     |  2 +-
 .../transactions/IgniteTransactionsImpl.java    |  7 +++-
 .../handlers/cache/GridCacheCommandHandler.java |  1 -
 .../cache/jta/GridCacheJtaManager.java          |  1 +
 18 files changed, 118 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
index 96fb9d6..60ab835 100644
--- a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
@@ -23,7 +23,6 @@ import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.client.*;
 import org.gridgain.client.balancer.*;
 import org.gridgain.client.ssl.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.managers.communication.*;
@@ -789,13 +788,13 @@ public abstract class GridClientAbstractMultiNodeSelfTest extends GridCommonAbst
             GridCacheTxEx t = tm.tx(v);
 
             if (t.hasWriteKey(cacheCtx.txKey("x1")))
-                assertFalse(t.syncCommit());
+                assertFalse("Invalid tx flags: " + t, t.syncCommit());
             else if (t.hasWriteKey(cacheCtx.txKey("x2")))
-                assertTrue(t.syncCommit());
+                assertTrue("Invalid tx flags: " + t, t.syncCommit());
             else if (t.hasWriteKey(cacheCtx.txKey("x3")))
-                assertFalse(t.syncCommit());
+                assertFalse("Invalid tx flags: " + t, t.syncCommit());
             else if (t.hasWriteKey(cacheCtx.txKey("x4")))
-                assertTrue(t.syncCommit());
+                assertTrue("Invalid tx flags: " + t, t.syncCommit());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/clients/src/test/java/org/gridgain/client/suite/GridClientTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/client/suite/GridClientTestSuite.java b/modules/clients/src/test/java/org/gridgain/client/suite/GridClientTestSuite.java
index ba503e1..db670e1 100644
--- a/modules/clients/src/test/java/org/gridgain/client/suite/GridClientTestSuite.java
+++ b/modules/clients/src/test/java/org/gridgain/client/suite/GridClientTestSuite.java
@@ -28,10 +28,6 @@ public class GridClientTestSuite extends TestSuite {
     public static TestSuite suite() {
         TestSuite suite = new TestSuite("Gridgain Clients Test Suite");
 
-        // TODO GG-9141
-        if (true)
-            return suite;
-
         suite.addTest(new TestSuite(GridRouterFactorySelfTest.class));
 
         // Parser standalone test.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
index 4d136a1..720ff36 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
@@ -3210,7 +3210,7 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im
                             val = (V)ctx.marshalToPortable(val);
                         }
 
-                        GridRawVersionedEntry<K, V> e = new GridRawVersionedEntry<>(key, null, val, null, ttl, 0, ver);
+                        GridVersionedEntry<K,V> e = new GridRawVersionedEntry<>(key, null, val, null, ttl, 0, ver);
 
                         e.marshal(ctx.marshaller());
 
@@ -3607,11 +3607,15 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im
                 READ_COMMITTED,
                 tCfg.getDefaultTxTimeout(),
                 ctx.hasFlag(INVALIDATE),
+                !ctx.hasFlag(SKIP_STORE),
                 0,
                 /** group lock keys */null,
                 /** partition lock */false
             );
 
+            if (ctx.hasFlag(SYNC_COMMIT))
+                tx.syncCommit(true);
+
             assert tx != null;
 
             try {
@@ -3669,7 +3673,7 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im
 
         GridCacheTxLocalAdapter<K, V> tx = ctx.tm().threadLocalTx();
 
-        if (tx == null || tx.implicit())
+        if (tx == null || tx.implicit()) {
             tx = ctx.tm().newTx(
                 true,
                 op.single(),
@@ -3677,10 +3681,15 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im
                 READ_COMMITTED,
                 ctx.kernalContext().config().getTransactionsConfiguration().getDefaultTxTimeout(),
                 ctx.hasFlag(INVALIDATE),
+                !ctx.hasFlag(SKIP_STORE),
                 0,
                 null,
                 false);
 
+            if (ctx.hasFlag(SYNC_COMMIT))
+                tx.syncCommit(true);
+        }
+
         return asyncOp(tx, op);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxAdapter.java
index 84045a2..7a32afa 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxAdapter.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.near.*;
 import org.gridgain.grid.util.*;
@@ -188,7 +187,7 @@ public abstract class GridCacheTxAdapter<K, V> extends GridMetadataAwareAdapter
     protected String taskName;
 
     /** Store used flag. */
-    protected boolean storeUsed;
+    protected boolean storeEnabled = true;
 
     /**
      * Empty constructor required for {@link Externalizable}.
@@ -219,6 +218,7 @@ public abstract class GridCacheTxAdapter<K, V> extends GridMetadataAwareAdapter
         GridCacheTxIsolation isolation,
         long timeout,
         boolean invalidate,
+        boolean storeEnabled,
         int txSize,
         @Nullable GridCacheTxKey grpLockKey,
         @Nullable UUID subjId,
@@ -236,6 +236,7 @@ public abstract class GridCacheTxAdapter<K, V> extends GridMetadataAwareAdapter
         this.isolation = isolation;
         this.timeout = timeout;
         this.invalidate = invalidate;
+        this.storeEnabled = storeEnabled;
         this.txSize = txSize;
         this.grpLockKey = grpLockKey;
         this.subjId = subjId;
@@ -381,8 +382,37 @@ public abstract class GridCacheTxAdapter<K, V> extends GridMetadataAwareAdapter
     }
 
     /** {@inheritDoc} */
+    @Override public boolean storeEnabled() {
+        return storeEnabled;
+    }
+
+    /**
+     * @param storeEnabled Store enabled flag.
+     */
+    public void storeEnabled(boolean storeEnabled) {
+        this.storeEnabled = storeEnabled;
+    }
+
+    /** {@inheritDoc} */
     @Override public boolean storeUsed() {
-        return storeUsed;
+        return storeEnabled() && store() != null;
+    }
+
+    /**
+     * Store manager for current transaction.
+     *
+     * @return Store manager.
+     */
+    protected GridCacheStoreManager<K, V> store() {
+        if (!activeCacheIds().isEmpty()) {
+            int cacheId = F.first(activeCacheIds());
+
+            GridCacheStoreManager<K, V> store = cctx.cacheContext(cacheId).store();
+
+            return store.configured() ? store : null;
+        }
+
+        return null;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxEx.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxEx.java
index f1c22ea..877c0f1 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxEx.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxEx.java
@@ -43,7 +43,13 @@ public interface GridCacheTxEx<K, V> extends GridCacheTx, GridTimeoutObject {
     public int size();
 
     /**
-     * @return {@code True} if transaction involves caches with cache store configured.
+     * @return {@code True} if transaction is allowed to use store.
+     */
+    public boolean storeEnabled();
+
+    /**
+     * @return {@code True} if transaction is allowed to use store and transactions spans one or more caches with
+     *      store enabled.
      */
     public boolean storeUsed();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
index e629d3f..fa85566 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxHandler.java
@@ -524,7 +524,9 @@ public class GridCacheTxHandler<K, V> {
                     return null;
                 }
 
-                tx.syncCommit(req.syncCommit());
+                if (!tx.syncCommit())
+                    tx.syncCommit(req.syncCommit());
+
                 tx.nearFinishFutureId(req.futureId());
                 tx.nearFinishMiniId(req.miniId());
                 tx.recoveryWrites(req.recoveryWrites());

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
index 2c52e0a..b7fa4b2 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
@@ -110,6 +110,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
         GridCacheTxIsolation isolation,
         long timeout,
         boolean invalidate,
+        boolean storeEnabled,
         int txSize,
         @Nullable GridCacheTxKey grpLockKey,
         boolean partLock,
@@ -117,7 +118,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
         int taskNameHash
     ) {
         super(cctx, xidVer, implicit, implicitSingle, /*local*/true, concurrency, isolation, timeout, invalidate,
-            txSize, grpLockKey, subjId, taskNameHash);
+            storeEnabled, txSize, grpLockKey, subjId, taskNameHash);
 
         assert !partLock || grpLockKey != null;
 
@@ -423,23 +424,6 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
     }
 
     /**
-     * Store manager for current transaction.
-     *
-     * @return Store manager.
-     */
-    protected GridCacheStoreManager<K, V> store() {
-        if (!activeCacheIds.isEmpty()) {
-            int cacheId = F.first(activeCacheIds);
-
-            GridCacheStoreManager<K, V> store = cctx.cacheContext(cacheId).store();
-
-            return store.configured() ? store : null;
-        }
-
-        return null;
-    }
-
-    /**
      * Performs batch database operations. This commit must be called
      * before {@link #userCommit()}. This way if there is a DB failure,
      * cache transaction can still be rolled back.
@@ -451,7 +435,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
     protected void batchStoreCommit(Iterable<GridCacheTxEntry<K, V>> writeEntries) throws IgniteCheckedException {
         GridCacheStoreManager<K, V> store = store();
 
-        if (store != null && (!internal() || groupLock())) {
+        if (store != null && storeEnabled() && (!internal() || groupLock())) {
             try {
                 // Implicit transactions are always updated at the end.
                 if (isBatchUpdate()) {
@@ -985,7 +969,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
 
     /**
      * Checks if there is a cached or swapped value for
-     * {@link #getAllAsync(GridCacheContext, Collection, GridCacheEntryEx, boolean, org.apache.ignite.lang.IgnitePredicate[])} method.
+     * {@link #getAllAsync(GridCacheContext, Collection, GridCacheEntryEx, boolean, IgnitePredicate[])} method.
      *
      *
      * @param keys Key to enlist.
@@ -1232,7 +1216,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
 
     /**
      * Loads all missed keys for
-     * {@link #getAllAsync(GridCacheContext, Collection, GridCacheEntryEx, boolean, org.apache.ignite.lang.IgnitePredicate[])} method.
+     * {@link #getAllAsync(GridCacheContext, Collection, GridCacheEntryEx, boolean, IgnitePredicate[])} method.
      *
      * @param map Return map.
      * @param missedMap Missed keys.
@@ -2541,7 +2525,8 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                             ", part=" + part + ", groupLockKey=" + grpLockKey + ']');
                 }
                 else {
-                    GridCacheTxKey affinityKey = cacheCtx.txKey((K)cacheCtx.config().getAffinityMapper().affinityKey(key));
+                    GridCacheTxKey affinityKey = cacheCtx.txKey(
+                        (K)cacheCtx.config().getAffinityMapper().affinityKey(key));
 
                     if (!grpLockKey.equals(affinityKey))
                         throw new IgniteCheckedException("Failed to enlist key into group-lock transaction (affinity key was " +

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
index 7179f8e..935ae1d 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
@@ -365,6 +365,7 @@ public class GridCacheTxManager<K, V> extends GridCacheSharedManagerAdapter<K, V
         GridCacheTxIsolation isolation,
         long timeout,
         boolean invalidate,
+        boolean storeEnabled,
         int txSize,
         @Nullable GridCacheTxKey grpLockKey,
         boolean partLock) {
@@ -380,6 +381,7 @@ public class GridCacheTxManager<K, V> extends GridCacheSharedManagerAdapter<K, V
             isolation,
             timeout,
             invalidate,
+            storeEnabled,
             txSize,
             grpLockKey,
             partLock,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
index 69500dd..3f30801 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
@@ -768,6 +768,8 @@ public abstract class GridDhtTransactionalCacheAdapter<K, V> extends GridDhtCach
                                     req.subjectId(),
                                     req.taskNameHash());
 
+                                tx.syncCommit(req.syncCommit());
+
                                 tx = ctx.tm().onCreated(tx);
 
                                 if (tx == null || !tx.init()) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
index 95cd4ad..461ea04 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
@@ -52,9 +52,6 @@ public abstract class GridDhtTxLocalAdapter<K, V> extends GridCacheTxLocalAdapte
     private long dhtThreadId;
 
     /** */
-    private boolean explicitLock;
-
-    /** */
     private boolean needsCompletedVers;
 
     /** Versions of pending locks for entries of this tx. */
@@ -75,7 +72,6 @@ public abstract class GridDhtTxLocalAdapter<K, V> extends GridCacheTxLocalAdapte
      * @param concurrency Concurrency.
      * @param isolation Isolation.
      * @param timeout Timeout.
-     * @param explicitLock Explicit lock flag.
      * @param txSize Expected transaction size.
      * @param grpLockKey Group lock key if this is a group-lock transaction.
      * @param partLock If this is a group-lock transaction and the whole partition should be locked.
@@ -89,20 +85,18 @@ public abstract class GridDhtTxLocalAdapter<K, V> extends GridCacheTxLocalAdapte
         GridCacheTxIsolation isolation,
         long timeout,
         boolean invalidate,
-        boolean explicitLock,
+        boolean storeEnabled,
         int txSize,
         @Nullable GridCacheTxKey grpLockKey,
         boolean partLock,
         @Nullable UUID subjId,
         int taskNameHash
     ) {
-        super(cctx, xidVer, implicit, implicitSingle, concurrency, isolation, timeout, invalidate, txSize, grpLockKey,
-            partLock, subjId, taskNameHash);
+        super(cctx, xidVer, implicit, implicitSingle, concurrency, isolation, timeout, invalidate, storeEnabled, txSize,
+            grpLockKey, partLock, subjId, taskNameHash);
 
         assert cctx != null;
 
-        this.explicitLock = explicitLock;
-
         threadId = Thread.currentThread().getId();
         dhtThreadId = threadId;
     }
@@ -166,13 +160,6 @@ public abstract class GridDhtTxLocalAdapter<K, V> extends GridCacheTxLocalAdapte
     }
 
     /**
-     * @return Explicit lock flag.
-     */
-    boolean explicitLock() {
-        return explicitLock;
-    }
-
-    /**
      * @return DHT thread ID.
      */
     long dhtThreadId() {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
index d27ee3d..535f46e 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache.distributed.dht.colocated;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.managers.discovery.*;
 import org.gridgain.grid.kernal.processors.cache.*;
@@ -704,6 +703,7 @@ public final class GridDhtColocatedLockFuture<K, V> extends GridCompoundIdentity
                                         timeout,
                                         mappedKeys.size(),
                                         inTx() ? tx.size() : mappedKeys.size(),
+                                        inTx() && tx.syncCommit(),
                                         inTx() ? tx.groupLockKey() : null,
                                         inTx() && tx.partitionLock(),
                                         inTx() ? tx.subjectId() : null,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
index 15f9a85..b67229d 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache.distributed.near;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.managers.discovery.*;
 import org.gridgain.grid.kernal.processors.cache.*;
@@ -846,6 +845,7 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
                                             timeout,
                                             mappedKeys.size(),
                                             inTx() ? tx.size() : mappedKeys.size(),
+                                            inTx() && tx.syncCommit(),
                                             inTx() ? tx.groupLockKey() : null,
                                             inTx() && tx.partitionLock(),
                                             inTx() ? tx.subjectId() : null,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockRequest.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockRequest.java
index d9217d5..abcc189 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockRequest.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockRequest.java
@@ -69,6 +69,9 @@ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V>
     @GridDirectVersion(3)
     private boolean hasTransforms;
 
+    /** Sync commit flag. */
+    private boolean syncCommit;
+
     /**
      * Empty constructor required for {@link Externalizable}.
      */
@@ -110,6 +113,7 @@ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V>
         long timeout,
         int keyCnt,
         int txSize,
+        boolean syncCommit,
         @Nullable GridCacheTxKey grpLockKey,
         boolean partLock,
         @Nullable UUID subjId,
@@ -137,6 +141,7 @@ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V>
         this.topVer = topVer;
         this.implicitTx = implicitTx;
         this.implicitSingleTx = implicitSingleTx;
+        this.syncCommit = syncCommit;
         this.subjId = subjId;
         this.taskNameHash = taskNameHash;
 
@@ -193,6 +198,13 @@ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V>
     }
 
     /**
+     * @return Sync commit flag.
+     */
+    public boolean syncCommit() {
+        return syncCommit;
+    }
+
+    /**
      * @return Filter.
      */
     public IgnitePredicate<GridCacheEntry<K, V>>[] filter() {
@@ -316,6 +328,7 @@ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V>
         _clone.subjId = subjId;
         _clone.taskNameHash = taskNameHash;
         _clone.hasTransforms = hasTransforms;
+        _clone.syncCommit = syncCommit;
     }
 
     /** {@inheritDoc} */
@@ -436,6 +449,11 @@ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V>
 
                 commState.idx++;
 
+            case 34:
+                if (!commState.putBoolean(syncCommit))
+                    return false;
+
+                commState.idx++;
         }
 
         return true;
@@ -576,6 +594,13 @@ public class GridNearLockRequest<K, V> extends GridDistributedLockRequest<K, V>
 
                 commState.idx++;
 
+            case 34:
+                if (buf.remaining() < 1)
+                    return false;
+
+                syncCommit = commState.getBoolean();
+
+                commState.idx++;
         }
 
         return true;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxLocal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxLocal.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxLocal.java
index 5ff258f..2b974e9 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxLocal.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxLocal.java
@@ -96,6 +96,7 @@ public class GridNearTxLocal<K, V> extends GridDhtTxLocalAdapter<K, V> {
         GridCacheTxIsolation isolation,
         long timeout,
         boolean invalidate,
+        boolean storeEnabled,
         int txSize,
         @Nullable GridCacheTxKey grpLockKey,
         boolean partLock,
@@ -111,7 +112,7 @@ public class GridNearTxLocal<K, V> extends GridDhtTxLocalAdapter<K, V> {
             isolation,
             timeout,
             invalidate,
-            /*TODO explicit lock???*/false,
+            storeEnabled,
             txSize,
             grpLockKey,
             partLock,
@@ -191,6 +192,9 @@ public class GridNearTxLocal<K, V> extends GridDhtTxLocalAdapter<K, V> {
      * @return {@code True} if transaction is fully synchronous.
      */
     private boolean sync() {
+        if (super.syncCommit())
+            return true;
+
         for (int cacheId : activeCacheIds()) {
             if (cctx.cacheContext(cacheId).config().getWriteSynchronizationMode() == FULL_SYNC)
                 return true;
@@ -280,9 +284,7 @@ public class GridNearTxLocal<K, V> extends GridDhtTxLocalAdapter<K, V> {
                 }
             });
         }
-        else {
-            assert cacheCtx.isColocated();
-
+        else if (cacheCtx.isColocated()) {
             return cacheCtx.colocated().loadAsync(keys, /*reload*/false, /*force primary*/false, topologyVersion(),
                 CU.subjectId(this, cctx), resolveTaskName(), deserializePortable, null)
                 .chain(new C1<IgniteFuture<Map<K, V>>, Boolean>() {
@@ -305,6 +307,11 @@ public class GridNearTxLocal<K, V> extends GridDhtTxLocalAdapter<K, V> {
                     }
                 });
         }
+        else {
+            assert cacheCtx.isLocal();
+
+            return super.loadMissing(cacheCtx, async, keys, deserializePortable, c);
+        }
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/GridLocalTx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/GridLocalTx.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/GridLocalTx.java
index e769893..cebd888 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/GridLocalTx.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/GridLocalTx.java
@@ -60,7 +60,7 @@ class GridLocalTx<K, V> extends GridCacheTxLocalAdapter<K, V> {
         @Nullable UUID subjId,
         int taskNameHash
     ) {
-        super(ctx, ctx.versions().next(), implicit, implicitSingle, concurrency, isolation, timeout, false, txSize,
+        super(ctx, ctx.versions().next(), implicit, implicitSingle, concurrency, isolation, timeout, false, true, txSize,
             null, false, subjId, taskNameHash);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
index a8e1344..98a87e3 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
@@ -106,6 +106,7 @@ public class IgniteTransactionsImpl<K, V> implements IgniteTransactions {
             isolation,
             timeout,
             false,
+            true,
             txSize,
             /** group lock keys */null,
             /** partition lock */false
@@ -168,13 +169,14 @@ public class IgniteTransactionsImpl<K, V> implements IgniteTransactions {
             throw new IllegalStateException("Failed to start new transaction " +
                 "(current thread already has a transaction): " + tx);
 
-        GridCacheTxLocalEx<K, V> tx0 = cctx.tm().newTx(
+        GridCacheTxLocalAdapter<K, V> tx0 = cctx.tm().newTx(
             false,
             false,
             concurrency,
             isolation,
             timeout,
             ctx.hasFlag(INVALIDATE),
+            !ctx.hasFlag(SKIP_STORE),
             txSize,
             ctx.txKey(grpLockKey),
             partLock
@@ -182,6 +184,9 @@ public class IgniteTransactionsImpl<K, V> implements IgniteTransactions {
 
         assert tx0 != null;
 
+        if (ctx.hasFlag(SYNC_COMMIT))
+            tx0.syncCommit(true);
+
         IgniteFuture<?> lockFut = tx0.groupLockAsync(ctx, (Collection)F.asList(grpLockKey));
 
         try {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java
index 1bab28a..1a68cc7 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java
@@ -13,7 +13,6 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.resources.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.datastructures.*;
 import org.gridgain.grid.kernal.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cb0c334/modules/jta/src/main/java/org/gridgain/grid/kernal/processors/cache/jta/GridCacheJtaManager.java
----------------------------------------------------------------------
diff --git a/modules/jta/src/main/java/org/gridgain/grid/kernal/processors/cache/jta/GridCacheJtaManager.java b/modules/jta/src/main/java/org/gridgain/grid/kernal/processors/cache/jta/GridCacheJtaManager.java
index 79f439a..6044900 100644
--- a/modules/jta/src/main/java/org/gridgain/grid/kernal/processors/cache/jta/GridCacheJtaManager.java
+++ b/modules/jta/src/main/java/org/gridgain/grid/kernal/processors/cache/jta/GridCacheJtaManager.java
@@ -70,6 +70,7 @@ public class GridCacheJtaManager<K, V> extends GridCacheJtaManagerAdapter<K, V>
                                 tCfg.getDefaultTxIsolation(),
                                 tCfg.getDefaultTxTimeout(),
                                 false,
+                                true,
                                 0,
                                 /** group lock keys */null,
                                 /** partition lock */false


[02/18] incubator-ignite git commit: GG-9141 - Fixed group lock transactions.

Posted by sb...@apache.org.
GG-9141 - Fixed group lock transactions.


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

Branch: refs/heads/ignite-41
Commit: 59d9cd6168bdbd8721f4d9684344f57ee5c792d9
Parents: f60670a
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Fri Dec 12 18:48:34 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Fri Dec 12 18:48:34 2014 -0800

----------------------------------------------------------------------
 .../processors/dataload/GridDataLoaderProcessorSelfTest.java    | 5 +----
 .../org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java   | 4 ++--
 2 files changed, 3 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/59d9cd61/modules/core/src/test/java/org/gridgain/grid/kernal/processors/dataload/GridDataLoaderProcessorSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/dataload/GridDataLoaderProcessorSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/dataload/GridDataLoaderProcessorSelfTest.java
index 2f4d162..658e44b 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/dataload/GridDataLoaderProcessorSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/dataload/GridDataLoaderProcessorSelfTest.java
@@ -14,7 +14,6 @@ import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.optimized.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.eviction.fifo.*;
 import org.apache.ignite.spi.discovery.tcp.*;
@@ -303,11 +302,9 @@ public class GridDataLoaderProcessorSelfTest extends GridCommonAbstractTest {
     }
 
     /**
-     * TODO GG-4121
-     *
      * @throws Exception If failed.
      */
-    public void _testReplicatedMultiThreadedGroupLock() throws Exception {
+    public void testReplicatedMultiThreadedGroupLock() throws Exception {
         mode = REPLICATED;
         useGrpLock = true;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/59d9cd61/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
index 3bed59a..c2fe016 100644
--- a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
+++ b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java
@@ -61,7 +61,7 @@ public class GridDataGridTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheBalancingStoreSelfTest.class);
         suite.addTestSuite(GridCacheAffinityApiSelfTest.class);
         suite.addTestSuite(GridCacheStoreValueBytesSelfTest.class);
-        //suite.addTestSuite(GridDataLoaderProcessorSelfTest.class); TODO GG-9141
+        suite.addTestSuite(GridDataLoaderProcessorSelfTest.class);
         suite.addTestSuite(GridDataLoaderImplSelfTest.class);
         suite.addTestSuite(GridCacheEntryMemorySizeSelfTest.class);
         suite.addTestSuite(GridCacheClearAllSelfTest.class);
@@ -284,7 +284,7 @@ public class GridDataGridTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheReloadSelfTest.class);
 
         // Group locking.
-//        suite.addTest(GridCacheGroupLockSelfTestSuite.suite());
+        suite.addTest(GridCacheGroupLockSelfTestSuite.suite());
 
         // Full API.
         suite.addTest(GridCacheFullApiSelfTestSuite.suite());


[03/18] incubator-ignite git commit: GG-9141 - Fixing queries and enabling passing tests.

Posted by sb...@apache.org.
GG-9141 - Fixing queries and enabling passing tests.


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

Branch: refs/heads/ignite-41
Commit: ee2df1d8d23256be0b911849878c652d0eda6076
Parents: 59d9cd6
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Fri Dec 12 19:21:15 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Fri Dec 12 19:21:15 2014 -0800

----------------------------------------------------------------------
 .../grid/kernal/processors/cache/GridCacheMapEntry.java        | 4 ++--
 .../deployment/GridDeploymentMessageCountSelfTest.java         | 2 +-
 .../GridCacheOffHeapMultiThreadedUpdateAbstractSelfTest.java   | 2 +-
 .../cache/eviction/GridCacheDistributedEvictionsSelfTest.java  | 1 -
 .../cache/eviction/GridCacheEvictionTouchSelfTest.java         | 4 ++--
 .../eviction/lru/GridCacheLruNearEvictionPolicySelfTest.java   | 2 +-
 .../continuous/GridCacheContinuousQueryAbstractSelfTest.java   | 1 -
 .../gridgain/testsuites/GridCacheEvictionSelfTestSuite.java    | 2 +-
 .../org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java   | 6 +++---
 9 files changed, 11 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
index 32c1485..eb131fd 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
@@ -1212,7 +1212,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
             GridCacheMode mode = cctx.config().getCacheMode();
 
             if (mode == GridCacheMode.LOCAL || mode == GridCacheMode.REPLICATED ||
-                (tx != null && (tx.dht() || tx.colocated()) && tx.local()))
+                (tx != null && tx.local() && !isNear()))
                 cctx.continuousQueries().onEntryUpdate(this, key, val, valueBytesUnlocked(), old, oldBytes);
 
             cctx.dataStructures().onEntryUpdated(key, false);
@@ -1366,7 +1366,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
                 GridCacheMode mode = cctx.config().getCacheMode();
 
                 if (mode == GridCacheMode.LOCAL || mode == GridCacheMode.REPLICATED ||
-                    (tx != null && (tx.dht() || tx.colocated()) && tx.local()))
+                    (tx != null && tx.local() && !isNear()))
                     cctx.continuousQueries().onEntryUpdate(this, key, null, null, old, oldBytes);
 
                 cctx.dataStructures().onEntryUpdated(key, true);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/test/java/org/gridgain/grid/kernal/managers/deployment/GridDeploymentMessageCountSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/managers/deployment/GridDeploymentMessageCountSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/managers/deployment/GridDeploymentMessageCountSelfTest.java
index e16e19b..51a0e3e 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/managers/deployment/GridDeploymentMessageCountSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/managers/deployment/GridDeploymentMessageCountSelfTest.java
@@ -114,7 +114,7 @@ public class GridDeploymentMessageCountSelfTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
-    public void _testCacheValueDeploymentOnPut() throws Exception { // TODO GG-9141
+    public void testCacheValueDeploymentOnPut() throws Exception {
         ClassLoader ldr = getExternalClassLoader();
 
         Class valCls = ldr.loadClass(TEST_VALUE);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheOffHeapMultiThreadedUpdateAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheOffHeapMultiThreadedUpdateAbstractSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheOffHeapMultiThreadedUpdateAbstractSelfTest.java
index a57799b..e1f5c5a 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheOffHeapMultiThreadedUpdateAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheOffHeapMultiThreadedUpdateAbstractSelfTest.java
@@ -64,7 +64,7 @@ public abstract class GridCacheOffHeapMultiThreadedUpdateAbstractSelfTest extend
     /**
      * @throws Exception If failed.
      */
-    public void _testTransform() throws Exception { // TODO GG-9141
+    public void testTransform() throws Exception {
         testTransform(keyForNode(0));
 
         if (gridCount() > 1)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheDistributedEvictionsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheDistributedEvictionsSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheDistributedEvictionsSelfTest.java
index 0489e36..e120287 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheDistributedEvictionsSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheDistributedEvictionsSelfTest.java
@@ -11,7 +11,6 @@ package org.gridgain.grid.kernal.processors.cache.eviction;
 
 import org.apache.ignite.*;
 import org.apache.ignite.configuration.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.eviction.fifo.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionTouchSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionTouchSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionTouchSelfTest.java
index 1ca5003..5c798fe 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionTouchSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionTouchSelfTest.java
@@ -202,7 +202,7 @@ public class GridCacheEvictionTouchSelfTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
-    public void _testGroupLock() throws Exception { // TODO GG-9141
+    public void testGroupLock() throws Exception {
         plc = new GridCacheFifoEvictionPolicy<>(100);
 
         try {
@@ -248,7 +248,7 @@ public class GridCacheEvictionTouchSelfTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
-    public void _testPartitionGroupLock() throws Exception { // TODO GG-9141
+    public void testPartitionGroupLock() throws Exception {
         plc = new GridCacheFifoEvictionPolicy<>(100);
 
         try {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/lru/GridCacheLruNearEvictionPolicySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/lru/GridCacheLruNearEvictionPolicySelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/lru/GridCacheLruNearEvictionPolicySelfTest.java
index 2465b1d..3a9901e 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/lru/GridCacheLruNearEvictionPolicySelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/lru/GridCacheLruNearEvictionPolicySelfTest.java
@@ -81,7 +81,7 @@ public class GridCacheLruNearEvictionPolicySelfTest extends GridCommonAbstractTe
     /**
      * @throws Exception If failed.
      */
-    public void _testTransactionalNearEvictionMaxSize() throws Exception { // TODO GG-9141
+    public void testTransactionalNearEvictionMaxSize() throws Exception {
         atomicityMode = TRANSACTIONAL;
 
         checkNearEvictionMaxSize();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java
index 2984da1..f81cb45 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java
@@ -15,7 +15,6 @@ import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.optimized.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.query.*;
 import org.gridgain.grid.cache.query.GridCacheContinuousQueryEntry;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/core/src/test/java/org/gridgain/testsuites/GridCacheEvictionSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheEvictionSelfTestSuite.java b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheEvictionSelfTestSuite.java
index e5288b9..8b6ab21 100644
--- a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheEvictionSelfTestSuite.java
+++ b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheEvictionSelfTestSuite.java
@@ -39,7 +39,7 @@ public class GridCacheEvictionSelfTestSuite extends TestSuite {
         suite.addTest(new TestSuite(GridCacheConcurrentEvictionsSelfTest.class));
         suite.addTest(new TestSuite(GridCacheConcurrentEvictionConsistencySelfTest.class));
         suite.addTest(new TestSuite(GridCacheEvictionTouchSelfTest.class));
-//        suite.addTest(new TestSuite(GridCacheDistributedEvictionsSelfTest.class)); // TODO GG-9141
+        suite.addTest(new TestSuite(GridCacheDistributedEvictionsSelfTest.class));
         suite.addTest(new TestSuite(GridCacheEvictionLockUnlockSelfTest.class));
         suite.addTest(new TestSuite(GridCacheBatchEvictUnswapSelfTest.class));
         suite.addTest(new TestSuite(GridCachePreloadingEvictionsSelfTest.class));

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ee2df1d8/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java b/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
index bd430e3..a939fdf 100644
--- a/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
+++ b/modules/indexing/src/test/java/org/gridgain/testsuites/GridCacheQuerySelfTestSuite.java
@@ -38,8 +38,8 @@ public class GridCacheQuerySelfTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheReplicatedQuerySelfTest.class);
         suite.addTestSuite(GridCacheReplicatedQueryP2PDisabledSelfTest.class);
         suite.addTestSuite(GridCachePartitionedQuerySelfTest.class);
-//        suite.addTestSuite(GridCacheAtomicQuerySelfTest.class); // TODO GG-9141
-//        suite.addTestSuite(GridCacheAtomicNearEnabledQuerySelfTest.class); // TODO GG-9141
+        suite.addTestSuite(GridCacheAtomicQuerySelfTest.class);
+        suite.addTestSuite(GridCacheAtomicNearEnabledQuerySelfTest.class);
         suite.addTestSuite(GridCachePartitionedQueryP2PDisabledSelfTest.class);
         suite.addTestSuite(GridCachePartitionedQueryMultiThreadedSelfTest.class);
         suite.addTestSuite(GridCacheQueryIndexSelfTest.class);
@@ -71,7 +71,7 @@ public class GridCacheQuerySelfTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheContinuousQueryReplicatedP2PDisabledSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryPartitionedSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryPartitionedOnlySelfTest.class);
-//        suite.addTestSuite(GridCacheContinuousQueryPartitionedP2PDisabledSelfTest.class); // TODO GG-9141
+        suite.addTestSuite(GridCacheContinuousQueryPartitionedP2PDisabledSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryAtomicSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryAtomicNearEnabledSelfTest.class);
         suite.addTestSuite(GridCacheContinuousQueryAtomicP2PDisabledSelfTest.class);


[06/18] incubator-ignite git commit: GG-9141 - Fixed and enabled metrics tests.

Posted by sb...@apache.org.
GG-9141 - Fixed and enabled metrics tests.


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

Branch: refs/heads/ignite-41
Commit: 7964632f295e55809259195469286853083dd761
Parents: 8963d29
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:29:24 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:29:24 2014 -0800

----------------------------------------------------------------------
 .../org/apache/ignite/IgniteTransactions.java   |  10 ++
 .../gridgain/grid/cache/GridCacheTxMetrics.java |  45 --------
 .../grid/cache/GridCacheTxMetricsAdapter.java   | 108 -------------------
 .../gridgain/grid/cache/IgniteTxMetrics.java    |  45 ++++++++
 .../grid/cache/IgniteTxMetricsAdapter.java      | 107 ++++++++++++++++++
 .../cache/GridCacheSharedContext.java           |  13 ++-
 .../processors/cache/GridCacheTxManager.java    |  18 +++-
 .../near/GridNearTxPrepareFuture.java           |  38 +++++--
 .../transactions/IgniteTransactionsImpl.java    |  10 ++
 .../cache/GridCacheAbstractMetricsSelfTest.java |   9 +-
 .../GridCacheReferenceCleanupSelfTest.java      |   2 +-
 ...cheTransactionalAbstractMetricsSelfTest.java |  32 ++++--
 .../GridCacheMetricsSelfTestSuite.java          |   4 +-
 13 files changed, 258 insertions(+), 183 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java b/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
index d28954c..783dab4 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
@@ -133,4 +133,14 @@ public interface IgniteTransactions {
      *      does not have a transaction.
      */
     @Nullable public GridCacheTx tx();
+
+    /**
+     * @return Transaction metrics.
+     */
+    public IgniteTxMetrics metrics();
+
+    /**
+     * Resets transaction metrics.
+     */
+    public void resetMetrics();
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetrics.java b/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetrics.java
deleted file mode 100644
index c9c8bd3..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetrics.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/* @java.file.header */
-
-/*  _________        _____ __________________        _____
- *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
- *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
- *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
- *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
- */
-
-package org.gridgain.grid.cache;
-
-import java.io.*;
-
-/**
- * Transaction metrics, shared across all caches.
- */
-public interface GridCacheTxMetrics extends Serializable {
-    /**
-     * Gets last time transaction was committed.
-     *
-     * @return Last commit time.
-     */
-    public long commitTime();
-
-    /**
-     * Gets last time transaction was rollback.
-     *
-     * @return Last rollback time.
-     */
-    public long rollbackTime();
-
-    /**
-     * Gets total number of transaction commits.
-     *
-     * @return Number of transaction commits.
-     */
-    public int txCommits();
-
-    /**
-     * Gets total number of transaction rollbacks.
-     *
-     * @return Number of transaction rollbacks.
-     */
-    public int txRollbacks();
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetricsAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetricsAdapter.java b/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetricsAdapter.java
deleted file mode 100644
index 4fe5896..0000000
--- a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheTxMetricsAdapter.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/* @java.file.header */
-
-/*  _________        _____ __________________        _____
- *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
- *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
- *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
- *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
- */
-
-package org.gridgain.grid.cache;
-
-import org.gridgain.grid.util.tostring.*;
-import org.gridgain.grid.util.typedef.internal.*;
-
-import java.io.*;
-
-/**
- * TODO: Add class description.
- */
-public class GridCacheTxMetricsAdapter implements GridCacheTxMetrics, Externalizable {
-    /** Number of transaction commits. */
-    private volatile int txCommits;
-
-    /** Number of transaction rollbacks. */
-    private volatile int txRollbacks;
-
-    /** Last commit time. */
-    private volatile long commitTime;
-
-    /** Last rollback time. */
-    private volatile long rollbackTime;
-
-    /**
-     *
-     */
-    public GridCacheTxMetricsAdapter() {
-
-    }
-
-    /**
-     * @param m Transaction metrics to copy.
-     */
-    public GridCacheTxMetricsAdapter(GridCacheTxMetrics m) {
-        commitTime = m.commitTime();
-        rollbackTime = m.rollbackTime();
-        txCommits = m.txCommits();
-        txRollbacks = m.txRollbacks();
-    }
-
-    /** {@inheritDoc} */
-    @Override public long commitTime() {
-        return commitTime;
-    }
-
-    /** {@inheritDoc} */
-    @Override public long rollbackTime() {
-        return rollbackTime;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int txCommits() {
-        return txCommits;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int txRollbacks() {
-        return txRollbacks;
-    }
-
-    /**
-     * Transaction commit callback.
-     */
-    public void onTxCommit() {
-        commitTime = U.currentTimeMillis();
-
-        txCommits++;
-    }
-
-    /**
-     * Transaction rollback callback.
-     */
-    public void onTxRollback() {
-        rollbackTime = U.currentTimeMillis();
-
-        txRollbacks++;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeLong(commitTime);
-        out.writeLong(rollbackTime);
-        out.writeInt(txCommits);
-        out.writeInt(txRollbacks);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        commitTime = in.readLong();
-        rollbackTime = in.readLong();
-        txCommits = in.readInt();
-        txRollbacks = in.readInt();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridCacheTxMetricsAdapter.class, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetrics.java b/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetrics.java
new file mode 100644
index 0000000..1c36cfd
--- /dev/null
+++ b/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetrics.java
@@ -0,0 +1,45 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.gridgain.grid.cache;
+
+import java.io.*;
+
+/**
+ * Transaction metrics, shared across all caches.
+ */
+public interface IgniteTxMetrics extends Serializable {
+    /**
+     * Gets last time transaction was committed.
+     *
+     * @return Last commit time.
+     */
+    public long commitTime();
+
+    /**
+     * Gets last time transaction was rollback.
+     *
+     * @return Last rollback time.
+     */
+    public long rollbackTime();
+
+    /**
+     * Gets total number of transaction commits.
+     *
+     * @return Number of transaction commits.
+     */
+    public int txCommits();
+
+    /**
+     * Gets total number of transaction rollbacks.
+     *
+     * @return Number of transaction rollbacks.
+     */
+    public int txRollbacks();
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetricsAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetricsAdapter.java b/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetricsAdapter.java
new file mode 100644
index 0000000..f9214d4
--- /dev/null
+++ b/modules/core/src/main/java/org/gridgain/grid/cache/IgniteTxMetricsAdapter.java
@@ -0,0 +1,107 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.gridgain.grid.cache;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+
+/**
+ * Tx metrics adapter.
+ */
+public class IgniteTxMetricsAdapter implements IgniteTxMetrics, Externalizable {
+    /** Number of transaction commits. */
+    private volatile int txCommits;
+
+    /** Number of transaction rollbacks. */
+    private volatile int txRollbacks;
+
+    /** Last commit time. */
+    private volatile long commitTime;
+
+    /** Last rollback time. */
+    private volatile long rollbackTime;
+
+    /**
+     *
+     */
+    public IgniteTxMetricsAdapter() {
+
+    }
+
+    /**
+     * @param m Transaction metrics to copy.
+     */
+    public IgniteTxMetricsAdapter(IgniteTxMetrics m) {
+        commitTime = m.commitTime();
+        rollbackTime = m.rollbackTime();
+        txCommits = m.txCommits();
+        txRollbacks = m.txRollbacks();
+    }
+
+    /** {@inheritDoc} */
+    @Override public long commitTime() {
+        return commitTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long rollbackTime() {
+        return rollbackTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int txCommits() {
+        return txCommits;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int txRollbacks() {
+        return txRollbacks;
+    }
+
+    /**
+     * Transaction commit callback.
+     */
+    public void onTxCommit() {
+        commitTime = U.currentTimeMillis();
+
+        txCommits++;
+    }
+
+    /**
+     * Transaction rollback callback.
+     */
+    public void onTxRollback() {
+        rollbackTime = U.currentTimeMillis();
+
+        txRollbacks++;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong(commitTime);
+        out.writeLong(rollbackTime);
+        out.writeInt(txCommits);
+        out.writeInt(txRollbacks);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        commitTime = in.readLong();
+        rollbackTime = in.readLong();
+        txCommits = in.readInt();
+        txRollbacks = in.readInt();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(IgniteTxMetricsAdapter.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
index e67519b..ab23680 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheSharedContext.java
@@ -61,7 +61,7 @@ public class GridCacheSharedContext<K, V> {
     private Map<Integer, GridCacheContext<K, V>> ctxMap;
 
     /** Tx metrics. */
-    private GridCacheTxMetricsAdapter txMetrics;
+    private volatile IgniteTxMetricsAdapter txMetrics;
 
     /** Preloaders start future. */
     private IgniteFuture<Object> preloadersStartFut;
@@ -88,7 +88,7 @@ public class GridCacheSharedContext<K, V> {
         this.exchMgr = add(exchMgr);
         this.ioMgr = add(ioMgr);
 
-        txMetrics = new GridCacheTxMetricsAdapter();
+        txMetrics = new IgniteTxMetricsAdapter();
 
         ctxMap = new HashMap<>();
     }
@@ -206,11 +206,18 @@ public class GridCacheSharedContext<K, V> {
     /**
      * @return Transactional metrics adapter.
      */
-    public GridCacheTxMetricsAdapter txMetrics() {
+    public IgniteTxMetricsAdapter txMetrics() {
         return txMetrics;
     }
 
     /**
+     * Resets tx metrics.
+     */
+    public void resetTxMetrics() {
+        txMetrics = new IgniteTxMetricsAdapter();
+    }
+
+    /**
      * @return Cache transaction manager.
      */
     public GridCacheTxManager<K, V> tm() {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
index 935ae1d..cc37438 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java
@@ -1239,9 +1239,16 @@ public class GridCacheTxManager<K, V> extends GridCacheSharedManagerAdapter<K, V
             txContextReset();
 
             // 15. Update metrics.
-            if (!tx.dht() && tx.local())
+            if (!tx.dht() && tx.local()) {
                 cctx.txMetrics().onTxCommit();
 
+                for (int cacheId : tx.activeCacheIds()) {
+                    GridCacheContext<K, V> cacheCtx = cctx.cacheContext(cacheId);
+
+                    cacheCtx.cache().metrics0().onTxCommit();
+                }
+            }
+
             if (slowTxWarnTimeout > 0 && tx.local() &&
                 U.currentTimeMillis() - tx.startTime() > slowTxWarnTimeout)
                 U.warn(log, "Slow transaction detected [tx=" + tx +
@@ -1305,9 +1312,16 @@ public class GridCacheTxManager<K, V> extends GridCacheSharedManagerAdapter<K, V
             txContextReset();
 
             // 11. Update metrics.
-            if (!tx.dht() && tx.local())
+            if (!tx.dht() && tx.local()) {
                 cctx.txMetrics().onTxRollback();
 
+                for (int cacheId : tx.activeCacheIds()) {
+                    GridCacheContext<K, V> cacheCtx = cctx.cacheContext(cacheId);
+
+                    cacheCtx.cache().metrics0().onTxRollback();
+                }
+            }
+
             if (log.isDebugEnabled())
                 log.debug("Rolled back from TM: " + tx);
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxPrepareFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
index a9bcd3b..5bc5a3e 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
@@ -12,7 +12,6 @@ package org.gridgain.grid.kernal.processors.cache.distributed.near;
 import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.lang.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.managers.discovery.*;
 import org.gridgain.grid.kernal.processors.cache.*;
@@ -384,19 +383,46 @@ public final class GridNearTxPrepareFuture<K, V> extends GridCompoundIdentityFut
         if (tx.activeCacheIds().isEmpty())
             return cctx.exchange().lastTopologyFuture();
 
-        GridCacheContext<K, V> cacheCtx = cctx.cacheContext(F.first(tx.activeCacheIds()));
+        GridCacheContext<K, V> nonLocalCtx = null;
 
-        cacheCtx.topology().readLock();
+        for (int cacheId : tx.activeCacheIds()) {
+            GridCacheContext<K, V> cacheCtx = cctx.cacheContext(cacheId);
+
+            if (!cacheCtx.isLocal()) {
+                nonLocalCtx = cacheCtx;
+
+                break;
+            }
+        }
+
+        if (nonLocalCtx == null)
+            return cctx.exchange().lastTopologyFuture();
+
+        nonLocalCtx.topology().readLock();
 
-        return cacheCtx.topology().topologyVersionFuture();
+        return nonLocalCtx.topology().topologyVersionFuture();
     }
 
     /**
      * Releases topology read lock.
      */
     private void topologyReadUnlock() {
-        if (!tx.activeCacheIds().isEmpty())
-            cctx.cacheContext(F.first(tx.activeCacheIds())).topology().readUnlock();
+        if (!tx.activeCacheIds().isEmpty()) {
+            GridCacheContext<K, V> nonLocalCtx = null;
+
+            for (int cacheId : tx.activeCacheIds()) {
+                GridCacheContext<K, V> cacheCtx = cctx.cacheContext(cacheId);
+
+                if (!cacheCtx.isLocal()) {
+                    nonLocalCtx = cacheCtx;
+
+                    break;
+                }
+            }
+
+            if (nonLocalCtx != null)
+                nonLocalCtx.topology().readUnlock();
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
index 98a87e3..60eec9e 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTransactionsImpl.java
@@ -206,4 +206,14 @@ public class IgniteTransactionsImpl<K, V> implements IgniteTransactions {
     @Nullable @Override public GridCacheTx tx() {
         return cctx.tm().userTx();
     }
+
+    /** {@inheritDoc} */
+    @Override public IgniteTxMetrics metrics() {
+        return cctx.txMetrics();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void resetMetrics() {
+        cctx.resetTxMetrics();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
index 605b278..87248ef 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
@@ -12,8 +12,6 @@ package org.gridgain.grid.kernal.processors.cache;
 import org.apache.ignite.*;
 import org.gridgain.grid.cache.*;
 
-import static org.gridgain.grid.cache.GridCacheWriteSynchronizationMode.*;
-
 /**
  * Cache metrics test.
  */
@@ -22,11 +20,6 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
     private static final int KEY_CNT = 50;
 
     /** {@inheritDoc} */
-    @Override protected GridCacheWriteSynchronizationMode writeSynchronization() {
-        return FULL_SYNC;
-    }
-
-    /** {@inheritDoc} */
     @Override protected boolean swapEnabled() {
         return false;
     }
@@ -70,6 +63,8 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
             assert g.cache(null).isEmpty();
 
             g.cache(null).resetMetrics();
+
+            g.transactions().resetMetrics();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
index 80c4747..4602445 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheReferenceCleanupSelfTest.java
@@ -96,7 +96,7 @@ public class GridCacheReferenceCleanupSelfTest extends GridCommonAbstractTest {
     }
 
     /** @throws Exception If failed. */
-    public void _testAtomicLongLocal() throws Exception { // TODO GG-9141
+    public void testAtomicLongLocal() throws Exception {
         mode = GridCacheMode.LOCAL;
 
         try {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTransactionalAbstractMetricsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTransactionalAbstractMetricsSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTransactionalAbstractMetricsSelfTest.java
index 2ef09ea..5d3399c 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTransactionalAbstractMetricsSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheTransactionalAbstractMetricsSelfTest.java
@@ -210,15 +210,22 @@ public abstract class GridCacheTransactionalAbstractMetricsSelfTest extends Grid
         }
 
         for (int i = 0; i < gridCount(); i++) {
-            // TODO GG-9141
-            GridCacheTxMetrics metrics = null; //grid(i).cache(null).metrics();
+            IgniteTxMetrics metrics = grid(i).transactions().metrics();
+            GridCacheMetrics cacheMetrics = grid(i).cache(null).metrics();
 
-            if (i == 0)
+            if (i == 0) {
                 assertEquals(TX_CNT, metrics.txCommits());
-            else
+
+                if (put)
+                    assertEquals(TX_CNT, cacheMetrics.txCommits());
+            }
+            else {
                 assertEquals(0, metrics.txCommits());
+                assertEquals(0, cacheMetrics.txCommits());
+            }
 
             assertEquals(0, metrics.txRollbacks());
+            assertEquals(0, cacheMetrics.txRollbacks());
         }
     }
 
@@ -233,7 +240,7 @@ public abstract class GridCacheTransactionalAbstractMetricsSelfTest extends Grid
         GridCache<Integer, Integer> cache = grid(0).cache(null);
 
         for (int i = 0; i < TX_CNT; i++) {
-            GridCacheTx tx = cache.txStart(concurrency ,isolation);
+            GridCacheTx tx = cache.txStart(concurrency, isolation);
 
             if (put)
                 for (int j = 0; j < keyCount(); j++)
@@ -243,15 +250,22 @@ public abstract class GridCacheTransactionalAbstractMetricsSelfTest extends Grid
         }
 
         for (int i = 0; i < gridCount(); i++) {
-            // TODO GG-9141
-            GridCacheTxMetrics metrics = null;//grid(i).cache(null).metrics();
+            IgniteTxMetrics metrics = grid(i).transactions().metrics();
+            GridCacheMetrics cacheMetrics = grid(i).cache(null).metrics();
 
             assertEquals(0, metrics.txCommits());
+            assertEquals(0, cacheMetrics.txCommits());
 
-            if (i == 0)
+            if (i == 0) {
                 assertEquals(TX_CNT, metrics.txRollbacks());
-            else
+
+                if (put)
+                    assertEquals(TX_CNT, cacheMetrics.txRollbacks());
+            }
+            else {
                 assertEquals(0, metrics.txRollbacks());
+                assertEquals(0, cacheMetrics.txRollbacks());
+            }
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7964632f/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
index 178465a..6a21e85 100644
--- a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
+++ b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
@@ -27,8 +27,8 @@ public class GridCacheMetricsSelfTestSuite extends TestSuite {
 
 //        suite.addTest(new TestSuite(GridCacheLocalMetricsSelfTest.class));
         suite.addTest(new TestSuite(GridCacheNearMetricsSelfTest.class));
-//        suite.addTest(new TestSuite(GridCacheReplicatedMetricsSelfTest.class));
-//        suite.addTest(new TestSuite(GridCachePartitionedMetricsSelfTest.class));
+        suite.addTest(new TestSuite(GridCacheReplicatedMetricsSelfTest.class));
+        suite.addTest(new TestSuite(GridCachePartitionedMetricsSelfTest.class));
 
         // Atomic cache.
         suite.addTest(new TestSuite(GridCacheAtomicLocalMetricsSelfTest.class));


[13/18] incubator-ignite git commit: GG-9141 - Enabling passing tests.

Posted by sb...@apache.org.
GG-9141 - Enabling passing tests.


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

Branch: refs/heads/ignite-41
Commit: 2ad4e6d1a405b68221e096d315fc98244e459fcf
Parents: a94ce93
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:50:51 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:50:51 2014 -0800

----------------------------------------------------------------------
 .../testsuites/GridCacheDataStructuresSelfTestSuite.java       | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2ad4e6d1/modules/core/src/test/java/org/gridgain/testsuites/GridCacheDataStructuresSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheDataStructuresSelfTestSuite.java b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheDataStructuresSelfTestSuite.java
index c7f43b9..9c1ce37 100644
--- a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheDataStructuresSelfTestSuite.java
+++ b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheDataStructuresSelfTestSuite.java
@@ -35,7 +35,7 @@ public class GridCacheDataStructuresSelfTestSuite extends TestSuite {
 //        suite.addTest(new TestSuite(GridCachePartitionedQueueFailoverDataConsistencySelfTest.class)); // TODO GG-9141
         suite.addTest(new TestSuite(GridCachePartitionedAtomicQueueFailoverDataConsistencySelfTest.class));
 
-//        suite.addTest(new TestSuite(GridCacheLocalSequenceApiSelfTest.class)); // TODO GG-9141
+        suite.addTest(new TestSuite(GridCacheLocalSequenceApiSelfTest.class));
         suite.addTest(new TestSuite(GridCacheLocalSetSelfTest.class));
         suite.addTest(new TestSuite(GridCacheLocalAtomicSetSelfTest.class));
         suite.addTest(new TestSuite(GridCacheLocalQueueApiSelfTest.class));
@@ -76,8 +76,8 @@ public class GridCacheDataStructuresSelfTestSuite extends TestSuite {
         // TODO: GG-4807 Uncomment when fix
         // suite.addTest(new TestSuite(GridCacheQueueMultiNodeConsistencySelfTest.class));
 
-//        suite.addTest(new TestSuite(GridCacheCountDownLatchSelfTest.class)); // TODO GG-9141
-//        suite.addTest(new TestSuite(GridCacheAtomicLongApiSelfTest.class)); // TODO GG-9141
+        suite.addTest(new TestSuite(GridCacheCountDownLatchSelfTest.class));
+        suite.addTest(new TestSuite(GridCacheAtomicLongApiSelfTest.class));
 
         suite.addTest(new TestSuite(GridCachePartitionedAtomicSequenceMultiThreadedTest.class));
 


[15/18] incubator-ignite git commit: GG-9141 - Fixed exchange future.

Posted by sb...@apache.org.
GG-9141 - Fixed exchange future.


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

Branch: refs/heads/ignite-41
Commit: cbd30af3032f123b458437526ef4e5cef1512542
Parents: fa69fe8
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Mon Dec 15 16:27:32 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Mon Dec 15 16:27:32 2014 -0800

----------------------------------------------------------------------
 .../processors/cache/GridCacheStoreManager.java    | 11 +++--------
 .../preloader/GridDhtPartitionsExchangeFuture.java |  6 ++++--
 .../GridCacheDhtPreloadMultiThreadedSelfTest.java  | 17 +++++------------
 3 files changed, 12 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbd30af3/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheStoreManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheStoreManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheStoreManager.java
index f8b7623..e80f8b7 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheStoreManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheStoreManager.java
@@ -167,8 +167,7 @@ public class GridCacheStoreManager<K, V> extends GridCacheManagerAdapter<K, V> {
      * @return Whether DHT transaction can write to store from DHT.
      */
     public boolean writeToStoreFromDht() {
-        // TODO GG-9141
-        return false;
+        return cctx.config().isWriteBehindEnabled() || locStore;
     }
 
     /**
@@ -193,9 +192,7 @@ public class GridCacheStoreManager<K, V> extends GridCacheManagerAdapter<K, V> {
                     return true;
                 }
 
-                Collection<? extends K> keys0;
-
-                keys0 = convertPortable ?
+                Collection<? extends K> keys0 = convertPortable ?
                     F.viewReadOnly(keys, new C1<K, K>() {
                         @Override public K apply(K k) {
                             return (K)cctx.unwrapPortableIfNeeded(k, false);
@@ -443,9 +440,7 @@ public class GridCacheStoreManager<K, V> extends GridCacheManagerAdapter<K, V> {
         }
 
         if (store != null) {
-            Collection<? extends K> keys0;
-
-            keys0 = convertPortable ?
+            Collection<? extends K> keys0 = convertPortable ?
                 F.viewReadOnly(keys, new C1<K, K>() {
                     @Override public K apply(K k) {
                         return (K)cctx.unwrapPortableIfNeeded(k, false);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbd30af3/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
index 0a95411..65b4522 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
@@ -912,8 +912,10 @@ public class GridDhtPartitionsExchangeFuture<K, V> extends GridFutureAdapter<Lon
                                         // If local node is just joining.
                                         if (exchId.nodeId().equals(cctx.localNodeId())) {
                                             try {
-                                                for (GridCacheContext<K, V> cacheCtx : cctx.cacheContexts())
-                                                    cacheCtx.topology().beforeExchange(exchId);
+                                                for (GridCacheContext<K, V> cacheCtx : cctx.cacheContexts()) {
+                                                    if (!cacheCtx.isLocal())
+                                                        cacheCtx.topology().beforeExchange(exchId);
+                                                }
                                             }
                                             catch (IgniteCheckedException e) {
                                                 onDone(e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbd30af3/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java
index 5342bc8..3277c68 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java
@@ -32,9 +32,6 @@ public class GridCacheDhtPreloadMultiThreadedSelfTest extends GridCommonAbstract
     /** IP finder. */
     private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
 
-    /** */
-    private boolean cacheEnabled = true;
-
     /**
      * Creates new test.
      */
@@ -126,7 +123,7 @@ public class GridCacheDhtPreloadMultiThreadedSelfTest extends GridCommonAbstract
     /**
      * @throws Exception If failed.
      */
-    public void _testConcurrentNodesStartStop() throws Exception { // TODO GG-9141
+    public void testConcurrentNodesStartStop() throws Exception {
         try {
             multithreadedAsync(
                 new Callable<Object>() {
@@ -156,16 +153,12 @@ public class GridCacheDhtPreloadMultiThreadedSelfTest extends GridCommonAbstract
 
         cfg.setGridName(gridName);
 
-        if (cacheEnabled) {
-            for (GridCacheConfiguration cCfg : cfg.getCacheConfiguration()) {
-                if (cCfg.getCacheMode() == GridCacheMode.PARTITIONED) {
-                    cCfg.setAffinity(new GridCacheConsistentHashAffinityFunction(2048, null));
-                    cCfg.setBackups(1);
-                }
+        for (GridCacheConfiguration cCfg : cfg.getCacheConfiguration()) {
+            if (cCfg.getCacheMode() == GridCacheMode.PARTITIONED) {
+                cCfg.setAffinity(new GridCacheConsistentHashAffinityFunction(2048, null));
+                cCfg.setBackups(1);
             }
         }
-        else
-            cfg.setCacheConfiguration();
 
         ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(IP_FINDER);
 


[11/18] incubator-ignite git commit: GG-9141 - Enabling passing tests.

Posted by sb...@apache.org.
GG-9141 - Enabling passing tests.


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

Branch: refs/heads/ignite-41
Commit: 806a44d1ab2dae571f7817741fead3e858b48f67
Parents: ec62ccc
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:47:17 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:47:17 2014 -0800

----------------------------------------------------------------------
 .../rest/handlers/cache/GridCacheCommandHandlerSelfTest.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/806a44d1/modules/core/src/test/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java
index cafff4e..c0dde12 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java
@@ -118,7 +118,7 @@ public class GridCacheCommandHandlerSelfTest extends GridCommonAbstractTest {
      * @throws Exception In case of any exception.
      */
     @SuppressWarnings("NullableProblems")
-    public void _testAppendPrepend() throws Exception { // TODO GG-9141
+    public void testAppendPrepend() throws Exception {
         assertEquals("as" + "df", testAppend("as", "df", true));
         assertEquals("df" + "as", testAppend("as", "df", false));
 


[16/18] incubator-ignite git commit: GG-9141 - Fixing failover tests.

Posted by sb...@apache.org.
GG-9141 - Fixing failover tests.


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

Branch: refs/heads/ignite-41
Commit: 03c17b8f3caaa45fd3554a5a306d6e431d74e0ca
Parents: cbd30af
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Mon Dec 15 18:48:04 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Mon Dec 15 18:48:04 2014 -0800

----------------------------------------------------------------------
 .../processors/cache/GridCachePartitionExchangeManager.java   | 7 ++++++-
 .../grid/kernal/processors/cache/GridCacheTxLocalAdapter.java | 2 +-
 .../testsuites/bamboo/GridCacheFailoverTestSuite.java         | 4 ----
 3 files changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/03c17b8f/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
index b0c319d..201b960 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCachePartitionExchangeManager.java
@@ -470,6 +470,9 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
                 m.addFullPartitionsMap(cacheCtx.cacheId(), cacheCtx.topology().partitionMap(true));
         }
 
+        for (GridClientPartitionTopology<K, V> top : cctx.exchange().clientTopologies())
+            m.addFullPartitionsMap(top.cacheId(), top.partitionMap(true));
+
         if (log.isDebugEnabled())
             log.debug("Sending all partitions [nodeIds=" + U.nodeIds(nodes) + ", msg=" + m + ']');
 
@@ -587,7 +590,9 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
                     if (!cacheCtx.isLocal()) {
                         GridDhtPartitionTopology<K, V> top = cacheCtx.topology();
 
-                        updated |= top.update(null, msg.partitions().get(cacheCtx.cacheId())) != null;
+                        GridDhtPartitionFullMap partMap = msg.partitions().get(cacheCtx.cacheId());
+
+                        updated |= top.update(null, partMap) != null;
                     }
                 }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/03c17b8f/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
index b7fa4b2..abb9fef 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
@@ -2093,7 +2093,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                     if (log.isDebugEnabled())
                         log.debug("Got removed entry in putAllAsync method (will retry): " + cached);
 
-                    txEntry.cached(entryEx(cacheCtx, txEntry.txKey()), txEntry.keyBytes());
+                    txEntry.cached(entryEx(cached.context(), txEntry.txKey()), txEntry.keyBytes());
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/03c17b8f/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridCacheFailoverTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridCacheFailoverTestSuite.java b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridCacheFailoverTestSuite.java
index 65c6d07..7584e00 100644
--- a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridCacheFailoverTestSuite.java
+++ b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridCacheFailoverTestSuite.java
@@ -26,10 +26,6 @@ public class GridCacheFailoverTestSuite extends TestSuite {
     public static TestSuite suite() throws Exception {
         TestSuite suite = new TestSuite("Gridgain Cache Failover Test Suite");
 
-        // TODO GG-9141
-        if (true)
-            return suite;
-
         suite.addTestSuite(GridCacheAtomicInvalidPartitionHandlingSelfTest.class);
 
         // Group lock failover.


[18/18] incubator-ignite git commit: # ignite-41

Posted by sb...@apache.org.
# ignite-41


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

Branch: refs/heads/ignite-41
Commit: 688a2e71509b9b3cebd148045d7388386e5ce0fb
Parents: e85a938
Author: sboikov <sb...@gridgain.com>
Authored: Tue Dec 16 13:06:26 2014 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Dec 16 18:11:24 2014 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheAdapter.java      |   3 +-
 .../processors/cache/GridCacheIoManager.java    |   2 +
 .../processors/cache/GridCacheMapEntry.java     |  31 +-
 .../cache/GridCacheTxLocalAdapter.java          |  58 +++-
 .../cache/GridCacheUpdateAtomicResult.java      |   2 +-
 .../distributed/GridCacheExpiryPolicy.java      |  74 ++++-
 .../GridDistributedTxRemoteAdapter.java         |   2 +
 .../dht/atomic/GridDhtAtomicCache.java          |  79 +++--
 .../dht/atomic/GridDhtAtomicUpdateFuture.java   |  30 +-
 .../dht/atomic/GridDhtAtomicUpdateRequest.java  | 172 ++++++----
 .../atomic/GridNearAtomicUpdateResponse.java    | 111 ++++++-
 .../distributed/near/GridNearAtomicCache.java   |  35 ++-
 .../expiry/IgniteCacheExpiryPolicyTest.java     | 310 +++++++++++++++++--
 13 files changed, 749 insertions(+), 160 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
index f1f4436..39b7338 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
@@ -2043,8 +2043,7 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im
                 return tx.putAllAsync(ctx, F.t(key, val), true, cached, ttl, filter).get().value();
             }
 
-            @Override
-            public String toString() {
+            @Override public String toString() {
                 return "put [key=" + key + ", val=" + val + ", filter=" + Arrays.toString(filter) + ']';
             }
         }));

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
index a222c32..a50e461 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
@@ -200,6 +200,8 @@ public class GridCacheIoManager<K, V> extends GridCacheSharedManagerAdapter<K, V
 
             unmarshall(nodeId, cacheMsg);
 
+            log.info("Message: " + cacheMsg);
+
             if (cacheMsg.allowForStartup())
                 processMessage(nodeId, cacheMsg, c);
             else {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
index 6483c8a..2c377e7 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
@@ -151,7 +151,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
      */
     protected GridCacheMapEntry(GridCacheContext<K, V> cctx, K key, int hash, V val,
         GridCacheMapEntry<K, V> next, long ttl, int hdrId) {
-        log = U.logger(cctx.kernalContext(), logRef, this);
+        log = U.logger(cctx.kernalContext(), logRef, GridCacheMapEntry.class);
 
         if (cctx.portableEnabled())
             key = (K)cctx.kernalContext().portable().detachPortable(key);
@@ -1112,6 +1112,8 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
         @Nullable UUID subjId,
         String taskName
     ) throws IgniteCheckedException, GridCacheEntryRemovedException {
+        log.info("Inner set " + key + " " + val + " " + ttl);
+
         V old;
 
         boolean valid = valid(tx != null ? tx.topologyVersion() : topVer);
@@ -1630,7 +1632,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
         return toTtl(duration);
     }
 
-    private static long toTtl(Duration duration) {
+    public static long toTtl(Duration duration) {
         if (duration == null)
             return -1;
 
@@ -1685,7 +1687,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
 
         GridDrResolveResult<V> drRes = null;
 
-        long newTtl = 0L;
+        long newTtl = -1L;
         long newExpireTime = 0L;
         long newDrExpireTime = -1L; // Explicit DR expire time which possibly will be sent to DHT node.
 
@@ -1869,12 +1871,14 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
                     }
                 }
 
+                long ttl0 = newTtl;
+
                 if (drRes == null) {
                     // Calculate TTL and expire time for local update.
                     if (drTtl >= 0L) {
                         assert drExpireTime >= 0L;
 
-                        newTtl = drTtl;
+                        ttl0 = drTtl;
                         newExpireTime = drExpireTime;
                     }
                     else {
@@ -1902,10 +1906,9 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
                         else
                             newTtl = -1L;
 
-                        if (newTtl < 0)
-                            newTtl = ttlExtras();
+                        ttl0 = newTtl < 0 ? ttlExtras() : newTtl;
 
-                        newExpireTime = toExpireTime(newTtl);
+                        newExpireTime = toExpireTime(ttl0);
                     }
                 }
 
@@ -1937,7 +1940,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
                 // in load methods without actually holding entry lock.
                 updateIndex(updated, valBytes, newExpireTime, newVer, old);
 
-                update(updated, valBytes, newExpireTime, newTtl, newVer);
+                update(updated, valBytes, newExpireTime, ttl0, newVer);
 
                 drReplicate(drType, updated, valBytes, newVer);
 
@@ -2048,7 +2051,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
                 res = hadVal;
 
                 // Do not propagate zeroed TTL and expire time.
-                newTtl = 0L;
+                newTtl = -1L;
                 newDrExpireTime = -1L;
             }
 
@@ -2500,7 +2503,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
      * @param ttl Time to live.
      * @return Expiration time.
      */
-    protected long toExpireTime(long ttl) {
+    public static long toExpireTime(long ttl) {
         long expireTime = ttl == 0 ? 0 : U.currentTimeMillis() + ttl;
 
         // Account for overflow.
@@ -2953,14 +2956,6 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
     }
 
     /** {@inheritDoc} */
-    /*
-    @Override public synchronized GridDrEntry<K, V> drEntry() throws IgniteCheckedException {
-        return new GridDrPlainEntry<>(key, isStartVersion() ? unswap(true, true) : rawGetOrUnmarshalUnlocked(false),
-            ttlExtras(), expireTimeExtras(), ver.drVersion());
-    }
-    */
-
-    /** {@inheritDoc} */
     @Override public synchronized V rawPut(V val, long ttl) {
         V old = this.val;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
index abb9fef..c6888f1 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
@@ -25,6 +25,7 @@ import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.jetbrains.annotations.*;
 
+import javax.cache.expiry.*;
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.atomic.*;
@@ -585,6 +586,8 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
             addGroupTxMapping(writeSet());
 
         if (!empty) {
+            log.info("User commit");
+
             // We are holding transaction-level locks for entries here, so we can get next write version.
             writeVersion(cctx.versions().next(topologyVersion()));
 
@@ -649,6 +652,19 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                                     V val = res.get2();
                                     byte[] valBytes = res.get3();
 
+                                    if (op == CREATE || op == UPDATE && txEntry.drExpireTime() == -1L) {
+                                        ExpiryPolicy expiry = cacheCtx.expiry();
+
+                                        if (expiry != null) {
+                                            Duration duration = cached.hasValue() ?
+                                                expiry.getExpiryForUpdate() : expiry.getExpiryForCreation();
+
+                                            txEntry.ttl(GridCacheMapEntry.toTtl(duration));
+
+                                            log.info("Calculated expiry (userCommit), update=" + cached.hasValue() + ", ttl=" + txEntry.ttl() + ", detached=" + cached.detached());
+                                        }
+                                    }
+
                                     // Preserve TTL if needed.
                                     if (txEntry.ttl() < 0)
                                         txEntry.ttl(cached.ttl());
@@ -1154,7 +1170,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                             missed.put(key, ver);
 
                         if (!readCommitted()) {
-                            txEntry = addEntry(READ, val, null, entry, -1, filter, true, -1L, -1L, null);
+                            txEntry = addEntry(READ, val, null, entry, null, filter, true, -1L, -1L, null);
 
                             if (groupLock())
                                 txEntry.groupLockEntry(true);
@@ -1179,7 +1195,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                             // Value for which failure occurred.
                             V val = e.<V>value();
 
-                            txEntry = addEntry(READ, val, null, entry, -1, CU.<K, V>empty(), false, -1L, -1L, null);
+                            txEntry = addEntry(READ, val, null, entry, null, CU.<K, V>empty(), false, -1L, -1L, null);
 
                             // Mark as checked immediately for non-pessimistic.
                             if (val != null && !pessimistic())
@@ -1698,7 +1714,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
      *
      * @param keys Keys to enlist.
      * @param cached Cached entry.
-     * @param ttl Time to live for entry. If negative, leave unchanged.
+     * @param expiry Expiry policy for entry. If {@code null}, leave unchanged.
      * @param implicit Implicit flag.
      * @param lookup Value lookup map ({@code null} for remove).
      * @param transformMap Map with transform closures if this is a transform operation.
@@ -1715,7 +1731,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
         GridCacheContext<K, V> cacheCtx,
         Collection<? extends K> keys,
         @Nullable GridCacheEntryEx<K, V> cached,
-        long ttl,
+        @Nullable ExpiryPolicy expiry,
         boolean implicit,
         @Nullable Map<? extends K, ? extends V> lookup,
         @Nullable Map<? extends K, ? extends IgniteClosure<V, V>> transformMap,
@@ -1856,7 +1872,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                                 if (!readCommitted() && old != null) {
                                     // Enlist failed filters as reads for non-read-committed mode,
                                     // so future ops will get the same values.
-                                    txEntry = addEntry(READ, old, null, entry, -1, CU.<K, V>empty(), false, -1L, -1L,
+                                    txEntry = addEntry(READ, old, null, entry, null, CU.<K, V>empty(), false, -1L, -1L,
                                         null);
 
                                     txEntry.markValid();
@@ -1869,7 +1885,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                             }
 
                             txEntry = addEntry(lockOnly ? NOOP : rmv ? DELETE : transformClo != null ? TRANSFORM :
-                                old != null ? UPDATE : CREATE, val, transformClo, entry, ttl, filter, true, drTtl,
+                                old != null ? UPDATE : CREATE, val, transformClo, entry, expiry, filter, true, drTtl,
                                 drExpireTime, drVer);
 
                             if (!implicit() && readCommitted())
@@ -1956,7 +1972,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                         }
 
                         txEntry = addEntry(rmv ? DELETE : transformClo != null ? TRANSFORM :
-                            v != null ? UPDATE : CREATE, val, transformClo, entry, ttl, filter, true, drTtl,
+                            v != null ? UPDATE : CREATE, val, transformClo, entry, expiry, filter, true, drTtl,
                             drExpireTime, drVer);
 
                         enlisted.add(key);
@@ -2219,11 +2235,13 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
 
             Collection<K> enlisted = new LinkedList<>();
 
+            GridCacheProjectionImpl<K, V> prj = cacheCtx.projectionPerCall();
+
             final IgniteFuture<Set<K>> loadFut = enlistWrite(
                 cacheCtx,
                 keySet,
                 cached,
-                ttl,
+                prj != null ? prj.expiry() : null,
                 implicit,
                 map0,
                 transformMap0,
@@ -2404,7 +2422,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                 cacheCtx,
                 keys0,
                 /** cached entry */null,
-                /** ttl */-1,
+                /** expiry */null,
                 implicit,
                 /** lookup map */null,
                 /** transform map */null,
@@ -2555,7 +2573,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                 cacheCtx,
                 keys,
                 /** cached entry */null,
-                /** ttl - leave unchanged */-1,
+                /** expiry - leave unchanged */null,
                 /** implicit */false,
                 /** lookup map */null,
                 /** transform map */null,
@@ -2652,7 +2670,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
     /**
      * @param op Cache operation.
      * @param val Value.
-     * @param ttl Time to leave to set to tx entry. If {@code null}, leave unchanged.
+     * @param expiryPlc Expiry policy, if {@code null}, leave unchanged.
      * @param transformClos Transform closure.
      * @param entry Cache entry.
      * @param filter Filter.
@@ -2662,10 +2680,16 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
      * @param drVer DR version.
      * @return Transaction entry.
      */
-    protected final GridCacheTxEntry<K, V> addEntry(GridCacheOperation op, @Nullable V val,
-        @Nullable IgniteClosure<V, V> transformClos, GridCacheEntryEx<K, V> entry, long ttl,
-        IgnitePredicate<GridCacheEntry<K, V>>[] filter, boolean filtersSet, long drTtl,
-        long drExpireTime, @Nullable GridCacheVersion drVer) {
+    protected final GridCacheTxEntry<K, V> addEntry(GridCacheOperation op,
+        @Nullable V val,
+        @Nullable IgniteClosure<V, V> transformClos,
+        GridCacheEntryEx<K, V> entry,
+        @Nullable ExpiryPolicy expiryPlc, // TODO IGNITE-41
+        IgnitePredicate<GridCacheEntry<K, V>>[] filter,
+        boolean filtersSet,
+        long drTtl,
+        long drExpireTime,
+        @Nullable GridCacheVersion drVer) {
         GridCacheTxKey<K> key = entry.txKey();
 
         checkInternal(key);
@@ -2706,6 +2730,8 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
             old.cached(entry, old.keyBytes());
             old.filters(filter);
 
+            long ttl = -1L;
+
             // Update ttl if specified.
             if (drTtl >= 0L) {
                 assert drExpireTime >= 0L;
@@ -2721,6 +2747,8 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                 log.debug("Updated transaction entry: " + txEntry);
         }
         else {
+            long ttl = -1L;
+
             if (drTtl >= 0L)
                 ttl = drTtl;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUpdateAtomicResult.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUpdateAtomicResult.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUpdateAtomicResult.java
index 048df15..43ca819 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUpdateAtomicResult.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUpdateAtomicResult.java
@@ -98,7 +98,7 @@ public class GridCacheUpdateAtomicResult<K, V> {
     }
 
     /**
-     * @return New TTL.
+     * @return {@code -1} if TTL did not change, otherwise new TTL.
      */
     public long newTtl() {
         return newTtl;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheExpiryPolicy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheExpiryPolicy.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheExpiryPolicy.java
index f7fe27a..3a77884 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheExpiryPolicy.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheExpiryPolicy.java
@@ -9,6 +9,9 @@
 
 package org.gridgain.grid.kernal.processors.cache.distributed;
 
+import org.gridgain.grid.util.typedef.internal.*;
+import org.jetbrains.annotations.*;
+
 import javax.cache.expiry.*;
 import java.io.*;
 import java.util.concurrent.*;
@@ -27,11 +30,24 @@ public class GridCacheExpiryPolicy implements ExpiryPolicy, Externalizable {
     private static final byte UPDATE_TTL_MASK = 0x02;
 
     /** */
+    private static final byte ACCESS_TTL_MASK = 0x04;
+
+    /** */
     private Duration forCreate;
 
     /** */
     private Duration forUpdate;
 
+    /** */
+    private Duration forAccess;
+
+    /**
+     * Required by {@link Externalizable}.
+     */
+    public GridCacheExpiryPolicy() {
+        // No-op.
+    }
+
     /**
      * @param plc Expiry policy.
      */
@@ -48,9 +64,7 @@ public class GridCacheExpiryPolicy implements ExpiryPolicy, Externalizable {
 
     /** {@inheritDoc} */
     @Override public Duration getExpiryForAccess() {
-        assert false;
-
-        return null;
+        return forAccess;
     }
 
     /** {@inheritDoc} */
@@ -58,6 +72,38 @@ public class GridCacheExpiryPolicy implements ExpiryPolicy, Externalizable {
         return forUpdate;
     }
 
+    /**
+     * @param out Output stream.
+     * @param duration Duration.
+     * @throws IOException
+     */
+    private void writeDuration(ObjectOutput out, @Nullable Duration duration) throws IOException {
+        if (duration != null) {
+            if (duration.isEternal())
+                out.writeLong(0);
+            else if (duration.getDurationAmount() == 0)
+                out.writeLong(1);
+            else
+                out.writeLong(duration.getTimeUnit().toMillis(duration.getDurationAmount()));
+        }
+    }
+
+    /**
+     * @param in Input stream.
+     * @return Duration.
+     * @throws IOException
+     */
+    private Duration readDuration(ObjectInput in) throws IOException {
+        long ttl = in.readLong();
+
+        assert ttl >= 0;
+
+        if (ttl == 0)
+            return Duration.ETERNAL;
+
+        return new Duration(TimeUnit.MILLISECONDS, ttl);
+    }
+
     /** {@inheritDoc} */
     @Override public void writeExternal(ObjectOutput out) throws IOException {
         byte flags = 0;
@@ -72,7 +118,18 @@ public class GridCacheExpiryPolicy implements ExpiryPolicy, Externalizable {
         if (update != null)
             flags |= UPDATE_TTL_MASK;
 
+        Duration access = plc.getExpiryForAccess();
+
+        if (access != null)
+            flags |= ACCESS_TTL_MASK;
+
         out.writeByte(flags);
+
+        writeDuration(out, create);
+
+        writeDuration(out, update);
+
+        writeDuration(out, access);
     }
 
     /** {@inheritDoc} */
@@ -80,9 +137,16 @@ public class GridCacheExpiryPolicy implements ExpiryPolicy, Externalizable {
         byte flags = in.readByte();
 
         if ((flags & CREATE_TTL_MASK) != 0)
-            forCreate = new Duration(TimeUnit.MILLISECONDS, in.readLong());
+            forCreate = readDuration(in);
 
         if ((flags & UPDATE_TTL_MASK) != 0)
-            forUpdate = new Duration(TimeUnit.MILLISECONDS, in.readLong());
+            forUpdate = readDuration(in);
+
+        if ((flags & ACCESS_TTL_MASK) != 0)
+            forAccess = readDuration(in);
+    }
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(GridCacheExpiryPolicy.class, this);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
index 3cd3e2d..3b34552 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
@@ -446,6 +446,8 @@ public class GridDistributedTxRemoteAdapter<K, V> extends GridCacheTxAdapter<K,
     @SuppressWarnings({"CatchGenericClass"})
     private void commitIfLocked() throws IgniteCheckedException {
         if (state() == COMMITTING) {
+            log.info("commitIfLocked");
+
             for (GridCacheTxEntry<K, V> txEntry : writeMap.values()) {
                 assert txEntry != null : "Missing transaction entry for tx: " + this;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index fd2d98d..64c95c3 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -1355,6 +1355,8 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                     req.subjectId(),
                     taskName);
 
+                assert updRes.newTtl() == -1L || (expiry != null || updRes.drExpireTime() >= 0);
+
                 if (dhtFut == null && !F.isEmpty(filteredReaders)) {
                     dhtFut = createDhtFuture(ver, req, res, completionCb, true);
 
@@ -1366,7 +1368,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                         GridDrResolveResult<V> ctx = updRes.drResolveResult();
 
                         long ttl = updRes.newTtl();
-                        long drExpireTime = updRes.drExpireTime();
+                        long expireTime = updRes.drExpireTime();
 
                         if (ctx == null)
                             newDrVer = null;
@@ -1380,19 +1382,24 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                         if (req.forceTransformBackups() && op == TRANSFORM)
                             transformC = (IgniteClosure<V, V>)writeVal;
 
-                        if (!readersOnly)
+                        if (!readersOnly) {
                             dhtFut.addWriteEntry(entry,
                                 updRes.newValue(),
                                 newValBytes,
                                 transformC,
-                                drExpireTime >= 0L ? ttl : -1L,
-                                drExpireTime,
-                                newDrVer,
-                                drExpireTime < 0L ? req.expiry() : null);
+                                updRes.newTtl(),
+                                expireTime,
+                                newDrVer);
+                        }
 
                         if (!F.isEmpty(filteredReaders))
-                            dhtFut.addNearWriteEntries(filteredReaders, entry, updRes.newValue(), newValBytes,
-                                transformC, drExpireTime < 0L ? req.expiry() : null);
+                            dhtFut.addNearWriteEntries(filteredReaders,
+                                entry,
+                                updRes.newValue(),
+                                newValBytes,
+                                transformC,
+                                ttl,
+                                expireTime);
                     }
                     else {
                         // TODO IGNITE-41 ttl could be changed.
@@ -1408,14 +1415,21 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                         if (!ctx.affinity().belongs(node, entry.partition(), topVer)) {
                             GridDrResolveResult<V> ctx = updRes.drResolveResult();
 
-                            // TODO IGNITE-41 dr ttl for near cache.
+                            long ttl = updRes.newTtl();
+                            long expireTime = updRes.drExpireTime();
 
                             if (ctx != null && ctx.isMerge())
                                 newValBytes = null;
 
                             // If put the same value as in request then do not need to send it back.
                             if (op == TRANSFORM || writeVal != updRes.newValue())
-                                res.addNearValue(i, updRes.newValue(), newValBytes);
+                                res.addNearValue(i,
+                                    updRes.newValue(),
+                                    newValBytes,
+                                    ttl,
+                                    expireTime);
+                            else
+                                res.addNearTtl(i, ttl, expireTime);
 
                             if (updRes.newValue() != null || newValBytes != null) {
                                 IgniteFuture<Boolean> f = entry.addReader(node.id(), req.messageId(), topVer);
@@ -1596,6 +1610,8 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                         req.subjectId(),
                         taskName);
 
+                    assert updRes.newTtl() == -1L || expiry != null;
+
                     if (intercept) {
                         if (op == UPDATE)
                             ctx.config().getInterceptor().onAfterPut(entry.key(), updRes.newValue());
@@ -1624,25 +1640,42 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                         IgniteClosure<V, V> transformC = transformMap == null ? null : transformMap.get(entry.key());
 
                         if (!batchRes.readersOnly())
-                            dhtFut.addWriteEntry(entry, writeVal, valBytes, transformC, -1, -1, null, req.expiry());
+                            dhtFut.addWriteEntry(entry,
+                                writeVal,
+                                valBytes,
+                                transformC,
+                                updRes.newTtl(),
+                                -1,
+                                null);
 
                         if (!F.isEmpty(filteredReaders))
-                            dhtFut.addNearWriteEntries(filteredReaders, entry, writeVal, valBytes, transformC,
-                                req.expiry());
+                            dhtFut.addNearWriteEntries(filteredReaders,
+                                entry,
+                                writeVal,
+                                valBytes,
+                                transformC,
+                                updRes.newTtl(),
+                                -1);
                     }
 
                     if (hasNear) {
                         if (primary) {
                             if (!ctx.affinity().belongs(node, entry.partition(), topVer)) {
-                                if (req.operation() == TRANSFORM) {
-                                    int idx = firstEntryIdx + i;
+                                int idx = firstEntryIdx + i;
 
+                                if (req.operation() == TRANSFORM) {
                                     GridCacheValueBytes valBytesTuple = entry.valueBytes();
 
                                     byte[] valBytes = valBytesTuple.getIfMarshaled();
 
-                                    res.addNearValue(idx, writeVal, valBytes);
+                                    res.addNearValue(idx,
+                                        writeVal,
+                                        valBytes,
+                                        updRes.newTtl(),
+                                        -1);
                                 }
+                                else
+                                    res.addNearTtl(idx, updRes.newTtl(), -1);
 
                                 if (writeVal != null || !entry.valueBytes().isNull()) {
                                     IgniteFuture<Boolean> f = entry.addReader(node.id(), req.messageId(), topVer);
@@ -2037,8 +2070,6 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
 
         String taskName = ctx.kernalContext().task().resolveTaskName(req.taskNameHash());
 
-        ExpiryPolicy expiry = req.expiry() != null ? req.expiry() : ctx.expiry();
-
         for (int i = 0; i < req.size(); i++) {
             K key = req.key(i);
 
@@ -2058,6 +2089,12 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                                 UPDATE :
                                 DELETE;
 
+                        long ttl = req.drTtl(i);
+                        long expireTime = req.drExpireTime(i);
+
+                        if (ttl != -1L && expireTime == -1L)
+                            expireTime = GridCacheMapEntry.toExpireTime(ttl);
+
                         GridCacheUpdateAtomicResult<K, V> updRes = entry.innerUpdate(
                             ver,
                             nodeId,
@@ -2067,15 +2104,15 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                             valBytes,
                             /*write-through*/false,
                             /*retval*/false,
-                            expiry,
+                            null,
                             /*event*/true,
                             /*metrics*/true,
                             /*primary*/false,
                             /*check version*/!req.forceTransformBackups(),
                             CU.<K, V>empty(),
                             replicate ? DR_BACKUP : DR_NONE,
-                            req.drTtl(i),
-                            req.drExpireTime(i),
+                            ttl,
+                            expireTime,
                             req.drVersion(i),
                             false,
                             intercept,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java
index 3c7da7b..25bc875 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java
@@ -202,7 +202,6 @@ public class GridDhtAtomicUpdateFuture<K, V> extends GridFutureAdapter<Void>
      * @param drTtl DR TTL (optional).
      * @param drExpireTime DR expire time (optional).
      * @param drVer DR version (optional).
-     * @param expiryPlc Expiry policy.
      */
     public void addWriteEntry(GridDhtCacheEntry<K, V> entry,
         @Nullable V val,
@@ -210,8 +209,7 @@ public class GridDhtAtomicUpdateFuture<K, V> extends GridFutureAdapter<Void>
         IgniteClosure<V, V> transformC,
         long drTtl,
         long drExpireTime,
-        @Nullable GridCacheVersion drVer,
-        @Nullable ExpiryPolicy expiryPlc) {
+        @Nullable GridCacheVersion drVer) {
         long topVer = updateReq.topologyVersion();
 
         Collection<ClusterNode> dhtNodes = cctx.dht().topology().nodes(entry.partition(), topVer);
@@ -237,7 +235,6 @@ public class GridDhtAtomicUpdateFuture<K, V> extends GridFutureAdapter<Void>
                         writeVer,
                         syncMode,
                         topVer,
-                        expiryPlc,
                         forceTransformBackups,
                         this.updateReq.subjectId(),
                         this.updateReq.taskNameHash());
@@ -245,8 +242,14 @@ public class GridDhtAtomicUpdateFuture<K, V> extends GridFutureAdapter<Void>
                     mappings.put(nodeId, updateReq);
                 }
 
-                updateReq.addWriteValue(entry.key(), entry.keyBytes(), val, valBytes, transformC, drTtl,
-                    drExpireTime, drVer);
+                updateReq.addWriteValue(entry.key(),
+                    entry.keyBytes(),
+                    val,
+                    valBytes,
+                    transformC,
+                    drTtl,
+                    drExpireTime,
+                    drVer);
             }
         }
     }
@@ -256,14 +259,16 @@ public class GridDhtAtomicUpdateFuture<K, V> extends GridFutureAdapter<Void>
      * @param entry Entry.
      * @param val Value.
      * @param valBytes Value bytes.
-     * @param expiryPlc Expiry policy..
+     * @param TTL for near cache update (optional).
+     * @param expireTime Expire time for near cache update (optional).
      */
     public void addNearWriteEntries(Iterable<UUID> readers,
         GridDhtCacheEntry<K, V> entry,
         @Nullable V val,
         @Nullable byte[] valBytes,
         IgniteClosure<V, V> transformC,
-        @Nullable ExpiryPolicy expiryPlc) {
+        long ttl,
+        long expireTime) {
         GridCacheWriteSynchronizationMode syncMode = updateReq.writeSynchronizationMode();
 
         keys.add(entry.key());
@@ -287,7 +292,6 @@ public class GridDhtAtomicUpdateFuture<K, V> extends GridFutureAdapter<Void>
                     writeVer,
                     syncMode,
                     topVer,
-                    expiryPlc,
                     forceTransformBackups,
                     this.updateReq.subjectId(),
                     this.updateReq.taskNameHash());
@@ -300,7 +304,13 @@ public class GridDhtAtomicUpdateFuture<K, V> extends GridFutureAdapter<Void>
 
             nearReadersEntries.put(entry.key(), entry);
 
-            updateReq.addNearWriteValue(entry.key(), entry.keyBytes(), val, valBytes, transformC);
+            updateReq.addNearWriteValue(entry.key(),
+                entry.keyBytes(),
+                val,
+                valBytes,
+                transformC,
+                ttl,
+                expireTime);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
index c3b0918..fda44c9 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
@@ -77,14 +77,14 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
     /** DR TTLs. */
     private GridLongList drExpireTimes;
 
-    /** Write synchronization mode. */
-    private GridCacheWriteSynchronizationMode syncMode;
+    /** Near TTLs. */
+    private GridLongList nearTtls;
 
-    /** Expiry policy. */
-    private ExpiryPolicy expiryPlc;
+    /** Near expire times. */
+    private GridLongList nearExpireTimes;
 
-    /** Expiry policy bytes. */
-    private byte[] expiryPlcBytes;
+    /** Write synchronization mode. */
+    private GridCacheWriteSynchronizationMode syncMode;
 
     /** Keys to update. */
     @GridToStringInclude
@@ -154,7 +154,6 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
      * @param writeVer Write version for cache values.
      * @param syncMode Cache write synchronization mode.
      * @param topVer Topology version.
-     * @param expiryPlc Expiry policy.
      * @param forceTransformBackups Force transform backups flag.
      * @param subjId Subject ID.
      */
@@ -165,7 +164,6 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
         GridCacheVersion writeVer,
         GridCacheWriteSynchronizationMode syncMode,
         long topVer,
-        @Nullable ExpiryPolicy expiryPlc,
         boolean forceTransformBackups,
         UUID subjId,
         int taskNameHash
@@ -175,7 +173,6 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
         this.futVer = futVer;
         this.writeVer = writeVer;
         this.syncMode = syncMode;
-        this.expiryPlc = expiryPlc;
         this.topVer = topVer;
         this.forceTransformBackups = forceTransformBackups;
         this.subjId = subjId;
@@ -210,8 +207,14 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
      * @param drExpireTime DR expire time (optional).
      * @param drVer DR version (optional).
      */
-    public void addWriteValue(K key, @Nullable byte[] keyBytes, @Nullable V val, @Nullable byte[] valBytes,
-        IgniteClosure<V, V> transformC, long drTtl, long drExpireTime, @Nullable GridCacheVersion drVer) {
+    public void addWriteValue(K key,
+        @Nullable byte[] keyBytes,
+        @Nullable V val,
+        @Nullable byte[] valBytes,
+        IgniteClosure<V, V> transformC,
+        long drTtl,
+        long drExpireTime,
+        @Nullable GridCacheVersion drVer) {
         keys.add(key);
         this.keyBytes.add(keyBytes);
 
@@ -265,8 +268,13 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
      * @param val Value, {@code null} if should be removed.
      * @param valBytes Value bytes, {@code null} if should be removed.
      */
-    public void addNearWriteValue(K key, @Nullable byte[] keyBytes, @Nullable V val, @Nullable byte[] valBytes,
-        IgniteClosure<V, V> transformC) {
+    public void addNearWriteValue(K key,
+        @Nullable byte[] keyBytes,
+        @Nullable V val,
+        @Nullable byte[] valBytes,
+        IgniteClosure<V, V> transformC,
+        long ttl,
+        long expireTime) {
         if (nearKeys == null) {
             nearKeys = new ArrayList<>();
             nearKeyBytes = new ArrayList<>();
@@ -293,6 +301,28 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
             nearVals.add(val);
             nearValBytes.add(valBytes != null ? GridCacheValueBytes.marshaled(valBytes) : null);
         }
+
+        if (ttl >= 0) {
+            if (nearTtls == null) {
+                nearTtls = new GridLongList(nearKeys.size());
+
+                for (int i = 0; i < nearKeys.size() - 1; i++)
+                    nearTtls.add(-1);
+            }
+
+            nearTtls.add(ttl);
+        }
+
+        if (expireTime >= 0) {
+            if (nearExpireTimes == null) {
+                nearExpireTimes = new GridLongList(nearKeys.size());
+
+                for (int i = 0; i < nearKeys.size() - 1; i++)
+                    nearExpireTimes.add(-1);
+            }
+
+            nearExpireTimes.add(expireTime);
+        }
     }
 
     /** {@inheritDoc} */
@@ -364,13 +394,6 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
     }
 
     /**
-     * @return Expiry policy.
-     */
-    @Nullable public ExpiryPolicy expiry() {
-        return expiryPlc;
-    }
-
-    /**
      * @return Keys.
      */
     public Collection<K> keys() {
@@ -542,6 +565,20 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
     }
 
     /**
+     * @param idx Index.
+     * @return TTL for near cache update.
+     */
+    public long nearTtl(int idx) {
+        if (nearTtls != null) {
+            assert idx >= 0 && idx < nearTtls.size();
+
+            return nearTtls.get(idx);
+        }
+
+        return -1L;
+    }
+
+    /**
      * @return DR TTLs.
      */
     @Nullable public GridLongList drExpireTimes() {
@@ -562,6 +599,20 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
         return -1L;
     }
 
+    /**
+     * @param idx Index.
+     * @return Expire time for near cache update.
+     */
+    public long nearExpireTime(int idx) {
+        if (nearExpireTimes != null) {
+            assert idx >= 0 && idx < nearExpireTimes.size();
+
+            return nearExpireTimes.get(idx);
+        }
+
+        return -1L;
+    }
+
     /** {@inheritDoc}
      * @param ctx*/
     @Override public void prepareMarshal(GridCacheSharedContext<K, V> ctx) throws IgniteCheckedException {
@@ -625,7 +676,6 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
         _clone.drTtls = drTtls;
         _clone.drExpireTimes = drExpireTimes;
         _clone.syncMode = syncMode;
-        _clone.expiryPlc = expiryPlc;
         _clone.nearKeys = nearKeys;
         _clone.nearKeyBytes = nearKeyBytes;
         _clone.nearVals = nearVals;
@@ -635,6 +685,8 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
         _clone.transformClosBytes = transformClosBytes;
         _clone.nearTransformClos = nearTransformClos;
         _clone.nearTransformClosBytes = nearTransformClosBytes;
+        _clone.nearExpireTimes = nearExpireTimes;
+        _clone.nearTtls = nearTtls;
         _clone.subjId = subjId;
         _clone.taskNameHash = taskNameHash;
     }
@@ -746,12 +798,6 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
                 commState.idx++;
 
             case 11:
-                if (!commState.putByteArray(expiryPlcBytes))
-                    return false;
-
-                commState.idx++;
-
-            case 12:
                 if (valBytes != null) {
                     if (commState.it == null) {
                         if (!commState.putInt(valBytes.size()))
@@ -778,13 +824,13 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 13:
+            case 12:
                 if (!commState.putCacheVersion(writeVer))
                     return false;
 
                 commState.idx++;
 
-            case 14:
+            case 13:
                 if (nearKeyBytes != null) {
                     if (commState.it == null) {
                         if (!commState.putInt(nearKeyBytes.size()))
@@ -811,7 +857,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 15:
+            case 14:
                 if (nearValBytes != null) {
                     if (commState.it == null) {
                         if (!commState.putInt(nearValBytes.size()))
@@ -838,13 +884,13 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 16:
+            case 15:
                 if (!commState.putBoolean(forceTransformBackups))
                     return false;
 
                 commState.idx++;
 
-            case 17:
+            case 16:
                 if (nearTransformClosBytes != null) {
                     if (commState.it == null) {
                         if (!commState.putInt(nearTransformClosBytes.size()))
@@ -871,7 +917,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 18:
+            case 17:
                 if (transformClosBytes != null) {
                     if (commState.it == null) {
                         if (!commState.putInt(transformClosBytes.size()))
@@ -898,18 +944,29 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 19:
+            case 18:
                 if (!commState.putUuid(subjId))
                     return false;
 
                 commState.idx++;
 
-            case 20:
+            case 19:
                 if (!commState.putInt(taskNameHash))
                     return false;
 
                 commState.idx++;
 
+            case 20:
+                if (!commState.putLongList(nearExpireTimes))
+                    return false;
+
+                commState.idx++;
+
+            case 21:
+                if (!commState.putLongList(nearTtls))
+                    return false;
+
+                commState.idx++;
         }
 
         return true;
@@ -1041,16 +1098,6 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
                 commState.idx++;
 
             case 11:
-                byte[] expiryPlcBytes0 = commState.getByteArray();
-
-                if (expiryPlcBytes0 == BYTE_ARR_NOT_READ)
-                    return false;
-
-                expiryPlcBytes = expiryPlcBytes0;
-
-                commState.idx++;
-
-            case 12:
                 if (commState.readSize == -1) {
                     if (buf.remaining() < 4)
                         return false;
@@ -1079,7 +1126,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 13:
+            case 12:
                 GridCacheVersion writeVer0 = commState.getCacheVersion();
 
                 if (writeVer0 == CACHE_VER_NOT_READ)
@@ -1089,7 +1136,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 14:
+            case 13:
                 if (commState.readSize == -1) {
                     if (buf.remaining() < 4)
                         return false;
@@ -1118,7 +1165,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 15:
+            case 14:
                 if (commState.readSize == -1) {
                     if (buf.remaining() < 4)
                         return false;
@@ -1147,7 +1194,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 16:
+            case 15:
                 if (buf.remaining() < 1)
                     return false;
 
@@ -1155,7 +1202,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 17:
+            case 16:
                 if (commState.readSize == -1) {
                     if (buf.remaining() < 4)
                         return false;
@@ -1184,7 +1231,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 18:
+            case 17:
                 if (commState.readSize == -1) {
                     if (buf.remaining() < 4)
                         return false;
@@ -1213,7 +1260,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 19:
+            case 18:
                 UUID subjId0 = commState.getUuid();
 
                 if (subjId0 == UUID_NOT_READ)
@@ -1223,7 +1270,7 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
-            case 20:
+            case 19:
                 if (buf.remaining() < 4)
                     return false;
 
@@ -1231,6 +1278,25 @@ public class GridDhtAtomicUpdateRequest<K, V> extends GridCacheMessage<K, V> imp
 
                 commState.idx++;
 
+            case 20:
+                GridLongList nearExpireTimes0 = commState.getLongList();
+
+                if (nearExpireTimes0 == LONG_LIST_NOT_READ)
+                    return false;
+
+                nearExpireTimes = nearExpireTimes0;
+
+                commState.idx++;
+
+            case 21:
+                GridLongList nearTtls0 = commState.getLongList();
+
+                if (nearTtls0 == LONG_LIST_NOT_READ)
+                    return false;
+
+                nearTtls = nearTtls0;
+
+                commState.idx++;
         }
 
         return true;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
index fd4d7dc..0be44aa 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
@@ -12,6 +12,7 @@ package org.gridgain.grid.kernal.processors.cache.distributed.dht.atomic;
 import org.apache.ignite.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.processors.cache.*;
+import org.gridgain.grid.util.*;
 import org.gridgain.grid.util.direct.*;
 import org.gridgain.grid.util.tostring.*;
 import org.gridgain.grid.util.typedef.internal.*;
@@ -94,6 +95,12 @@ public class GridNearAtomicUpdateResponse<K, V> extends GridCacheMessage<K, V> i
     @GridDirectVersion(1)
     private GridCacheVersion nearVer;
 
+    /** Near TTLs. */
+    private GridLongList nearTtls;
+
+    /** Near expire times. */
+    private GridLongList nearExpireTimes;
+
     /**
      * Empty constructor required by {@link Externalizable}.
      */
@@ -186,20 +193,87 @@ public class GridNearAtomicUpdateResponse<K, V> extends GridCacheMessage<K, V> i
      * @param keyIdx Key index.
      * @param val Value.
      * @param valBytes Value bytes.
+     * @param ttl TTL for near cache update.
+     * @param expireTime Expire time for near cache update.
      */
-    public void addNearValue(int keyIdx, @Nullable V val, @Nullable byte[] valBytes) {
+    public void addNearValue(int keyIdx,
+        @Nullable V val,
+        @Nullable byte[] valBytes,
+        long ttl,
+        long expireTime) {
         if (nearValsIdxs == null) {
             nearValsIdxs = new ArrayList<>();
             nearValBytes = new ArrayList<>();
             nearVals = new ArrayList<>();
         }
 
+        addNearTtl(keyIdx, ttl, expireTime);
+
         nearValsIdxs.add(keyIdx);
         nearVals.add(val);
         nearValBytes.add(valBytes != null ? GridCacheValueBytes.marshaled(valBytes) : null);
     }
 
     /**
+     * @param ttl TTL for near cache update.
+     * @param expireTime Expire time for near cache update.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    public void addNearTtl(int keyIdx, long ttl, long expireTime) {
+        if (ttl >= 0) {
+            if (nearTtls == null) {
+                nearTtls = new GridLongList(16);
+
+                for (int i = 0; i < keyIdx; i++)
+                    nearTtls.add(-1L);
+            }
+        }
+
+        if (nearTtls != null)
+            nearTtls.add(ttl);
+
+        if (expireTime >= 0) {
+            if (nearExpireTimes == null) {
+                nearExpireTimes = new GridLongList(16);
+
+                for (int i = 0; i < keyIdx; i++)
+                    nearExpireTimes.add(-1);
+            }
+        }
+
+        if (nearExpireTimes != null)
+            nearExpireTimes.add(expireTime);
+    }
+
+    /**
+     * @param idx Index.
+     * @return Expire time for near cache update.
+     */
+    public long nearExpireTime(int idx) {
+        if (nearExpireTimes != null) {
+            assert idx >= 0 && idx < nearExpireTimes.size();
+
+            return nearExpireTimes.get(idx);
+        }
+
+        return -1L;
+    }
+
+    /**
+     * @param idx Index.
+     * @return TTL for near cache update.
+     */
+    public long nearTtl(int idx) {
+        if (nearTtls != null) {
+            assert idx >= 0 && idx < nearTtls.size();
+
+            return nearTtls.get(idx);
+        }
+
+        return -1L;
+    }
+
+    /**
      * @param nearVer Version generated on primary node to be used for originating node's near cache update.
      */
     public void nearVersion(GridCacheVersion nearVer) {
@@ -221,6 +295,8 @@ public class GridNearAtomicUpdateResponse<K, V> extends GridCacheMessage<K, V> i
             nearSkipIdxs = new ArrayList<>();
 
         nearSkipIdxs.add(keyIdx);
+
+        addNearTtl(keyIdx, -1L, -1L);
     }
 
     /**
@@ -366,6 +442,8 @@ public class GridNearAtomicUpdateResponse<K, V> extends GridCacheMessage<K, V> i
         _clone.nearVals = nearVals;
         _clone.nearValBytes = nearValBytes;
         _clone.nearVer = nearVer;
+        _clone.nearTtls = nearTtls;
+        _clone.nearExpireTimes = nearExpireTimes;
     }
 
     /** {@inheritDoc} */
@@ -501,6 +579,17 @@ public class GridNearAtomicUpdateResponse<K, V> extends GridCacheMessage<K, V> i
 
                 commState.idx++;
 
+            case 12:
+                if (!commState.putLongList(nearExpireTimes))
+                    return false;
+
+                commState.idx++;
+
+            case 13:
+                if (!commState.putLongList(nearTtls))
+                    return false;
+
+                commState.idx++;
         }
 
         return true;
@@ -662,6 +751,26 @@ public class GridNearAtomicUpdateResponse<K, V> extends GridCacheMessage<K, V> i
 
                 commState.idx++;
 
+            case 12:
+                GridLongList nearExpireTimes0 = commState.getLongList();
+
+                if (nearExpireTimes0 == LONG_LIST_NOT_READ)
+                    return false;
+
+                nearExpireTimes = nearExpireTimes0;
+
+                commState.idx++;
+
+            case 13:
+                GridLongList nearTtls0 = commState.getLongList();
+
+                if (nearTtls0 == LONG_LIST_NOT_READ)
+                    return false;
+
+                nearTtls = nearTtls0;
+
+                commState.idx++;
+
         }
 
         return true;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearAtomicCache.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearAtomicCache.java
index 2aa32c3..1da6626 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearAtomicCache.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearAtomicCache.java
@@ -148,12 +148,19 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
                 }
             }
 
+            long ttl = res.nearTtl(i);
+            long expireTime = res.nearExpireTime(i);
+
+            if (ttl != -1L && expireTime == -1L)
+                expireTime = GridCacheMapEntry.toExpireTime(ttl);
+
             try {
                 processNearAtomicUpdateResponse(ver,
                     key,
                     val,
                     valBytes,
-                    req.expiry(),
+                    ttl,
+                    expireTime,
                     req.nodeId(),
                     req.subjectId(),
                     taskName);
@@ -169,7 +176,8 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
      * @param key Key.
      * @param val Value.
      * @param valBytes Value bytes.
-     * @param expiryPlc Expiry policy.
+     * @param ttl TTL.
+     * @param expireTime Expire time.
      * @param nodeId Node ID.
      * @throws IgniteCheckedException If failed.
      */
@@ -178,7 +186,8 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
         K key,
         @Nullable V val,
         @Nullable byte[] valBytes,
-        ExpiryPolicy expiryPlc,
+        long ttl,
+        long expireTime,
         UUID nodeId,
         UUID subjId,
         String taskName
@@ -203,15 +212,15 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
                         valBytes,
                         /*write-through*/false,
                         /*retval*/false,
-                        expiryPlc != null ? expiryPlc : ctx.expiry(),
+                        null,
                         /*event*/true,
                         /*metrics*/true,
                         /*primary*/false,
                         /*check version*/true,
                         CU.<K, V>empty(),
                         DR_NONE,
-                        -1,
-                        -1,
+                        ttl,
+                        expireTime,
                         null,
                         false,
                         false,
@@ -260,8 +269,6 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
 
         String taskName = ctx.kernalContext().task().resolveTaskName(req.taskNameHash());
 
-        ExpiryPolicy expiry = req.expiry() != null ? req.expiry() : ctx.expiry();
-
         for (int i = 0; i < req.nearSize(); i++) {
             K key = req.nearKey(i);
 
@@ -292,6 +299,12 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
                                 UPDATE :
                                 DELETE;
 
+                        long ttl = req.nearTtl(i);
+                        long expireTime = req.nearExpireTime(i);
+
+                        if (ttl != -1L && expireTime == -1L)
+                            expireTime = GridCacheMapEntry.toExpireTime(ttl);
+
                         GridCacheUpdateAtomicResult<K, V> updRes = entry.innerUpdate(
                             ver,
                             nodeId,
@@ -301,15 +314,15 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
                             valBytes,
                             /*write-through*/false,
                             /*retval*/false,
-                            expiry,
+                            null,
                             /*event*/true,
                             /*metrics*/true,
                             /*primary*/false,
                             /*check version*/!req.forceTransformBackups(),
                             CU.<K, V>empty(),
                             DR_NONE,
-                            -1,
-                            -1,
+                            ttl,
+                            expireTime,
                             null,
                             false,
                             intercept,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/688a2e71/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTest.java
index 0d22f62..f96e5a7 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTest.java
@@ -36,6 +36,9 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
     /** */
     private Factory<? extends ExpiryPolicy> factory;
 
+    /** */
+    private boolean nearCache;
+
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         // No-op.
@@ -48,7 +51,160 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
 
     /** {@inheritDoc} */
     @Override protected int gridCount() {
-        return 2;
+        return 3;
+    }
+
+    public void testPrimary() throws Exception {
+        factory = new FactoryBuilder.SingletonFactory<>(new TestPolicy(60_000L, 61_000L, null));
+
+        nearCache = false;
+
+        boolean inTx = false;
+
+        startGrids();
+
+        IgniteCache<Integer, Integer> cache = jcache(0);
+
+        GridCache<Integer, Object> cache0 = cache(0);
+
+        Integer key = primaryKey(cache0);
+
+        log.info("Create: " + key);
+
+        GridCacheTx tx = inTx ? grid(0).transactions().txStart() : null;
+
+        cache.put(key, 1);
+
+        if (tx != null)
+            tx.commit();
+
+        checkTtl(key, 60_000);
+
+        tx = inTx ? grid(0).transactions().txStart() : null;
+
+        log.info("Update: " + key);
+
+        cache.put(key, 2);
+
+        if (tx != null)
+            tx.commit();
+
+        checkTtl(key, 61_000);
+    }
+
+    public void testBackup() throws Exception {
+        factory = new FactoryBuilder.SingletonFactory<>(new TestPolicy(60_000L, 61_000L, null));
+
+        nearCache = false;
+
+        boolean inTx = false;
+
+        startGrids();
+
+        IgniteCache<Integer, Integer> cache = jcache(0);
+
+        GridCache<Integer, Object> cache0 = cache(0);
+
+        Integer key = backupKey(cache0);
+
+        log.info("Create: " + key);
+
+        GridCacheTx tx = inTx ? grid(0).transactions().txStart() : null;
+
+        cache.put(key, 1);
+
+        if (tx != null)
+            tx.commit();
+
+        checkTtl(key, 60_000);
+
+        tx = inTx ? grid(0).transactions().txStart() : null;
+
+        log.info("Update: " + key);
+
+        cache.put(key, 2);
+
+        if (tx != null)
+            tx.commit();
+
+        checkTtl(key, 61_000);
+    }
+
+    public void testNear() throws Exception {
+        factory = new FactoryBuilder.SingletonFactory<>(new TestPolicy(60_000L, 61_000L, null));
+
+        nearCache = false;
+
+        boolean inTx = true;
+
+        startGrids();
+
+        IgniteCache<Integer, Integer> cache = jcache(0);
+
+        GridCache<Integer, Object> cache0 = cache(0);
+
+        Integer key = nearKey(cache0);
+
+        log.info("Create: " + key);
+
+        GridCacheTx tx = inTx ? grid(0).transactions().txStart() : null;
+
+        cache.put(key, 1);
+
+        if (tx != null)
+            tx.commit();
+
+        checkTtl(key, 60_000);
+
+        tx = inTx ? grid(0).transactions().txStart() : null;
+
+        log.info("Update: " + key);
+
+        cache.put(key, 2);
+
+        if (tx != null)
+            tx.commit();
+
+        checkTtl(key, 61_000);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void test1() throws Exception {
+        factory = new FactoryBuilder.SingletonFactory<>(new TestPolicy(60_000L, null, null));
+
+        nearCache = false;
+
+        boolean inTx = true;
+
+        startGrids();
+
+        Collection<Integer> keys = keys();
+
+        IgniteCache<Integer, Integer> cache = jcache(0);
+
+        for (final Integer key : keys) {
+            log.info("Test key1: " + key);
+
+            GridCacheTx tx = inTx ? grid(0).transactions().txStart() : null;
+
+            cache.put(key, 1);
+
+            if (tx != null)
+                tx.commit();
+        }
+
+        for (final Integer key : keys) {
+            log.info("Test key2: " + key);
+
+            GridCacheTx tx = inTx ? grid(0).transactions().txStart() : null;
+
+            cache.put(key, 2);
+
+            if (tx != null)
+                tx.commit();
+        }
     }
 
     /**
@@ -93,6 +249,94 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    public void testNearPut() throws Exception {
+        factory = new FactoryBuilder.SingletonFactory<>(new TestPolicy(60_000L, null, null));
+
+        nearCache = true;
+
+        startGrids();
+
+        GridCache<Integer, Object> cache0 = cache(0);
+
+        Integer key = nearKey(cache0);
+
+        IgniteCache<Integer, Integer> jcache0 = jcache(0);
+
+        jcache0.put(key, 1);
+
+        checkTtl(key, 60_000);
+
+        IgniteCache<Integer, Integer> jcache1 = jcache(1);
+
+        // Update from another node with provided TTL.
+        jcache1.withExpiryPolicy(new TestPolicy(null, 1000L, null)).put(key, 2);
+
+        checkTtl(key, 1000);
+
+        waitExpired(key);
+
+        jcache1.remove(key);
+
+        jcache0.put(key, 1);
+
+        checkTtl(key, 60_000);
+
+        // Update from near node with provided TTL.
+        jcache0.withExpiryPolicy(new TestPolicy(null, 1100L, null)).put(key, 2);
+
+        checkTtl(key, 1100);
+
+        waitExpired(key);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testNearPutAll() throws Exception {
+        factory = new FactoryBuilder.SingletonFactory<>(new TestPolicy(60_000L, null, null));
+
+        nearCache = true;
+
+        startGrids();
+
+        Map<Integer, Integer> vals = new HashMap<>();
+
+        for (int i = 0; i < 1000; i++)
+            vals.put(i, i);
+
+        IgniteCache<Integer, Integer> jcache0 = jcache(0);
+
+        jcache0.putAll(vals);
+
+        for (Integer key : vals.keySet())
+            checkTtl(key, 60_000);
+
+        IgniteCache<Integer, Integer> jcache1 = jcache(1);
+
+        // Update from another node with provided TTL.
+        jcache1.withExpiryPolicy(new TestPolicy(null, 1000L, null)).putAll(vals);
+
+        for (Integer key : vals.keySet())
+            checkTtl(key, 1000);
+
+        waitExpired(vals.keySet());
+
+        jcache0.removeAll(vals.keySet());
+
+        jcache0.putAll(vals);
+
+        // Update from near node with provided TTL.
+        jcache1.withExpiryPolicy(new TestPolicy(null, 1101L, null)).putAll(vals);
+
+        for (Integer key : vals.keySet())
+            checkTtl(key, 1101L);
+
+        waitExpired(vals.keySet());
+    }
+
+    /**
      * @return Test keys.
      * @throws Exception If failed.
      */
@@ -106,7 +350,7 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
         if (gridCount() > 1) {
             keys.add(backupKey(cache));
 
-            if (cache.configuration().getDistributionMode() == NEAR_PARTITIONED)
+            if (cache.configuration().getCacheMode() != REPLICATED)
                 keys.add(nearKey(cache));
         }
 
@@ -117,16 +361,27 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
      * @param key Key.
      * @throws Exception If failed.
      */
-    private void waitExpired(final Integer key) throws Exception {
+    private void waitExpired(Integer key) throws Exception {
+        waitExpired(Collections.singleton(key));
+    }
+
+    /**
+     * @param keys Keys.
+     * @throws Exception If failed.
+     */
+    private void waitExpired(final Collection<Integer> keys) throws Exception {
         GridTestUtils.waitForCondition(new GridAbsPredicate() {
             @Override public boolean apply() {
                 for (int i = 0; i < gridCount(); i++) {
-                    Object val = jcache(i).localPeek(key);
+                    for (Integer key : keys) {
+                        Object val = jcache(i).localPeek(key);
 
-                    log.info("Value [grid=" + i + ", val=" + val + ']');
+                        if (val != null) {
+                            // log.info("Value [grid=" + i + ", val=" + val + ']');
 
-                    if (val != null)
-                        return false;
+                            return false;
+                        }
+                    }
                 }
 
                 return false;
@@ -138,17 +393,23 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
         for (int i = 0; i < gridCount(); i++) {
             ClusterNode node = grid(i).cluster().localNode();
 
-            Object val = jcache(i).localPeek(key);
+            for (Integer key : keys) {
+                Object val = jcache(i).localPeek(key);
 
-            log.info("Value [grid=" + i +
-                ", primary=" + cache.affinity().isPrimary(node, key) +
-                ", backup=" + cache.affinity().isBackup(node, key) + ']');
+                if (val != null) {
+                    log.info("Unexpected value [grid=" + i +
+                        ", primary=" + cache.affinity().isPrimary(node, key) +
+                        ", backup=" + cache.affinity().isBackup(node, key) + ']');
+                }
 
-            assertNull("Unexpected non-null value for grid " + i, val);
+                assertNull("Unexpected non-null value for grid " + i, val);
+            }
         }
 
-        for (int i = 0; i < gridCount(); i++)
-            assertNull("Unexpected non-null value for grid " + i, jcache(i).get(key));
+        for (int i = 0; i < gridCount(); i++) {
+            for (Integer key : keys)
+                assertNull("Unexpected non-null value for grid " + i, jcache(i).get(key));
+        }
     }
 
     /**
@@ -167,11 +428,8 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
             if (e == null && cache.context().isNear())
                 e = cache.context().near().dht().peekEx(key);
 
-            if (e == null) {
-                assertTrue(i > 0);
-
+            if (e == null)
                 assertTrue(!cache.affinity().isPrimaryOrBackup(grid.localNode(), key));
-            }
             else
                 assertEquals("Unexpected ttl for grid " + i, ttl, e.ttl());
         }
@@ -184,10 +442,16 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
         GridCacheConfiguration cfg = super.cacheConfiguration(gridName);
 
         cfg.setCacheMode(PARTITIONED);
-        cfg.setAtomicityMode(ATOMIC);
+        cfg.setAtomicityMode(TRANSACTIONAL);
+
+        //cfg.setAtomicityMode(ATOMIC);
+
         cfg.setBackups(1);
 
-        cfg.setDistributionMode(PARTITIONED_ONLY);
+        if (nearCache && gridName.equals(getTestGridName(0)))
+            cfg.setDistributionMode(NEAR_PARTITIONED);
+        else
+            cfg.setDistributionMode(PARTITIONED_ONLY);
 
         cfg.setExpiryPolicyFactory(factory);
 
@@ -213,11 +477,11 @@ public class IgniteCacheExpiryPolicyTest extends IgniteCacheTest {
          * @param update TTL for update.
          */
         TestPolicy(@Nullable Long create,
-           @Nullable Long access,
-           @Nullable Long update) {
+            @Nullable Long update,
+            @Nullable Long access) {
             this.create = create;
-            this.access = access;
             this.update = update;
+            this.access = access;
         }
 
         /** {@inheritDoc} */


[17/18] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-1' into ignite-41

Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-1' into ignite-41


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

Branch: refs/heads/ignite-41
Commit: e85a9385ccfef3ac2343fab79f7edf340e798b2e
Parents: c2a5132 03c17b8
Author: sboikov <sb...@gridgain.com>
Authored: Tue Dec 16 09:29:57 2014 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Dec 16 09:29:57 2014 +0300

----------------------------------------------------------------------
 .../GridClientAbstractMultiNodeSelfTest.java    |   9 +-
 .../client/suite/GridClientTestSuite.java       |   4 -
 .../java/org/apache/ignite/IgniteCompute.java   |  75 ++++++------
 .../org/apache/ignite/IgniteTransactions.java   |  20 +++-
 .../grid/cache/GridCacheConfiguration.java      | 115 ++-----------------
 .../gridgain/grid/cache/GridCacheTxMetrics.java |  45 --------
 .../grid/cache/GridCacheTxMetricsAdapter.java   | 108 -----------------
 .../gridgain/grid/cache/IgniteTxMetrics.java    |  45 ++++++++
 .../grid/cache/IgniteTxMetricsAdapter.java      | 107 +++++++++++++++++
 .../processors/cache/GridCacheAdapter.java      | 108 +++--------------
 .../processors/cache/GridCacheAttributes.java   |  40 -------
 .../processors/cache/GridCacheMapEntry.java     |   4 +-
 .../GridCachePartitionExchangeManager.java      |  23 ++--
 .../processors/cache/GridCacheProcessor.java    |  16 ---
 .../cache/GridCacheSharedContext.java           |  14 ++-
 .../processors/cache/GridCacheStoreManager.java |  11 +-
 .../processors/cache/GridCacheTxAdapter.java    |  36 +++++-
 .../kernal/processors/cache/GridCacheTxEx.java  |   8 +-
 .../processors/cache/GridCacheTxHandler.java    |  10 +-
 .../cache/GridCacheTxLocalAdapter.java          |  31 ++---
 .../processors/cache/GridCacheTxManager.java    |  20 +++-
 .../distributed/dht/GridDhtCacheEntryImpl.java  |   2 +-
 .../dht/GridDhtTransactionalCacheAdapter.java   |   2 +
 .../distributed/dht/GridDhtTxFinishFuture.java  |   1 -
 .../distributed/dht/GridDhtTxLocalAdapter.java  |  29 ++---
 .../colocated/GridDhtColocatedLockFuture.java   |   2 +-
 .../preloader/GridDhtPartitionDemandPool.java   |   2 +-
 .../GridDhtPartitionsExchangeFuture.java        |   6 +-
 .../distributed/near/GridNearLockFuture.java    |   2 +-
 .../distributed/near/GridNearLockRequest.java   |  25 ++++
 .../cache/distributed/near/GridNearTxLocal.java |  15 ++-
 .../near/GridNearTxPrepareFuture.java           |  38 +++++-
 .../processors/cache/local/GridLocalTx.java     |   2 +-
 .../transactions/IgniteTransactionsImpl.java    | 101 ++++++++++++++--
 .../handlers/cache/GridCacheCommandHandler.java |   1 -
 .../visor/cache/VisorCacheDgcConfiguration.java |   4 -
 .../ipc/shmem/GridIpcSharedMemorySpace.java     |   1 -
 .../tcp/GridCacheDhtLockBackupSelfTest.java     |   7 --
 .../GridDeploymentMessageCountSelfTest.java     |   2 +-
 .../GridCacheAbstractFailoverSelfTest.java      |   2 -
 .../cache/GridCacheAbstractMetricsSelfTest.java |   9 +-
 .../GridCacheAbstractProjectionSelfTest.java    |   4 +-
 .../GridCacheAbstractRemoveFailureTest.java     |   9 --
 .../GridCacheGroupLockAbstractSelfTest.java     |  49 +++-----
 .../GridCacheGroupLockFailoverSelfTest.java     |   3 -
 ...HeapMultiThreadedUpdateAbstractSelfTest.java |   2 +-
 .../cache/GridCachePutAllFailoverSelfTest.java  |   3 -
 .../GridCacheReferenceCleanupSelfTest.java      |   3 +-
 ...cheTransactionalAbstractMetricsSelfTest.java |  32 ++++--
 .../GridCacheTxSingleThreadedAbstractTest.java  |   4 +-
 ...dCacheQueueMultiNodeConsistencySelfTest.java |   1 -
 ...dCachePartitionedQueueMultiNodeSelfTest.java |   1 -
 ...dCacheMultithreadedFailoverAbstractTest.java |   5 +-
 ...cOriginatingNodeFailureAbstractSelfTest.java |   1 -
 .../dht/GridCacheDhtPreloadDelayedSelfTest.java |   2 +-
 ...ridCacheDhtPreloadMultiThreadedSelfTest.java |  17 +--
 ...ockPartitionedMultiNodeAbstractSelfTest.java |   1 -
 .../near/GridCacheNearMultiNodeSelfTest.java    |   9 +-
 .../near/GridCacheNearOneNodeSelfTest.java      |  23 ++--
 ...titionedExplicitLockNodeFailureSelfTest.java |   1 -
 ...idCachePartitionedMultiNodeLockSelfTest.java |   1 -
 ...GridCachePartitionedNodeFailureSelfTest.java |   1 -
 .../GridCachePartitionedNodeRestartTest.java    |   1 -
 ...ePartitionedOptimisticTxNodeRestartTest.java |   1 -
 .../GridCachePartitionedTxSalvageSelfTest.java  |   2 -
 .../near/GridCachePutArrayValueSelfTest.java    |   2 -
 .../GridCacheReplicatedPreloadSelfTest.java     |   3 +-
 .../GridCacheDistributedEvictionsSelfTest.java  |   1 -
 .../eviction/GridCacheEvictionAbstractTest.java |   2 +-
 .../GridCacheEvictionFilterSelfTest.java        |   2 +-
 .../GridCacheEvictionTouchSelfTest.java         |   4 +-
 .../GridCacheLruNearEvictionPolicySelfTest.java |   2 +-
 .../GridCacheRandomEvictionPolicySelfTest.java  |   2 +-
 ...ridCacheContinuousQueryAbstractSelfTest.java |   1 -
 .../GridDataLoaderProcessorSelfTest.java        |   5 +-
 .../cache/GridCacheCommandHandlerSelfTest.java  |   2 +-
 .../GridCacheDataStructuresSelfTestSuite.java   |   6 +-
 .../GridCacheEvictionSelfTestSuite.java         |   2 +-
 .../GridCacheMetricsSelfTestSuite.java          |   4 +-
 .../bamboo/GridCacheFailoverTestSuite.java      |   4 -
 .../bamboo/GridDataGridTestSuite.java           |   6 +-
 .../testsuites/GridCacheQuerySelfTestSuite.java |  10 +-
 .../cache/jta/GridCacheJtaManager.java          |   1 +
 83 files changed, 610 insertions(+), 727 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e85a9385/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheConfiguration.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e85a9385/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e85a9385/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e85a9385/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------


[10/18] incubator-ignite git commit: GG-9141 - Enabling passing tests.

Posted by sb...@apache.org.
GG-9141 - Enabling passing tests.


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

Branch: refs/heads/ignite-41
Commit: ec62ccc38141046544fd8cccfefed1bdd35f4561
Parents: 766e45c
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sun Dec 14 11:46:33 2014 -0800
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sun Dec 14 11:46:33 2014 -0800

----------------------------------------------------------------------
 .../replicated/preloader/GridCacheReplicatedPreloadSelfTest.java  | 3 +--
 .../processors/cache/eviction/GridCacheEvictionAbstractTest.java  | 2 +-
 .../cache/eviction/GridCacheEvictionFilterSelfTest.java           | 2 +-
 .../eviction/random/GridCacheRandomEvictionPolicySelfTest.java    | 2 +-
 4 files changed, 4 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ec62ccc3/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/replicated/preloader/GridCacheReplicatedPreloadSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/replicated/preloader/GridCacheReplicatedPreloadSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/replicated/preloader/GridCacheReplicatedPreloadSelfTest.java
index 29e0044..82a56a3 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/replicated/preloader/GridCacheReplicatedPreloadSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/replicated/preloader/GridCacheReplicatedPreloadSelfTest.java
@@ -13,7 +13,6 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
-import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.apache.ignite.spi.discovery.tcp.*;
@@ -164,7 +163,7 @@ public class GridCacheReplicatedPreloadSelfTest extends GridCommonAbstractTest {
                     EVT_CACHE_PRELOAD_STARTED, EVT_CACHE_PRELOAD_STOPPED);
 
                 if (evts.size() != 2) {
-                    info("Wrong events collection size (will retry in 1000 ms).");
+                    info("Wrong events collection size (will retry in 1000 ms): " + evts.size());
 
                     Thread.sleep(1000);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ec62ccc3/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionAbstractTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionAbstractTest.java
index c307bd9..5aa3cc7 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionAbstractTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionAbstractTest.java
@@ -211,7 +211,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends GridCacheEvictionP
     }
 
     /** @throws Exception If failed. */
-    public void _testPartitionedNearEnabled() throws Exception { // TODO GG-9141
+    public void testPartitionedNearEnabled() throws Exception {
         mode = PARTITIONED;
         nearEnabled = true;
         nearMax = 3;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ec62ccc3/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java
index d292d55..b088ecc 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java
@@ -98,7 +98,7 @@ public class GridCacheEvictionFilterSelfTest extends GridCommonAbstractTest {
     }
 
     /** @throws Exception If failed. */
-    public void _testPartitioned() throws Exception { // TODO GG-9141
+    public void testPartitioned() throws Exception {
         mode = PARTITIONED;
         nearEnabled = true;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ec62ccc3/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java
index a90fb8e..b7a2eec 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java
@@ -212,7 +212,7 @@ public class GridCacheRandomEvictionPolicySelfTest extends
     }
 
     /** {@inheritDoc} */
-    @Override public void _testPartitionedNearEnabled() throws Exception {
+    @Override public void testPartitionedNearEnabled() throws Exception {
         // No-op.
     }