ignite-1561

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

Branch: refs/heads/ignite-1561-1
Commit: 2610fc0b86d5335e92495f53f8ce5232eb528122
Parents: 11d0d9c
Author: sboikov <sboi...@gridgain.com>
Authored: Tue Apr 18 16:58:53 2017 +0300
Committer: sboikov <sboi...@gridgain.com>
Committed: Tue Apr 18 17:58:57 2017 +0300

----------------------------------------------------------------------
 .../cache/GridCacheSharedContext.java           |  6 +--
 .../processors/cache/GridCacheUtils.java        | 31 +++++++------
 .../distributed/GridDistributedTxMapping.java   | 33 +------------
 .../GridDistributedTxRemoteAdapter.java         |  2 +-
 .../cache/distributed/dht/GridDhtTxLocal.java   |  2 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |  2 +
 ...arOptimisticSerializableTxPrepareFuture.java | 49 ++++++++------------
 .../near/GridNearOptimisticTxPrepareFuture.java | 14 +++---
 .../GridNearPessimisticTxPrepareFuture.java     | 11 +++--
 .../cache/distributed/near/GridNearTxLocal.java | 31 +++----------
 .../cache/transactions/IgniteTxHandler.java     |  1 +
 .../transactions/IgniteTxLocalAdapter.java      |  5 +-
 .../cache/transactions/IgniteTxManager.java     |  7 +--
 .../cache/transactions/IgniteTxStateImpl.java   | 36 +++++++-------
 .../lang/gridfunc/PredicateCollectionView.java  |  1 -
 .../util/lang/gridfunc/PredicateMapView.java    |  6 ---
 .../util/lang/gridfunc/PredicateSetView.java    |  6 ---
 .../lang/gridfunc/ReadOnlyCollectionView.java   |  6 ---
 .../lang/gridfunc/ReadOnlyCollectionView2X.java |  6 ---
 .../lang/gridfunc/TransformCollectionView.java  |  2 +-
 .../util/lang/gridfunc/TransformMapView.java    |  6 ---
 ...sCacheTxNearEnabledRandomOperationsTest.java | 28 +++++++++++
 .../cache/CrossCacheTxRandomOperationsTest.java | 23 +++++++--
 .../testsuites/IgniteCacheTestSuite2.java       |  2 +
 24 files changed, 141 insertions(+), 175 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
index ad9eeb1..8a423e4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
@@ -52,7 +52,7 @@ import 
org.apache.ignite.internal.processors.cache.transactions.TransactionMetri
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import 
org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager;
 import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor;
-import org.apache.ignite.internal.util.GridLongList;
+import org.apache.ignite.internal.util.GridIntList;
 import org.apache.ignite.internal.util.future.GridCompoundFuture;
 import org.apache.ignite.internal.util.future.GridFinishedFuture;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
@@ -740,7 +740,7 @@ public class GridCacheSharedContext<K, V> {
      * @param cacheCtx Cache context.
      * @return Error message if transactions are incompatible.
      */
-    @Nullable public String verifyTxCompatibility(IgniteInternalTx tx, 
GridLongList activeCacheIds,
+    @Nullable public String verifyTxCompatibility(IgniteInternalTx tx, 
GridIntList activeCacheIds,
         GridCacheContext<K, V> cacheCtx) {
         if (cacheCtx.systemTx() && !tx.system())
             return "system cache can be enlisted only in system transaction";
@@ -749,7 +749,7 @@ public class GridCacheSharedContext<K, V> {
             return "non-system cache can't be enlisted in system transaction";
 
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             GridCacheContext<K, V> activeCacheCtx = cacheContext(cacheId);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index 9ccc338..51a95a6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -211,14 +211,6 @@ public class GridCacheUtils {
     /** Default transaction config. */
     private static final TransactionConfiguration DEFAULT_TX_CFG = new 
TransactionConfiguration();
 
-    /** Partition to state transformer. */
-    private static final IgniteClosure PART2STATE =
-        new C1<GridDhtLocalPartition, GridDhtPartitionState>() {
-            @Override public GridDhtPartitionState apply(GridDhtLocalPartition 
p) {
-                return p.state();
-            }
-        };
-
     /** Empty predicate array. */
     private static final IgnitePredicate[] EMPTY_FILTER = new 
IgnitePredicate[0];
 
@@ -253,7 +245,7 @@ public class GridCacheUtils {
         }
 
         @Override public String toString() {
-            return "Cache transaction read filter";
+            return "READ_FILTER";
         }
     };
 
@@ -264,7 +256,7 @@ public class GridCacheUtils {
         }
 
         @Override public String toString() {
-            return "Cache transaction read filter";
+            return "READ_FILTER_NEAR";
         }
     };
 
@@ -275,7 +267,7 @@ public class GridCacheUtils {
         }
 
         @Override public String toString() {
-            return "Cache transaction read filter";
+            return "READ_FILTER_COLOCATED";
         }
     };
 
@@ -286,7 +278,7 @@ public class GridCacheUtils {
         }
 
         @Override public String toString() {
-            return "Cache transaction write filter";
+            return "WRITE_FILTER";
         }
     };
 
@@ -297,7 +289,7 @@ public class GridCacheUtils {
         }
 
         @Override public String toString() {
-            return "Cache transaction write filter";
+            return "WRITE_FILTER_NEAR";
         }
     };
 
