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));