Repository: ignite Updated Branches: refs/heads/ignite-1561-1 [created] ead80c01d
ignite-1561 Disable onePhase commit for tx with near cache Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ead80c01 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ead80c01 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ead80c01 Branch: refs/heads/ignite-1561-1 Commit: ead80c01daa607fdb4c1e4166607053d18d4875c Parents: 63001f1 Author: sboikov <[email protected]> Authored: Fri Apr 14 14:56:08 2017 +0300 Committer: sboikov <[email protected]> Committed: Fri Apr 14 18:03:44 2017 +0300 ---------------------------------------------------------------------- .../distributed/GridDistributedTxMapping.java | 41 +++++++++++++------- ...arOptimisticSerializableTxPrepareFuture.java | 9 ++--- .../near/GridNearOptimisticTxPrepareFuture.java | 22 ++++++----- .../GridNearPessimisticTxPrepareFuture.java | 22 ++++++----- .../near/GridNearTxFinishFuture.java | 6 +-- .../cache/distributed/near/GridNearTxLocal.java | 15 +++---- .../near/GridNearTxPrepareFutureAdapter.java | 4 +- .../IgniteTxImplicitSingleStateImpl.java | 6 +++ .../transactions/IgniteTxLocalAdapter.java | 2 +- .../cache/transactions/IgniteTxLocalState.java | 10 +++++ .../cache/transactions/IgniteTxState.java | 2 +- .../cache/transactions/IgniteTxStateImpl.java | 18 +++++++++ .../dht/IgniteCrossCacheTxSelfTest.java | 2 +- 13 files changed, 104 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/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 f8cec50..9d86244 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,9 +17,11 @@ 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; @@ -52,12 +54,12 @@ public class GridDistributedTxMapping { /** {@code True} if this is last mapping for node. */ private boolean last; - /** {@code True} if mapping is for near caches, {@code false} otherwise. */ - private boolean near; - /** {@code True} if this is first mapping for optimistic tx on client node. */ private boolean clientFirst; + /** */ + private boolean hasNear; + /** * @param primary Primary node. */ @@ -95,18 +97,8 @@ public class GridDistributedTxMapping { this.clientFirst = clientFirst; } - /** - * @return {@code True} if mapping is for near caches, {@code false} otherwise. - */ - public boolean near() { - return near; - } - - /** - * @param near {@code True} if mapping is for near caches, {@code false} otherwise. - */ - public void near(boolean near) { - this.near = near; + public boolean hasNearCacheEntries() { + return hasNear; } /** @@ -124,6 +116,22 @@ public class GridDistributedTxMapping { } /** + * @return Near cache entries. + */ + @Nullable public List<IgniteTxEntry> nearCacheEntries() { + assert hasNear; + + List<IgniteTxEntry> nearCacheEntries = new ArrayList<>(); + + for (IgniteTxEntry e : entries) { + if (e.context().isNear()) + nearCacheEntries.add(e); + } + + return nearCacheEntries; + } + + /** * @return {@code True} if lock is explicit. */ public boolean explicitLock() { @@ -173,6 +181,9 @@ public class GridDistributedTxMapping { * @param entry Adds entry. */ public void add(IgniteTxEntry entry) { + if (entry.context().isNear()) + hasNear = true; + entries.add(entry); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/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 cbd9d23..a54c65d 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 @@ -441,7 +441,7 @@ public class GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim timeout, m.reads(), m.writes(), - m.near(), + m.hasNearCacheEntries(), txMapping.transactionNodes(), m.last(), tx.onePhaseCommit(), @@ -459,9 +459,9 @@ public class GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim } // Must lock near entries separately. - if (m.near()) { + if (m.hasNearCacheEntries()) { try { - tx.optimisticLockEntries(m.entries()); + tx.optimisticLockEntries(m.nearCacheEntries()); tx.userPrepare(); } @@ -581,9 +581,6 @@ public class GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim tx.colocatedLocallyMapped(true); } - // Initialize near flag right away. - cur.near(cacheCtx.isNear()); - cur.clientFirst(!topLocked && cctx.kernalContext().clientNode()); cur.last(true); http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/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 bc47c13..26af91a 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 @@ -382,7 +382,8 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa tx.transactionNodes(txMapping.transactionNodes()); - checkOnePhase(txMapping); + if (!mapping.hasNearCacheEntries()) + checkOnePhase(txMapping); proceedPrepare(mapping, null); } @@ -409,11 +410,16 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa Queue<GridDistributedTxMapping> mappings = new ArrayDeque<>(); + boolean hasNearCache = false; + for (IgniteTxEntry write : writes) { write.clearEntryReadVersion(); GridDistributedTxMapping updated = map(write, topVer, cur, topLocked, remap); + if (updated.hasNearCacheEntries()) + hasNearCache = true; + if (cur != updated) { mappings.offer(updated); @@ -451,7 +457,8 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa tx.transactionNodes(txMapping.transactionNodes()); - checkOnePhase(txMapping); + if (!hasNearCache) + checkOnePhase(txMapping); proceedPrepare(mappings); } @@ -497,7 +504,7 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa timeout, null, m.writes(), - m.near(), + m.hasNearCacheEntries(), txMapping.transactionNodes(), m.last(), tx.onePhaseCommit(), @@ -515,9 +522,9 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa } // Must lock near entries separately. - if (m.near()) { + if (m.hasNearCacheEntries()) { try { - tx.optimisticLockEntries(req.writes()); + tx.optimisticLockEntries(m.nearCacheEntries()); tx.userPrepare(); } @@ -644,14 +651,11 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa } } - if (cur == null || !cur.primary().id().equals(primary.id()) || cur.near() != cacheCtx.isNear()) { + if (cur == null || !cur.primary().id().equals(primary.id())) { boolean clientFirst = cur == null && !topLocked && cctx.kernalContext().clientNode(); cur = new GridDistributedTxMapping(primary); - // Initialize near flag right away. - cur.near(cacheCtx.isNear()); - cur.clientFirst(clientFirst); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/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 cb15bca..f6e7d2a 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 @@ -184,12 +184,14 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA * */ private void preparePessimistic() { - Map<IgniteBiTuple<ClusterNode, Boolean>, GridDistributedTxMapping> mappings = new HashMap<>(); + Map<UUID, GridDistributedTxMapping> mappings = new HashMap<>(); AffinityTopologyVersion topVer = tx.topologyVersion(); GridDhtTxMapping txMapping = new GridDhtTxMapping(); + boolean hasNearCache = false; + for (IgniteTxEntry txEntry : tx.allEntries()) { txEntry.clearEntryReadVersion(); @@ -205,20 +207,19 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA else nodes = cacheCtx.affinity().nodesByKey(txEntry.key(), topVer); - ClusterNode primary = F.first(nodes); + assert !nodes.isEmpty(); - boolean near = cacheCtx.isNear(); + ClusterNode primary = nodes.get(0); - IgniteBiTuple<ClusterNode, Boolean> key = F.t(primary, near); + if (cacheCtx.isNear()) + hasNearCache = true; - GridDistributedTxMapping nodeMapping = mappings.get(key); + GridDistributedTxMapping nodeMapping = mappings.get(primary.id()); if (nodeMapping == null) { nodeMapping = new GridDistributedTxMapping(primary); - nodeMapping.near(cacheCtx.isNear()); - - mappings.put(key, nodeMapping); + mappings.put(primary.id(), nodeMapping); } txEntry.nodeId(primary.id()); @@ -230,7 +231,8 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA tx.transactionNodes(txMapping.transactionNodes()); - checkOnePhase(txMapping); + if (!hasNearCache) + checkOnePhase(txMapping); long timeout = tx.remainingTime(); @@ -252,7 +254,7 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA timeout, m.reads(), m.writes(), - m.near(), + m.hasNearCacheEntries(), txMapping.transactionNodes(), true, tx.onePhaseCommit(), http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java index 37be0fb..89874ab 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java @@ -642,7 +642,7 @@ public final class GridNearTxFinishFuture<K, V> extends GridCacheCompoundIdentit * @param mapping Mapping to finish. */ private void readyNearMappingFromBackup(GridDistributedTxMapping mapping) { - if (mapping.near()) { + if (mapping.hasNearCacheEntries()) { GridCacheVersion xidVer = tx.xidVersion(); mapping.dhtVersion(xidVer, xidVer); @@ -676,7 +676,7 @@ public final class GridNearTxFinishFuture<K, V> extends GridCacheCompoundIdentit private void finish(int miniId, GridDistributedTxMapping m, boolean commit) { ClusterNode n = m.primary(); - assert !m.empty(); + assert !m.empty() : m; CacheWriteSynchronizationMode syncMode = tx.syncMode(); @@ -698,7 +698,7 @@ public final class GridNearTxFinishFuture<K, V> extends GridCacheCompoundIdentit m.explicitLock(), tx.storeEnabled(), tx.topologyVersion(), - completedVer, // Reuse 'baseVersion' to do not add new fields in message. + completedVer, // Reuse 'baseVersion' to do not add new fields in message. null, null, tx.size(), http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/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 62af536..5f60724 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,6 +25,7 @@ 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; @@ -2862,8 +2863,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements AutoClosea if (m == null) { mappings.put(m = new GridDistributedTxMapping(primary)); - m.near(map.near()); - if (map.explicitLock()) m.markExplicitLock(); } @@ -2889,8 +2888,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements AutoClosea mappings.put(m); - m.near(map.near()); - if (map.explicitLock()) m.markExplicitLock(); @@ -2933,13 +2930,17 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements AutoClosea Collection<GridCacheVersion> committedVers, Collection<GridCacheVersion> rolledbackVers) { + List<IgniteTxEntry> nearEntries = mapping.nearCacheEntries(); + + assert nearEntries != null; + // Process writes, then reads. - for (IgniteTxEntry txEntry : mapping.entries()) { + for (IgniteTxEntry txEntry : nearEntries) { if (CU.writes().apply(txEntry)) readyNearLock(txEntry, mapping.dhtVersion(), pendingVers, committedVers, rolledbackVers); } - for (IgniteTxEntry txEntry : mapping.entries()) { + for (IgniteTxEntry txEntry : nearEntries) { if (CU.reads().apply(txEntry)) readyNearLock(txEntry, mapping.dhtVersion(), pendingVers, committedVers, rolledbackVers); } @@ -2952,7 +2953,7 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements AutoClosea * @param committedVers Committed versions. * @param rolledbackVers Rolled back versions. */ - void readyNearLock(IgniteTxEntry txEntry, + private void readyNearLock(IgniteTxEntry txEntry, GridCacheVersion dhtVer, Collection<GridCacheVersion> pendingVers, Collection<GridCacheVersion> committedVers, http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java index 7f1f5a2..f35324a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java @@ -172,7 +172,7 @@ public abstract class GridNearTxPrepareFutureAdapter extends Collection<UUID> backups = entry.getValue(); - if (backups.size() <= 1) + if (backups.size() <= 1 && !tx.txState().hasNearCacheConfigured(cctx, tx.topologyVersion())) tx.onePhaseCommit(true); } } @@ -261,7 +261,7 @@ public abstract class GridNearTxPrepareFutureAdapter extends if (map != null) map.dhtVersion(res.dhtVersion(), writeVer); - if (m.near()) + if (m.hasNearCacheEntries()) tx.readyNearLocks(m, res.pending(), res.committedVersions(), res.rolledbackVersions()); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java index 5743bfb..36f5f2f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java @@ -26,6 +26,7 @@ import java.util.Set; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.cache.CacheWriteSynchronizationMode; import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException; +import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; @@ -293,6 +294,11 @@ public class IgniteTxImplicitSingleStateImpl extends IgniteTxLocalStateAdapter { } /** {@inheritDoc} */ + @Override public boolean hasNearCacheConfigured(GridCacheSharedContext ctx, AffinityTopologyVersion topVer) { + return cacheCtx != null ? ctx.discovery().hasNearCache(cacheCtx.cacheId(), topVer) : false; + } + + /** {@inheritDoc} */ public String toString() { return S.toString(IgniteTxImplicitSingleStateImpl.class, this); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/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 a59ff51..0490e6e 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 @@ -225,7 +225,7 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter implements Ig } /** {@inheritDoc} */ - @Override public IgniteTxState txState() { + @Override public IgniteTxLocalState txState() { return txState; } http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalState.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalState.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalState.java index 123d396..fe9fcbd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalState.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalState.java @@ -17,6 +17,9 @@ package org.apache.ignite.internal.processors.cache.transactions; +import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; +import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; + /** * */ @@ -41,4 +44,11 @@ public interface IgniteTxLocalState extends IgniteTxState { * */ public void seal(); + + /** + * @param ctx Context. + * @param topVer Topology version. + * @return {@code True} if tx has cache with created near cache. + */ + public boolean hasNearCacheConfigured(GridCacheSharedContext ctx, AffinityTopologyVersion topVer); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java index 7a45b6e..ed2526e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java @@ -85,7 +85,7 @@ public interface IgniteTxState { public boolean hasNearCache(GridCacheSharedContext cctx); /** - * @param cacheCtx Ccntext. + * @param cacheCtx Context. * @param tx Transaction. * @throws IgniteCheckedException If cache check failed. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/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 304473e..c21eb44 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 @@ -28,6 +28,8 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.cache.CacheInterceptor; import org.apache.ignite.cache.CacheWriteSynchronizationMode; import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException; +import org.apache.ignite.internal.managers.discovery.DiscoCache; +import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; @@ -474,6 +476,22 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { } /** {@inheritDoc} */ + @Override public boolean hasNearCacheConfigured(GridCacheSharedContext ctx, AffinityTopologyVersion topVer) { + DiscoCache discoCache = ctx.discovery().discoCache(topVer); + + assert discoCache != null : topVer; + + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int) activeCacheIds.get(i); + + if (discoCache.hasNearCache(cacheId)) + return true; + } + + return false; + } + + /** {@inheritDoc} */ public String toString() { return S.toString(IgniteTxStateImpl.class, this); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ead80c01/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCrossCacheTxSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCrossCacheTxSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCrossCacheTxSelfTest.java index bfbafdb..273f0ca 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCrossCacheTxSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCrossCacheTxSelfTest.java @@ -70,7 +70,7 @@ public class IgniteCrossCacheTxSelfTest extends GridCommonAbstractTest { * @return Node count for this test. */ private int nodeCount() { - return 4; + return 2; } /**