@@ -308,7 +300,18 @@ public class GridCacheUtils {
         }
 
         @Override public String toString() {
-            return "Cache transaction write filter";
+            return "WRITE_FILTER_COLOCATED";
+        }
+    };
+
+    /** Write filter. */
+    public static final IgnitePredicate FILTER_NEAR_CACHE_ENTRY = new 
P1<IgniteTxEntry>() {
+        @Override public boolean apply(IgniteTxEntry e) {
+            return e.context().isNear();
+        }
+
+        @Override public String toString() {
+            return "FILTER_NEAR_CACHE_ENTRY";
         }
     };
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxMapping.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxMapping.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxMapping.java
index 8e97922..60930b8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxMapping.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxMapping.java
@@ -17,11 +17,9 @@
 
 package org.apache.ignite.internal.processors.cache.distributed;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
-import java.util.List;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey;
@@ -43,7 +41,6 @@ public class GridDistributedTxMapping {
 
     /** Entries. */
     @GridToStringInclude
-    // TODO: change to List?
     private Collection<IgniteTxEntry> entries;
 
     /** Explicit lock flag. */
@@ -70,23 +67,6 @@ public class GridDistributedTxMapping {
         entries = new LinkedHashSet<>();
     }
 
-    public GridDistributedTxMapping copy(boolean colocatedEntriesOnly) {
-        assert !colocatedEntriesOnly || hasColocatedCacheEntries();
-
-        GridDistributedTxMapping res = new GridDistributedTxMapping(primary);
-
-        res.clientFirst = clientFirst;
-        res.explicitLock = explicitLock;
-        res.last = last;
-
-        for (IgniteTxEntry entry : entries) {
-            if (!colocatedEntriesOnly || !entry.context().isNear())
-                res.add(entry);
-        }
-
-        return res;
-    }
-
     /**
      * @return {@code True} if this is last mapping for node.
      */
@@ -146,19 +126,10 @@ public class GridDistributedTxMapping {
     /**
      * @return Near cache entries.
      */
-    @Nullable public List<IgniteTxEntry> nearCacheEntries() {
+    @Nullable public Collection<IgniteTxEntry> nearCacheEntries() {
         assert nearEntries > 0;
 
-        // TODO IGNITE-1561.
-
-        List<IgniteTxEntry> nearCacheEntries = new ArrayList<>();
-
-        for (IgniteTxEntry e : entries) {
-            if (e.context().isNear())
-                nearCacheEntries.add(e);
-        }
-
-        return nearCacheEntries;
+        return F.view(entries, CU.FILTER_NEAR_CACHE_ENTRY);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
index de8b29e..9cb04d4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
@@ -387,7 +387,7 @@ public abstract class GridDistributedTxRemoteAdapter 
extends IgniteTxAdapter
         }
 
         try {
-            cctx.tm().prepareTx(this);
+            cctx.tm().prepareTx(this, null);
 
             if (pessimistic() || isSystemInvalidate())
                 state(PREPARED);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
index b1c7e5b..26f08fa 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
@@ -399,7 +399,7 @@ public class GridDhtTxLocal extends GridDhtTxLocalAdapter 
implements GridCacheMa
                     addEntry(msgId, e);
             }
 
-            userPrepare();
+            userPrepare(null);
 
             // Make sure to add future before calling prepare on it.
             cctx.mvcc().addFuture(fut);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
index 6e7b324..464df6e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
@@ -920,6 +920,8 @@ public final class GridDhtTxPrepareFuture extends 
GridCacheCompoundFuture<Ignite
             if (res.hasOwnedValue(ver.getKey()))
                 continue;
 
+            assert txEntry != null : ver;
+
             GridCacheContext cacheCtx = txEntry.context();
 
             while (true) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
index 2ce7802..a2c28b4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.processors.cache.distributed.near;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -56,7 +55,6 @@ import org.apache.ignite.internal.util.typedef.P1;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteReducer;
 import org.jetbrains.annotations.Nullable;
 
@@ -342,22 +340,18 @@ public class 
GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim
 
         Map<UUID, GridDistributedTxMapping> mappings = new HashMap<>();
 
-        boolean nearEntries = false;
+        boolean hasNearCache = false;
 
         for (IgniteTxEntry write : writes) {
             map(write, topVer, mappings, txMapping, remap, topLocked);
 
             if (write.context().isNear())
-                nearEntries = true;
+                hasNearCache = true;
         }
 
-        for (IgniteTxEntry read : reads) {
+        for (IgniteTxEntry read : reads)
             map(read, topVer, mappings, txMapping, remap, topLocked);
 
-            if (read.context().isNear())
-                nearEntries = true;
-        }
-
         if (keyLockFut != null)
             keyLockFut.onAllKeysAdded();
 
@@ -374,7 +368,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
 
         tx.transactionNodes(txMapping.transactionNodes());
 
-        if (!nearEntries)
+        if (!hasNearCache)
             checkOnePhase(txMapping);
 
         MiniFuture locNearEntriesFut = null;
@@ -408,7 +402,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
 
             MiniFuture fut = (MiniFuture)fut0;
 
-            IgniteCheckedException err = prepare(fut, txMapping, 
locNearEntriesFut);
+            IgniteCheckedException err = prepare(fut, 
txMapping.transactionNodes(), locNearEntriesFut);
 
             if (err != null) {
                 while (it.hasNext()) {
@@ -442,12 +436,12 @@ public class 
GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim
 
     /**
      * @param fut Mini future.
-     * @param txMapping
-     * @param locNearEntriesFut
+     * @param txNodes Tx nodes.
+     * @param locNearEntriesFut Local future for near cache entries prepare.
      * @return Prepare error if any.
      */
     @Nullable private IgniteCheckedException prepare(final MiniFuture fut,
-        GridDhtTxMapping txMapping,
+        Map<UUID, Collection<UUID>> txNodes,
         @Nullable MiniFuture locNearEntriesFut) {
         GridDistributedTxMapping m = fut.mapping();
 
@@ -466,9 +460,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
         // Must lock near entries separately.
         if (m.hasNearCacheEntries()) {
             try {
-                tx.optimisticLockEntries(m.nearCacheEntries());
-
-                cctx.tm().prepareTx(tx);
+                cctx.tm().prepareTx(tx, m.nearCacheEntries());
             }
             catch (IgniteCheckedException e) {
                 fut.onResult(e);
@@ -482,7 +474,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
             if (locNearEntriesFut != null) {
                 boolean nearEntries = fut == locNearEntriesFut;
 
-                GridNearTxPrepareRequest req = 
createRequest(txMapping.transactionNodes(),
+                GridNearTxPrepareRequest req = createRequest(txNodes,
                     fut,
                     timeout,
                     nearEntries ? m.nearEntriesReads() : 
m.colocatedEntriesReads(),
@@ -491,7 +483,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
                 prepareLocal(req, fut, nearEntries);
             }
             else {
-                GridNearTxPrepareRequest req = 
createRequest(txMapping.transactionNodes(),
+                GridNearTxPrepareRequest req = createRequest(txNodes,
                     fut,
                     timeout,
                     m.reads(),
@@ -502,7 +494,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
         }
         else {
             try {
-                GridNearTxPrepareRequest req = 
createRequest(txMapping.transactionNodes(),
+                GridNearTxPrepareRequest req = createRequest(txNodes,
                     fut,
                     timeout,
                     m.reads(),
@@ -528,11 +520,11 @@ public class 
GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim
     }
 
     /**
-     * @param txNodes
-     * @param fut
-     * @param timeout
-     * @param reads
-     * @param writes
+     * @param txNodes Tx nodes.
+     * @param fut Future.
+     * @param timeout Timeout.
+     * @param reads Read entries.
+     * @param writes Write entries.
      * @return Request.
      */
     private GridNearTxPrepareRequest createRequest(
@@ -562,7 +554,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
             m.clientFirst(),
             tx.activeCachesDeploymentEnabled());
 
-        for (IgniteTxEntry txEntry : m.entries()) {
+        for (IgniteTxEntry txEntry : writes) {
             if (txEntry.op() == TRANSFORM)
                 req.addDhtVersion(txEntry.txKey(), null);
         }
@@ -600,6 +592,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
      * @param entry Transaction entry.
      * @param topVer Topology version.
      * @param curMapping Current mapping.
+     * @param txMapping Mapping.
      * @param remap Remap flag.
      * @param topLocked Topology locked flag.
      */
@@ -762,9 +755,6 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
      *
      */
     private static class MiniFuture extends 
GridFutureAdapter<GridNearTxPrepareResponse> {
-        /** */
-        private static final long serialVersionUID = 0L;
-
         /** Receive result flag updater. */
         private static AtomicIntegerFieldUpdater<MiniFuture> RCV_RES_UPD =
             AtomicIntegerFieldUpdater.newUpdater(MiniFuture.class, "rcvRes");
@@ -852,6 +842,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture 
extends GridNearOptim
 
         /**
          * @param res Result callback.
+         * @param updateMapping Update mapping flag.
          */
         @SuppressWarnings({"unchecked", "ThrowableResultOfMethodCallIgnored"})
         void onResult(final GridNearTxPrepareResponse res, boolean 
updateMapping) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
index c9db422..f4ce1ac 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
@@ -433,7 +433,7 @@ public class GridNearOptimisticTxPrepareFuture extends 
GridNearOptimisticTxPrepa
 
                 assert !primary.isLocal() || 
!cctx.kernalContext().clientNode();
 
-                // Minor optimization: on client node can not have mapping for 
local node.
+                // Minor optimization to not create MappingKey: on client node 
can not have mapping for local node.
                 Object key =  cctx.kernalContext().clientNode() ? primary.id() 
:
                     new MappingKey(primary.id(), primary.isLocal() && 
updated.hasNearCacheEntries());
 
@@ -536,12 +536,12 @@ public class GridNearOptimisticTxPrepareFuture extends 
GridNearOptimisticTxPrepa
                 // Must lock near entries separately.
                 if (m.hasNearCacheEntries()) {
                     try {
-                        tx.optimisticLockEntries(m.nearCacheEntries());
-
-                        cctx.tm().prepareTx(tx);
+                        cctx.tm().prepareTx(tx, m.nearCacheEntries());
                     }
                     catch (IgniteCheckedException e) {
                         onError(e, false);
+
+                        return;
                     }
                 }
 
@@ -551,11 +551,9 @@ public class GridNearOptimisticTxPrepareFuture extends 
GridNearOptimisticTxPrepa
 
                 add(fut); // Append new future.
 
-                // If this is the primary node for the keys.
                 if (n.isLocal()) {
-                    // At this point, if any new node joined, then it is
-                    // waiting for this transaction to complete, so
-                    // partition reassignments are not possible here.
+                    assert !(m.hasColocatedCacheEntries() && 
m.hasNearCacheEntries()) : m;
+
                     IgniteInternalFuture<GridNearTxPrepareResponse> prepFut =
                         m.hasNearCacheEntries() ? 
cctx.tm().txHandler().prepareNearTx(n.id(), req, true)
                         : cctx.tm().txHandler().prepareColocatedTx(tx, req);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
index af1d651..e934319 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.cache.distributed.near;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -168,7 +169,7 @@ public class GridNearPessimisticTxPrepareFuture extends 
GridNearTxPrepareFutureA
         }
 
         try {
-            tx.userPrepare();
+            tx.userPrepare(Collections.<IgniteTxEntry>emptyList());
 
             cctx.mvcc().addFuture(this);
 
@@ -211,7 +212,7 @@ public class GridNearPessimisticTxPrepareFuture extends 
GridNearTxPrepareFutureA
             false,
             tx.activeCachesDeploymentEnabled());
 
-        for (IgniteTxEntry txEntry : m.entries()) {
+        for (IgniteTxEntry txEntry : writes) {
             if (txEntry.op() == TRANSFORM)
                 req.addDhtVersion(txEntry.txKey(), null);
         }
@@ -268,6 +269,9 @@ public class GridNearPessimisticTxPrepareFuture extends 
GridNearTxPrepareFutureA
 
             GridCacheContext cacheCtx = txEntry.context();
 
+            if (cacheCtx.isNear())
+                hasNearCache = true;
+
             List<ClusterNode> nodes;
 
             if (!cacheCtx.isLocal()) {
@@ -282,9 +286,6 @@ public class GridNearPessimisticTxPrepareFuture extends 
GridNearTxPrepareFutureA
 
             ClusterNode primary = nodes.get(0);
 
-            if (cacheCtx.isNear())
-                hasNearCache = true;
-
             GridDistributedTxMapping nodeMapping = mappings.get(primary.id());
 
             if (nodeMapping == null)

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
index 5f60724..c9f72da 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
@@ -25,7 +25,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
@@ -152,9 +151,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter 
implements AutoClosea
     @GridToStringExclude
     private volatile GridNearTxFinishFuture rollbackFut;
 
-    /** Entries to lock on next step of prepare stage. */
-    private Collection<IgniteTxEntry> optimisticLockEntries = 
Collections.emptyList();
-
     /** True if transaction contains near cache entries mapped to local node. 
*/
     private boolean nearLocallyMapped;
 
@@ -2426,14 +2422,7 @@ public class GridNearTxLocal extends 
GridDhtTxLocalAdapter implements AutoClosea
 
     /** {@inheritDoc} */
     @Override public Collection<IgniteTxEntry> optimisticLockEntries() {
-        return optimisticLockEntries;
-    }
-
-    /**
-     * @param optimisticLockEntries Optimistic lock entries.
-     */
-    void optimisticLockEntries(Collection<IgniteTxEntry> 
optimisticLockEntries) {
-        this.optimisticLockEntries = optimisticLockEntries;
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -2930,18 +2919,16 @@ public class GridNearTxLocal extends 
GridDhtTxLocalAdapter implements AutoClosea
         Collection<GridCacheVersion> committedVers,
         Collection<GridCacheVersion> rolledbackVers)
     {
-        List<IgniteTxEntry> nearEntries = mapping.nearCacheEntries();
-
-        assert nearEntries != null;
+        assert mapping.hasNearCacheEntries() : mapping;
 
         // Process writes, then reads.
-        for (IgniteTxEntry txEntry : nearEntries) {
-            if (CU.writes().apply(txEntry))
+        for (IgniteTxEntry txEntry : mapping.entries()) {
+            if (CU.WRITE_FILTER_NEAR.apply(txEntry))
                 readyNearLock(txEntry, mapping.dhtVersion(), pendingVers, 
committedVers, rolledbackVers);
         }
 
-        for (IgniteTxEntry txEntry : nearEntries) {
-            if (CU.reads().apply(txEntry))
+        for (IgniteTxEntry txEntry : mapping.entries()) {
+            if (CU.READ_FILTER_NEAR.apply(txEntry))
                 readyNearLock(txEntry, mapping.dhtVersion(), pendingVers, 
committedVers, rolledbackVers);
         }
     }
@@ -3334,11 +3321,7 @@ public class GridNearTxLocal extends 
GridDhtTxLocalAdapter implements AutoClosea
             needReturnValue() && implicit());
 
         try {
-            // At this point all the entries passed in must be enlisted in 
transaction because this is an
-            // optimistic transaction.
-            optimisticLockEntries = (serializable() && optimistic()) ? 
F.concat(false, writes, reads) : writes;
-
-            userPrepare();
+            userPrepare((serializable() && optimistic()) ? F.concat(false, 
writes, reads) : writes);
 
             // Make sure to add future before calling prepare on it.
             cctx.mvcc().addFuture(fut);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
index 00a991e..a591517 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxHandler.java
@@ -287,6 +287,7 @@ public class IgniteTxHandler {
         final GridNearTxPrepareRequest req,
         boolean locReq
     ) {
+        // Make sure not to provide Near entries to DHT cache.
         if (locReq)
             req.cloneEntries();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
index 0490e6e..5a708d7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
@@ -401,10 +401,11 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter implements Ig
     }
 
     /**
+     * @param entries Entries to lock or {@code null} if use default {@link 
IgniteInternalTx#optimisticLockEntries()}.
      * @throws IgniteCheckedException If prepare step failed.
      */
     @SuppressWarnings({"CatchGenericClass"})
-    public void userPrepare() throws IgniteCheckedException {
+    public void userPrepare(@Nullable Collection<IgniteTxEntry> entries) 
throws IgniteCheckedException {
         if (state() != PREPARING) {
             if (remainingTime() == -1)
                 throw new IgniteTxTimeoutCheckedException("Transaction timed 
out: " + this);
@@ -420,7 +421,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter implements Ig
         checkValid();
 
         try {
-            cctx.tm().prepareTx(this);
+            cctx.tm().prepareTx(this, entries);
         }
         catch (IgniteCheckedException e) {
             throw e;

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
index da49c06..2da8dee 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
@@ -774,12 +774,13 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
     }
 
     /**
-     * Handles prepare stage of 2PC.
+     * Handles prepare stage.
      *
      * @param tx Transaction to prepare.
+     * @param entries Entries to lock or {@code null} if use default {@link 
IgniteInternalTx#optimisticLockEntries()}.
      * @throws IgniteCheckedException If preparation failed.
      */
-    public void prepareTx(IgniteInternalTx tx) throws IgniteCheckedException {
+    public void prepareTx(IgniteInternalTx tx, @Nullable 
Collection<IgniteTxEntry> entries) throws IgniteCheckedException {
         if (tx.state() == MARKED_ROLLBACK) {
             if (tx.remainingTime() == -1)
                 throw new IgniteTxTimeoutCheckedException("Transaction timed 
out: " + this);
@@ -799,7 +800,7 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
         // Optimistic.
         assert tx.optimistic() || !tx.local();
 
-        if (!lockMultiple(tx, tx.optimisticLockEntries())) {
+        if (!lockMultiple(tx, entries != null ? entries : 
tx.optimisticLockEntries())) {
             tx.setRollbackOnly();
 
             throw new IgniteTxOptimisticCheckedException("Failed to prepare 
transaction (lock conflict): " + tx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
index c21eb44..3679208 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
@@ -35,7 +35,7 @@ import 
org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture;
 import org.apache.ignite.internal.processors.cache.store.CacheStoreManager;
-import org.apache.ignite.internal.util.GridLongList;
+import org.apache.ignite.internal.util.GridIntList;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
@@ -54,7 +54,7 @@ import static 
org.apache.ignite.cache.CacheWriteSynchronizationMode.PRIMARY_SYNC
  */
 public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter {
     /** Active cache IDs. */
-    private GridLongList activeCacheIds = new GridLongList();
+    private GridIntList activeCacheIds = new GridIntList();
 
     /** Per-transaction read map. */
     @GridToStringInclude
@@ -79,13 +79,13 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
 
     /** {@inheritDoc} */
     @Nullable @Override public Integer firstCacheId() {
-        return activeCacheIds.isEmpty() ? null : (int)activeCacheIds.get(0);
+        return activeCacheIds.isEmpty() ? null : activeCacheIds.get(0);
     }
 
     /** {@inheritDoc} */
     @Override public void unwindEvicts(GridCacheSharedContext cctx) {
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int) activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             GridCacheContext ctx = cctx.cacheContext(cacheId);
 
@@ -97,7 +97,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
     /** {@inheritDoc} */
     @Nullable @Override public GridCacheContext 
singleCacheContext(GridCacheSharedContext cctx) {
         if (activeCacheIds.size() == 1) {
-            int cacheId = (int)activeCacheIds.get(0);
+            int cacheId = activeCacheIds.get(0);
 
             return cctx.cacheContext(cacheId);
         }
@@ -108,7 +108,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
     /** {@inheritDoc} */
     @Override public void awaitLastFut(GridCacheSharedContext cctx) {
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             cctx.cacheContext(cacheId).cache().awaitLastFut();
         }
@@ -159,7 +159,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
         }
 
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId);
 
@@ -177,7 +177,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
         CacheWriteSynchronizationMode syncMode = 
CacheWriteSynchronizationMode.FULL_ASYNC;
 
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             CacheWriteSynchronizationMode cacheSyncMode =
                 
cctx.cacheContext(cacheId).config().getWriteSynchronizationMode();
@@ -204,7 +204,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
     /** {@inheritDoc} */
     @Override public boolean hasNearCache(GridCacheSharedContext cctx) {
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             GridCacheContext cacheCtx = cctx.cacheContext(cacheId);
 
@@ -238,7 +238,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
                 int idx = 0;
 
                 for (int i = 0; i < activeCacheIds.size(); i++) {
-                    int activeCacheId = (int)activeCacheIds.get(i);
+                    int activeCacheId = activeCacheIds.get(i);
 
                     cacheNames.append(cctx.cacheContext(activeCacheId).name());
 
@@ -269,7 +269,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
         GridCacheContext<?, ?> nonLocCtx = null;
 
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId);
 
@@ -301,7 +301,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
             GridCacheContext<?, ?> nonLocCtx = null;
 
             for (int i = 0; i < activeCacheIds.size(); i++) {
-                int cacheId = (int)activeCacheIds.get(i);
+                int cacheId = activeCacheIds.get(i);
 
                 GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId);
 
@@ -321,7 +321,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
     @Override public boolean storeWriteThrough(GridCacheSharedContext cctx) {
         if (!activeCacheIds.isEmpty()) {
             for (int i = 0; i < activeCacheIds.size(); i++) {
-                int cacheId = (int)activeCacheIds.get(i);
+                int cacheId = activeCacheIds.get(i);
 
                 CacheStoreManager store = cctx.cacheContext(cacheId).store();
 
@@ -336,7 +336,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
     /** {@inheritDoc} */
     @Override public boolean hasInterceptor(GridCacheSharedContext cctx) {
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             CacheInterceptor interceptor = 
cctx.cacheContext(cacheId).config().getInterceptor();
 
@@ -349,13 +349,13 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
 
     /** {@inheritDoc} */
     @Override public Collection<CacheStoreManager> 
stores(GridCacheSharedContext cctx) {
-        GridLongList cacheIds = activeCacheIds;
+        GridIntList cacheIds = activeCacheIds;
 
         if (!cacheIds.isEmpty()) {
             Collection<CacheStoreManager> stores = new 
ArrayList<>(cacheIds.size());
 
             for (int i = 0; i < cacheIds.size(); i++) {
-                int cacheId = (int)cacheIds.get(i);
+                int cacheId = cacheIds.get(i);
 
                 CacheStoreManager store = cctx.cacheContext(cacheId).store();
 
@@ -372,7 +372,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
     /** {@inheritDoc} */
     @Override public void onTxEnd(GridCacheSharedContext cctx, 
IgniteInternalTx tx, boolean commit) {
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int)activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             GridCacheContext cacheCtx = cctx.cacheContext(cacheId);
 
@@ -482,7 +482,7 @@ public class IgniteTxStateImpl extends 
IgniteTxLocalStateAdapter {
         assert discoCache != null : topVer;
 
         for (int i = 0; i < activeCacheIds.size(); i++) {
-            int cacheId = (int) activeCacheIds.get(i);
+            int cacheId = activeCacheIds.get(i);
 
             if (discoCache.hasNearCache(cacheId))
                 return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
index 348a37c..ff0105b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
@@ -22,7 +22,6 @@ import java.util.Iterator;
 import org.apache.ignite.internal.util.GridSerializableCollection;
 import org.apache.ignite.internal.util.lang.GridFunc;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.NotNull;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
index d5b97a6..01e6d8a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
@@ -24,7 +24,6 @@ import org.apache.ignite.internal.util.GridSerializableMap;
 import org.apache.ignite.internal.util.GridSerializableSet;
 import org.apache.ignite.internal.util.lang.GridFunc;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -113,9 +112,4 @@ public class PredicateMapView<K, V> extends 
GridSerializableMap<K, V> {
     @Override public boolean containsKey(Object key) {
         return GridFunc.isAll((K)key, preds) && map.containsKey(key);
     }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(PredicateMapView.class, this);
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
index 99fc2fd..8937107 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
@@ -23,7 +23,6 @@ import org.apache.ignite.internal.util.GridSerializableMap;
 import org.apache.ignite.internal.util.GridSerializableSet;
 import org.apache.ignite.internal.util.lang.GridFunc;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteClosure;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.NotNull;
@@ -145,9 +144,4 @@ public class PredicateSetView<K, V> extends 
GridSerializableMap<K, V> {
     @Override public boolean containsKey(Object key) {
         return GridFunc.isAll((K)key, preds) && set.contains(key);
     }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(PredicateSetView.class, this);
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
index 8186914..d8aa1d3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
@@ -22,7 +22,6 @@ import java.util.Iterator;
 import org.apache.ignite.internal.util.GridSerializableCollection;
 import org.apache.ignite.internal.util.GridSerializableIterator;
 import org.apache.ignite.internal.util.lang.GridFunc;
-import org.apache.ignite.internal.util.typedef.internal.S;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -87,9 +86,4 @@ public class ReadOnlyCollectionView<T> extends 
GridSerializableCollection<T> {
     @Override public boolean equals(Object obj) {
         return obj instanceof Collection && GridFunc.eqNotOrdered(this, 
(Collection)obj);
     }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(ReadOnlyCollectionView.class, this);
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
index 82ec651..7a60e17 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
@@ -22,7 +22,6 @@ import java.util.Iterator;
 import org.apache.ignite.internal.util.GridSerializableCollection;
 import org.apache.ignite.internal.util.GridSerializableIterator;
 import org.apache.ignite.internal.util.lang.GridFunc;
-import org.apache.ignite.internal.util.typedef.internal.S;
 import org.jetbrains.annotations.NotNull;
 
 /**
@@ -92,9 +91,4 @@ public class ReadOnlyCollectionView2X<T> extends 
GridSerializableCollection<T> {
     @Override public boolean equals(Object obj) {
         return obj instanceof Collection && GridFunc.eqNotOrdered(this, 
(Collection<?>)obj);
     }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(ReadOnlyCollectionView2X.class, this);
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
index 735f2d0..10e9ec5 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.Iterator;
 import org.apache.ignite.internal.util.GridSerializableCollection;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteClosure;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.NotNull;
@@ -50,6 +49,7 @@ public class TransformCollectionView<T1, T2> extends 
GridSerializableCollection<
      * @param clos Transformation closure.
      * @param preds Optional predicated. If predicates are not provided - all 
elements will be in the view.
      */
+    @SafeVarargs
     public TransformCollectionView(Collection<? extends T2> col,
         IgniteClosure<? super T2, T1> clos, IgnitePredicate<? super T2>... 
preds) {
         this.col = col;

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
index 91b8302..a089f67 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
@@ -24,7 +24,6 @@ import org.apache.ignite.internal.util.GridSerializableMap;
 import org.apache.ignite.internal.util.GridSerializableSet;
 import org.apache.ignite.internal.util.lang.GridFunc;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteClosure;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.NotNull;
@@ -160,9 +159,4 @@ public class TransformMapView<K, V1, V> extends 
GridSerializableMap<K, V1> {
     @Override public boolean containsKey(Object key) {
         return GridFunc.isAll((K)key, preds) && map.containsKey(key);
     }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(TransformMapView.class, this);
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxNearEnabledRandomOperationsTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxNearEnabledRandomOperationsTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxNearEnabledRandomOperationsTest.java
new file mode 100644
index 0000000..73985a0
--- /dev/null
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxNearEnabledRandomOperationsTest.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+/**
+ *
+ */
+public class CrossCacheTxNearEnabledRandomOperationsTest extends 
CrossCacheTxRandomOperationsTest {
+    /** {@inheritDoc} */
+    @Override protected boolean nearCacheEnabled() {
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxRandomOperationsTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxRandomOperationsTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxRandomOperationsTest.java
index 1194a27..abd126c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxRandomOperationsTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CrossCacheTxRandomOperationsTest.java
@@ -33,6 +33,7 @@ import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.NearCacheConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
@@ -106,6 +107,13 @@ public class CrossCacheTxRandomOperationsTest extends 
GridCommonAbstractTest {
     }
 
     /**
+     * @return Test near cache flag.
+     */
+    protected boolean nearCacheEnabled() {
+        return false;
+    }
+
+    /**
      * @throws Exception If failed.
      */
     public void testTxOperations() throws Exception {
@@ -144,11 +152,13 @@ public class CrossCacheTxRandomOperationsTest extends 
GridCommonAbstractTest {
      * @param name Cache name.
      * @param cacheMode Cache mode.
      * @param writeSync Write synchronization mode.
+     * @param nearCache Near cache flag.
      * @return Cache configuration.
      */
     protected CacheConfiguration cacheConfiguration(String name,
         CacheMode cacheMode,
-        CacheWriteSynchronizationMode writeSync) {
+        CacheWriteSynchronizationMode writeSync,
+        boolean nearCache) {
         CacheConfiguration ccfg = new CacheConfiguration();
 
         ccfg.setName(name);
@@ -161,20 +171,25 @@ public class CrossCacheTxRandomOperationsTest extends 
GridCommonAbstractTest {
 
         ccfg.setAffinity(new RendezvousAffinityFunction());
 
+        if (nearCache)
+            ccfg.setNearConfiguration(new NearCacheConfiguration());
+
         return ccfg;
     }
 
     /**
      * @param cacheMode Cache mode.
      * @param writeSync Write synchronization mode.
+     * @param nearCache Near cache flag.
      * @param ignite Node to use.
      * @param name Cache name.
      */
     protected void createCache(CacheMode cacheMode,
         CacheWriteSynchronizationMode writeSync,
+        boolean nearCache,
         Ignite ignite,
         String name) {
-        ignite.createCache(cacheConfiguration(name, cacheMode, writeSync));
+        ignite.createCache(cacheConfiguration(name, cacheMode, writeSync, 
nearCache));
     }
 
     /**
@@ -189,8 +204,8 @@ public class CrossCacheTxRandomOperationsTest extends 
GridCommonAbstractTest {
         Ignite ignite = ignite(0);
 
         try {
-            createCache(cacheMode, writeSync, ignite, CACHE1);
-            createCache(cacheMode, writeSync, ignite, CACHE2);
+            createCache(cacheMode, writeSync, nearCacheEnabled(), ignite, 
CACHE1);
+            createCache(cacheMode, writeSync, false, ignite, CACHE2);
 
             txOperations(PESSIMISTIC, REPEATABLE_READ, crossCacheTx, false);
             txOperations(PESSIMISTIC, REPEATABLE_READ, crossCacheTx, true);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2610fc0b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
 
b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
index e9cf028..62e6b78 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
@@ -29,6 +29,7 @@ import 
org.apache.ignite.internal.processors.cache.CacheEnumOperationsSingleNode
 import org.apache.ignite.internal.processors.cache.CacheEnumOperationsTest;
 import 
org.apache.ignite.internal.processors.cache.CacheExchangeMessageDuplicatedStateTest;
 import 
org.apache.ignite.internal.processors.cache.CacheMemoryPolicyConfigurationTest;
+import 
org.apache.ignite.internal.processors.cache.CrossCacheTxNearEnabledRandomOperationsTest;
 import 
org.apache.ignite.internal.processors.cache.CrossCacheTxRandomOperationsTest;
 import 
org.apache.ignite.internal.processors.cache.GridCacheAtomicMessageCountSelfTest;
 import 
org.apache.ignite.internal.processors.cache.GridCacheFinishPartitionsSelfTest;
@@ -242,6 +243,7 @@ public class IgniteCacheTestSuite2 extends TestSuite {
         suite.addTest(new 
TestSuite(IgniteAtomicCacheEntryProcessorNodeJoinTest.class));
         suite.addTest(new TestSuite(GridCacheNearTxForceKeyTest.class));
         suite.addTest(new TestSuite(CrossCacheTxRandomOperationsTest.class));
+        suite.addTest(new 
TestSuite(CrossCacheTxNearEnabledRandomOperationsTest.class));
         suite.addTest(new TestSuite(IgniteDynamicCacheAndNodeStop.class));
         suite.addTest(new TestSuite(CacheLockReleaseNodeLeaveTest.class));
         suite.addTest(new TestSuite(NearCacheSyncUpdateTest.class));

Reply via email to