Ignite - Fixing cache tests.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/3ec08ec1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/3ec08ec1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/3ec08ec1 Branch: refs/heads/master Commit: 3ec08ec101f7ee8f0f486a686f21a42aef611bc6 Parents: 9f90d7d Author: Alexey Goncharuk <agoncha...@gridgain.com> Authored: Mon Dec 8 18:09:33 2014 -0800 Committer: Alexey Goncharuk <agoncha...@gridgain.com> Committed: Mon Dec 8 18:09:33 2014 -0800 ---------------------------------------------------------------------- .../processors/cache/GridCacheMvccManager.java | 31 +++++++++++++++----- .../processors/cache/GridCacheTxManager.java | 3 ++ .../GridCacheNodeFailureAbstractTest.java | 10 +++++-- .../bamboo/GridDataGridTestSuite.java | 14 ++++----- 4 files changed, 41 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3ec08ec1/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMvccManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMvccManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMvccManager.java index bedc33f..41c1c0c 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMvccManager.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMvccManager.java @@ -63,6 +63,10 @@ public class GridCacheMvccManager<K, V> extends GridCacheSharedManagerAdapter<K, @GridToStringExclude private final ConcurrentMap<GridCacheTxKey<K>, GridDistributedCacheEntry<K, V>> locked = newMap(); + /** Near locked keys. Need separate map because mvcc manager is shared between caches. */ + @GridToStringExclude + private final ConcurrentMap<GridCacheTxKey<K>, GridDistributedCacheEntry<K, V>> nearLocked = newMap(); + /** Active futures mapped by version ID. */ @GridToStringExclude private final ConcurrentMap<GridCacheVersion, Collection<GridCacheFuture<?>>> futs = newMap(); @@ -135,12 +139,18 @@ public class GridCacheMvccManager<K, V> extends GridCacheSharedManagerAdapter<K, /** {@inheritDoc} */ @Override public void onLocked(GridDistributedCacheEntry<K, V> entry) { - locked.put(entry.txKey(), entry); + if (entry.isNear()) + nearLocked.put(entry.txKey(), entry); + else + locked.put(entry.txKey(), entry); } /** {@inheritDoc} */ @Override public void onFreed(GridDistributedCacheEntry<K, V> entry) { - locked.remove(entry.txKey()); + if (entry.isNear()) + nearLocked.remove(entry.txKey()); + else + locked.remove(entry.txKey()); } }; @@ -155,7 +165,7 @@ public class GridCacheMvccManager<K, V> extends GridCacheSharedManagerAdapter<K, if (log.isDebugEnabled()) log.debug("Processing node left [nodeId=" + discoEvt.eventNode().id() + "]"); - for (GridDistributedCacheEntry<K, V> entry : locked.values()) { + for (GridDistributedCacheEntry<K, V> entry : locked()) { try { entry.removeExplicitNodeLocks(discoEvt.eventNode().id()); } @@ -508,6 +518,13 @@ public class GridCacheMvccManager<K, V> extends GridCacheSharedManagerAdapter<K, } /** + * @return Collection of all locked entries. + */ + private Collection<GridDistributedCacheEntry<K, V>> locked() { + return F.concat(false, locked.values(), nearLocked.values()); + } + + /** * This method has poor performance, so use with care. It is currently only used by {@code DGC}. * * @return Remote candidates. @@ -515,7 +532,7 @@ public class GridCacheMvccManager<K, V> extends GridCacheSharedManagerAdapter<K, public Collection<GridCacheMvccCandidate<K>> remoteCandidates() { Collection<GridCacheMvccCandidate<K>> rmtCands = new LinkedList<>(); - for (GridDistributedCacheEntry<K, V> entry : locked.values()) { + for (GridDistributedCacheEntry<K, V> entry : locked()) { rmtCands.addAll(entry.remoteMvccSnapshot()); } @@ -530,7 +547,7 @@ public class GridCacheMvccManager<K, V> extends GridCacheSharedManagerAdapter<K, public Collection<GridCacheMvccCandidate<K>> localCandidates() { Collection<GridCacheMvccCandidate<K>> locCands = new LinkedList<>(); - for (GridDistributedCacheEntry<K, V> entry : locked.values()) { + for (GridDistributedCacheEntry<K, V> entry : locked()) { try { locCands.addAll(entry.localCandidates()); } @@ -955,8 +972,8 @@ public class GridCacheMvccManager<K, V> extends GridCacheSharedManagerAdapter<K, final FinishLockFuture finishFut = new FinishLockFuture( keyFilter == null ? - locked.values() : - F.view(locked.values(), + locked() : + F.view(locked(), new P1<GridDistributedCacheEntry<K, V>>() { @Override public boolean apply(GridDistributedCacheEntry<K, V> e) { return F.isAll(e.key(), keyFilter); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3ec08ec1/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java index da0deed..9bd8a7a 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxManager.java @@ -1398,6 +1398,9 @@ public class GridCacheTxManager<K, V> extends GridCacheSharedManagerAdapter<K, V if (owner != null) { GridCacheTxAdapter<K, V> tx = tx(owner.version()); + if (tx == null) + tx = nearTx(owner.version()); + if (tx != null) { if (!tx.local()) { if (log.isDebugEnabled()) http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3ec08ec1/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheNodeFailureAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheNodeFailureAbstractTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheNodeFailureAbstractTest.java index 483e0c6..270d86d 100644 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheNodeFailureAbstractTest.java +++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheNodeFailureAbstractTest.java @@ -226,7 +226,8 @@ public abstract class GridCacheNodeFailureAbstractTest extends GridCommonAbstrac info("Grid will be stopped: " + idx); - info("Primary node for key [id=" + grid(idx).mapKeyToNode(null, KEY) + ", key=" + KEY + ']'); + info("Nodes for key [id=" + grid(idx).cache(null).affinity().mapKeyToPrimaryAndBackups(KEY) + + ", key=" + KEY + ']'); GridCache<Integer, String> cache = cache(idx); @@ -267,13 +268,16 @@ public abstract class GridCacheNodeFailureAbstractTest extends GridCommonAbstrac for (int i = 0; !locked && i < 3; i++) { locked = checkCache.lock(KEY, -1); - if (!locked) + if (!locked) { + info("Still not locked..."); + U.sleep(1500); + } else break; } - assert locked; + assert locked : "Failed to lock entry: " + e; checkCache.unlockAll(F.asList(KEY)); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3ec08ec1/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java index 841f116..7e231d4 100644 --- a/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java +++ b/modules/core/src/test/java/org/gridgain/testsuites/bamboo/GridDataGridTestSuite.java @@ -134,7 +134,7 @@ public class GridDataGridTestSuite extends TestSuite { suite.addTest(new TestSuite(GridCachePartitionedBasicOpSelfTest.class)); // suite.addTest(new TestSuite(GridCachePartitionedBasicStoreNoBatchSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedBasicStoreSelfTest.class)); -// suite.addTest(new TestSuite(GridCachePartitionedGetAndTransformStoreSelfTest.class)); + suite.addTest(new TestSuite(GridCachePartitionedGetAndTransformStoreSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedAtomicGetAndTransformStoreSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedBasicStoreMultiNodeSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedNearDisabledBasicStoreMultiNodeSelfTest.class)); @@ -143,8 +143,8 @@ public class GridDataGridTestSuite extends TestSuite { suite.addTest(new TestSuite(GridCachePartitionedMultiNodeLockSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedMultiNodeSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedMultiThreadedPutGetSelfTest.class)); -// suite.addTest(new TestSuite(GridCachePartitionedNodeFailureSelfTest.class)); -// suite.addTest(new TestSuite(GridCachePartitionedExplicitLockNodeFailureSelfTest.class)); + suite.addTest(new TestSuite(GridCachePartitionedNodeFailureSelfTest.class)); + suite.addTest(new TestSuite(GridCachePartitionedExplicitLockNodeFailureSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedRefreshAheadSelfTest.class)); suite.addTest(new TestSuite(GridCachePartitionedTxSingleThreadedSelfTest.class)); suite.addTest(new TestSuite(GridCacheColocatedTxSingleThreadedSelfTest.class)); @@ -207,7 +207,7 @@ public class GridDataGridTestSuite extends TestSuite { suite.addTestSuite(GridCacheValueConsistencyAtomicNearEnabledSelfTest.class); suite.addTestSuite(GridCacheValueConsistencyAtomicPrimaryWriteOrderNearEnabledSelfTest.class); suite.addTestSuite(GridCacheValueConsistencyTransactionalSelfTest.class); -// suite.addTestSuite(GridCacheValueConsistencyTransactionalNearEnabledSelfTest.class); + suite.addTestSuite(GridCacheValueConsistencyTransactionalNearEnabledSelfTest.class); suite.addTestSuite(GridCacheValueBytesPreloadingSelfTest.class); // Replicated cache. @@ -267,9 +267,9 @@ public class GridDataGridTestSuite extends TestSuite { suite.addTest(GridCacheNearOnlySelfTestSuite.suite()); // Test cache with daemon nodes. -// suite.addTestSuite(GridCacheDaemonNodeLocalSelfTest.class); -// suite.addTestSuite(GridCacheDaemonNodePartitionedSelfTest.class); -// suite.addTestSuite(GridCacheDaemonNodeReplicatedSelfTest.class); + suite.addTestSuite(GridCacheDaemonNodeLocalSelfTest.class); + suite.addTestSuite(GridCacheDaemonNodePartitionedSelfTest.class); + suite.addTestSuite(GridCacheDaemonNodeReplicatedSelfTest.class); // Write-behind. suite.addTest(GridCacheWriteBehindTestSuite.suite());