You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/05/04 08:01:48 UTC
[10/16] ignite git commit: ignite-db - multithreaded tests
ignite-db - multithreaded tests
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/58ac7a0f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/58ac7a0f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/58ac7a0f
Branch: refs/heads/ignite-db-x-10884
Commit: 58ac7a0fae135308d080e9effc7585107f91bb3a
Parents: 9a307f1
Author: S.Vladykin <sv...@gridgain.com>
Authored: Fri Apr 29 05:00:38 2016 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Fri Apr 29 05:00:38 2016 +0300
----------------------------------------------------------------------
.../database/BPlusTreeReuseSelfTest.java | 79 ++++++++++++++++++++
.../processors/database/BPlusTreeSelfTest.java | 18 ++---
2 files changed, 88 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/58ac7a0f/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java
index a70bb1d..c8a0907 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java
@@ -17,10 +17,17 @@
package org.apache.ignite.internal.processors.database;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.locks.Lock;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.pagemem.PageMemory;
import org.apache.ignite.internal.processors.cache.database.MetaStore;
import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseList;
+import org.apache.ignite.internal.util.GridStripedLock;
+import org.apache.ignite.internal.util.lang.GridCursor;
+import org.apache.ignite.internal.util.typedef.X;
+import org.jsr166.ConcurrentHashMap8;
/**
* Test with reuse.
@@ -31,4 +38,76 @@ public class BPlusTreeReuseSelfTest extends BPlusTreeSelfTest {
throws IgniteCheckedException {
return new ReuseList(cacheId, pageMem, segments, metaStore);
}
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testTestRandomPutRemoveMultithreaded_1_50_0() throws Exception {
+ doTestRandomPutRemoveMultithreaded(false);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testTestRandomPutRemoveMultithreaded_1_50_1() throws Exception {
+ doTestRandomPutRemoveMultithreaded(true);
+ }
+
+ /**
+ * @param canGetRow Can get row from inner page.
+ * @throws Exception If failed.
+ */
+ private void doTestRandomPutRemoveMultithreaded(boolean canGetRow) throws Exception {
+ final TestTree tree = createTestTree(canGetRow);
+
+ final Map<Long,Long> map = new ConcurrentHashMap8<>();
+
+ final int loops = 1000_000;
+
+ final GridStripedLock lock = new GridStripedLock(64);
+
+ multithreaded(new Callable<Object>() {
+ @Override public Object call() throws Exception {
+ for (int i = 0 ; i < loops; i++) {
+ Long x = (long)tree.randomInt(CNT);
+
+ boolean put = tree.randomInt(2) == 0;
+
+ if (i % 100_000 == 0)
+ X.println(" --> " + (put ? "put " : "rmv ") + i + " " + x);
+
+ Lock l = lock.getLock(x.longValue());
+
+ l.lock();
+
+ try {
+ if (put)
+ assertEquals(map.put(x, x), tree.put(x));
+ else {
+ if (map.remove(x) != null)
+ assertEquals(x, tree.remove(x));
+ assertNull(tree.remove(x));
+ }
+ }
+ finally {
+ l.unlock();
+ }
+ }
+
+ return null;
+ }
+ }, 10);
+
+ GridCursor<Long> cursor = tree.find(null, null);
+
+ while (cursor.next()) {
+ Long x = cursor.get();
+
+ assert x != null;
+
+ assertEquals(map.get(x), x);
+ }
+
+ assertEquals(map.size(), tree.size());
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/58ac7a0f/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
index 8917bf2..da709d2 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
@@ -65,7 +65,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest {
private static int MAX_PER_PAGE = 0;
/** */
- private static int CNT = 10;
+ protected static int CNT = 10;
/** */
private static int PUT_INC = 1;
@@ -77,7 +77,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest {
private PageMemory pageMem;
/** */
- private ReuseList reuseList;
+ protected ReuseList reuseList;
// /** {@inheritDoc} */
// @Override protected long getTestTimeout() {
@@ -469,28 +469,28 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest {
/**
* @throws IgniteCheckedException If failed.
*/
- public void testRandomRemove_1_30_0() throws IgniteCheckedException {
+ public void testRandomPutRemove_1_30_0() throws IgniteCheckedException {
MAX_PER_PAGE = 1;
CNT = 30;
- doTestRandomRemove(false);
+ doTestRandomPutRemove(false);
}
/**
* @throws IgniteCheckedException If failed.
*/
- public void testRandomRemove_1_30_1() throws IgniteCheckedException {
+ public void testRandomPutRemove_1_30_1() throws IgniteCheckedException {
MAX_PER_PAGE = 1;
CNT = 30;
- doTestRandomRemove(true);
+ doTestRandomPutRemove(true);
}
/**
* @param canGetRow Can get row from inner page.
* @throws IgniteCheckedException If failed.
*/
- private void doTestRandomRemove(boolean canGetRow) throws IgniteCheckedException {
+ private void doTestRandomPutRemove(boolean canGetRow) throws IgniteCheckedException {
TestTree tree = createTestTree(canGetRow);
Map<Long,Long> map = new HashMap<>();
@@ -536,7 +536,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest {
* @return Test tree instance.
* @throws IgniteCheckedException If failed.
*/
- private TestTree createTestTree(boolean canGetRow) throws IgniteCheckedException {
+ protected TestTree createTestTree(boolean canGetRow) throws IgniteCheckedException {
TestTree tree = new TestTree(reuseList, canGetRow, CACHE_ID, pageMem, allocateMetaPage());
assertEquals(0, tree.size());
@@ -556,7 +556,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest {
/**
* Test tree.
*/
- private static class TestTree extends BPlusTree<Long, Long> {
+ protected static class TestTree extends BPlusTree<Long, Long> {
/** */
static Random rnd;