Search in sources :

Example 1 with TestConcurrent

use of org.h2.test.store.TestConcurrent in project h2database by h2database.

the class TestFileSystem method testConcurrent.

private void testConcurrent(String fsBase) throws Exception {
    String s = FileUtils.createTempFile(fsBase + "/tmp", ".tmp", false, false);
    File file = new File(TestBase.BASE_TEST_DIR + "/tmp");
    file.getParentFile().mkdirs();
    file.delete();
    RandomAccessFile ra = new RandomAccessFile(file, "rw");
    FileUtils.delete(s);
    final FileChannel f = FileUtils.open(s, "rw");
    final int size = getSize(10, 50);
    f.write(ByteBuffer.allocate(size * 64 * 1024));
    Random random = new Random(1);
    System.gc();
    Task task = new Task() {

        @Override
        public void call() throws Exception {
            ByteBuffer byteBuff = ByteBuffer.allocate(16);
            while (!stop) {
                for (int pos = 0; pos < size; pos++) {
                    byteBuff.clear();
                    f.read(byteBuff, pos * 64 * 1024);
                    byteBuff.position(0);
                    int x = byteBuff.getInt();
                    int y = byteBuff.getInt();
                    assertEquals(x, y);
                    Thread.yield();
                }
            }
        }
    };
    task.execute();
    int[] data = new int[size];
    try {
        ByteBuffer byteBuff = ByteBuffer.allocate(16);
        int operations = 10000;
        for (int i = 0; i < operations; i++) {
            byteBuff.position(0);
            byteBuff.putInt(i);
            byteBuff.putInt(i);
            byteBuff.flip();
            int pos = random.nextInt(size);
            f.write(byteBuff, pos * 64 * 1024);
            data[pos] = i;
            pos = random.nextInt(size);
            byteBuff.clear();
            f.read(byteBuff, pos * 64 * 1024);
            byteBuff.limit(16);
            byteBuff.position(0);
            int x = byteBuff.getInt();
            int y = byteBuff.getInt();
            assertEquals(x, y);
            assertEquals(data[pos], x);
        }
    } catch (Throwable e) {
        e.printStackTrace();
        fail("Exception: " + e);
    } finally {
        task.get();
        f.close();
        ra.close();
        file.delete();
        FileUtils.delete(s);
        System.gc();
    }
}
Also used : Task(org.h2.util.Task) RandomAccessFile(java.io.RandomAccessFile) Random(java.util.Random) FileChannel(java.nio.channels.FileChannel) RandomAccessFile(java.io.RandomAccessFile) File(java.io.File) ByteBuffer(java.nio.ByteBuffer)

Example 2 with TestConcurrent

use of org.h2.test.store.TestConcurrent in project h2database by h2database.

the class TestAll method testUnit.

private void testUnit() {
    // mv store
    addTest(new TestCacheConcurrentLIRS());
    addTest(new TestCacheLIRS());
    addTest(new TestCacheLongKeyLIRS());
    addTest(new TestConcurrentLinkedList());
    addTest(new TestDataUtils());
    addTest(new TestFreeSpace());
    addTest(new TestKillProcessWhileWriting());
    addTest(new TestMVRTree());
    addTest(new TestMVStore());
    addTest(new TestMVStoreBenchmark());
    addTest(new TestMVStoreStopCompact());
    addTest(new TestMVStoreTool());
    addTest(new TestMVTableEngine());
    addTest(new TestObjectDataType());
    addTest(new TestRandomMapOps());
    addTest(new TestSpinLock());
    addTest(new TestStreamStore());
    addTest(new TestTransactionStore());
    // unit
    addTest(new TestAnsCompression());
    addTest(new TestAutoReconnect());
    addTest(new TestBinaryArithmeticStream());
    addTest(new TestBitStream());
    addTest(new TestBnf());
    addTest(new TestCache());
    addTest(new TestCharsetCollator());
    addTest(new TestClearReferences());
    addTest(new TestCollation());
    addTest(new TestCompress());
    addTest(new TestConnectionInfo());
    addTest(new TestDataPage());
    addTest(new TestDateIso8601());
    addTest(new TestExit());
    addTest(new TestFile());
    addTest(new TestFileLock());
    addTest(new TestFtp());
    addTest(new TestIntArray());
    addTest(new TestIntIntHashMap());
    addTest(new TestIntPerfectHash());
    addTest(new TestJmx());
    addTest(new TestMathUtils());
    addTest(new TestMode());
    addTest(new TestModifyOnWrite());
    addTest(new TestOldVersion());
    addTest(new TestObjectDeserialization());
    addTest(new TestMultiThreadedKernel());
    addTest(new TestOverflow());
    addTest(new TestPageStore());
    addTest(new TestPageStoreCoverage());
    addTest(new TestPerfectHash());
    addTest(new TestPgServer());
    addTest(new TestReader());
    addTest(new TestRecovery());
    addTest(new TestScriptReader());
    addTest(new RecoverLobTest());
    addTest(createTest("org.h2.test.unit.TestServlet"));
    addTest(new TestSecurity());
    addTest(new TestShell());
    addTest(new TestSort());
    addTest(new TestStreams());
    addTest(new TestStringUtils());
    addTest(new TestTimeStampWithTimeZone());
    addTest(new TestTraceSystem());
    addTest(new TestUpgrade());
    addTest(new TestUsingIndex());
    addTest(new TestUtils());
    addTest(new TestValue());
    addTest(new TestValueHashMap());
    addTest(new TestWeb());
    runAddedTests();
    // serial
    addTest(new TestDate());
    addTest(new TestDateTimeUtils());
    addTest(new TestCluster());
    addTest(new TestConcurrent());
    addTest(new TestFileLockSerialized());
    addTest(new TestFileLockProcess());
    addTest(new TestFileSystem());
    addTest(new TestNetUtils());
    addTest(new TestPattern());
    addTest(new TestTools());
    addTest(new TestSampleApps());
    addTest(new TestStringCache());
    addTest(new TestValueMemory());
    runAddedTests(1);
}
Also used : TestPageStoreCoverage(org.h2.test.unit.TestPageStoreCoverage) TestDateIso8601(org.h2.test.unit.TestDateIso8601) RecoverLobTest(org.h2.test.recover.RecoverLobTest) TestMVTableEngine(org.h2.test.store.TestMVTableEngine) TestPgServer(org.h2.test.unit.TestPgServer) TestValueMemory(org.h2.test.unit.TestValueMemory) TestKillProcessWhileWriting(org.h2.test.store.TestKillProcessWhileWriting) TestExit(org.h2.test.unit.TestExit) TestMode(org.h2.test.unit.TestMode) TestPageStore(org.h2.test.unit.TestPageStore) TestSort(org.h2.test.unit.TestSort) TestUtils(org.h2.test.unit.TestUtils) TestOldVersion(org.h2.test.unit.TestOldVersion) TestObjectDeserialization(org.h2.test.unit.TestObjectDeserialization) TestCompress(org.h2.test.unit.TestCompress) TestCluster(org.h2.test.db.TestCluster) TestCharsetCollator(org.h2.test.unit.TestCharsetCollator) TestFileLockSerialized(org.h2.test.unit.TestFileLockSerialized) TestMVStoreBenchmark(org.h2.test.store.TestMVStoreBenchmark) TestFileLock(org.h2.test.unit.TestFileLock) TestIntArray(org.h2.test.unit.TestIntArray) TestCacheLongKeyLIRS(org.h2.test.store.TestCacheLongKeyLIRS) TestOverflow(org.h2.test.unit.TestOverflow) TestModifyOnWrite(org.h2.test.unit.TestModifyOnWrite) TestPattern(org.h2.test.unit.TestPattern) TestValueHashMap(org.h2.test.unit.TestValueHashMap) TestReader(org.h2.test.unit.TestReader) TestNetUtils(org.h2.test.unit.TestNetUtils) TestObjectDataType(org.h2.test.store.TestObjectDataType) TestDataPage(org.h2.test.unit.TestDataPage) TestWeb(org.h2.test.server.TestWeb) TestTraceSystem(org.h2.test.unit.TestTraceSystem) TestClearReferences(org.h2.test.unit.TestClearReferences) TestUpgrade(org.h2.test.db.TestUpgrade) TestStreamStore(org.h2.test.store.TestStreamStore) TestTransactionStore(org.h2.test.store.TestTransactionStore) TestConnectionInfo(org.h2.test.unit.TestConnectionInfo) TestTools(org.h2.test.unit.TestTools) TestStreams(org.h2.test.unit.TestStreams) TestFile(org.h2.test.unit.TestFile) TestSampleApps(org.h2.test.unit.TestSampleApps) TestCacheConcurrentLIRS(org.h2.test.store.TestCacheConcurrentLIRS) TestConcurrent(org.h2.test.store.TestConcurrent) TestFtp(org.h2.test.unit.TestFtp) TestStringUtils(org.h2.test.unit.TestStringUtils) TestSpinLock(org.h2.test.store.TestSpinLock) TestDataUtils(org.h2.test.store.TestDataUtils) TestUsingIndex(org.h2.test.db.TestUsingIndex) TestRandomMapOps(org.h2.test.store.TestRandomMapOps) TestValue(org.h2.test.unit.TestValue) TestIntPerfectHash(org.h2.test.unit.TestIntPerfectHash) TestMVStore(org.h2.test.store.TestMVStore) TestMathUtils(org.h2.test.unit.TestMathUtils) TestRecovery(org.h2.test.unit.TestRecovery) TestTimeStampWithTimeZone(org.h2.test.unit.TestTimeStampWithTimeZone) TestFileLockProcess(org.h2.test.unit.TestFileLockProcess) TestMultiThreadedKernel(org.h2.test.db.TestMultiThreadedKernel) TestFreeSpace(org.h2.test.store.TestFreeSpace) TestDateTimeUtils(org.h2.test.unit.TestDateTimeUtils) TestMVRTree(org.h2.test.store.TestMVRTree) TestSecurity(org.h2.test.unit.TestSecurity) TestMVStoreTool(org.h2.test.store.TestMVStoreTool) TestIntIntHashMap(org.h2.test.unit.TestIntIntHashMap) TestBnf(org.h2.test.unit.TestBnf) TestCacheLIRS(org.h2.test.store.TestCacheLIRS) TestAutoReconnect(org.h2.test.unit.TestAutoReconnect) TestBinaryArithmeticStream(org.h2.test.unit.TestBinaryArithmeticStream) TestCollation(org.h2.test.unit.TestCollation) TestJmx(org.h2.test.unit.TestJmx) TestPerfectHash(org.h2.test.unit.TestPerfectHash) TestAnsCompression(org.h2.test.unit.TestAnsCompression) TestShell(org.h2.test.unit.TestShell) TestStringCache(org.h2.test.unit.TestStringCache) TestConcurrentLinkedList(org.h2.test.store.TestConcurrentLinkedList) TestCache(org.h2.test.unit.TestCache) TestDate(org.h2.test.unit.TestDate) TestMVStoreStopCompact(org.h2.test.store.TestMVStoreStopCompact) TestBitStream(org.h2.test.unit.TestBitStream) TestScriptReader(org.h2.test.unit.TestScriptReader) TestFileSystem(org.h2.test.unit.TestFileSystem)

Example 3 with TestConcurrent

use of org.h2.test.store.TestConcurrent in project h2database by h2database.

the class TestConcurrentLinkedList method testConcurrent.

private void testConcurrent() {
    final ConcurrentArrayList<Integer> test = new ConcurrentArrayList<>();
    // final ConcurrentRing<Integer> test = new ConcurrentRing<Integer>();
    final AtomicInteger counter = new AtomicInteger();
    final AtomicInteger size = new AtomicInteger();
    Task task = new Task() {

        @Override
        public void call() {
            while (!stop) {
                Thread.yield();
                if (size.get() < 10) {
                    test.add(counter.getAndIncrement());
                    size.getAndIncrement();
                }
            }
        }
    };
    task.execute();
    for (int i = 0; i < 1000000; ) {
        Thread.yield();
        Integer x = test.peekFirst();
        if (x == null) {
            continue;
        }
        assertEquals(i, x.intValue());
        if (test.removeFirst(x)) {
            size.getAndDecrement();
            i++;
        }
    }
    task.get();
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Task(org.h2.util.Task) ConcurrentArrayList(org.h2.mvstore.ConcurrentArrayList) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 4 with TestConcurrent

use of org.h2.test.store.TestConcurrent in project h2database by h2database.

the class TestCacheConcurrentLIRS method testConcurrent.

private void testConcurrent() {
    CacheLongKeyLIRS.Config cc = new CacheLongKeyLIRS.Config();
    cc.maxMemory = 100;
    final CacheLongKeyLIRS<Integer> test = new CacheLongKeyLIRS<>(cc);
    int threadCount = 8;
    final CountDownLatch wait = new CountDownLatch(1);
    final AtomicBoolean stopped = new AtomicBoolean();
    Task[] tasks = new Task[threadCount];
    final int[] getCounts = new int[threadCount];
    final int offset = 1000000;
    for (int i = 0; i < 100; i++) {
        test.put(offset + i, i);
    }
    final int[] keys = new int[1000];
    Random random = new Random(1);
    for (int i = 0; i < keys.length; i++) {
        int key;
        do {
            key = (int) Math.abs(random.nextGaussian() * 50);
        } while (key > 100);
        keys[i] = key;
    }
    for (int i = 0; i < threadCount; i++) {
        final int x = i;
        Task t = new Task() {

            @Override
            public void call() throws Exception {
                Random random = new Random(x);
                wait.await();
                int i = 0;
                for (; !stopped.get(); i++) {
                    int key = keys[random.nextInt(keys.length)];
                    test.get(offset + key);
                    if ((i & 127) == 0) {
                        test.put(offset + random.nextInt(100), random.nextInt());
                    }
                }
                getCounts[x] = i;
            }
        };
        t.execute("t" + i);
        tasks[i] = t;
    }
    wait.countDown();
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    stopped.set(true);
    for (Task t : tasks) {
        t.get();
    }
    int totalCount = 0;
    for (int x : getCounts) {
        totalCount += x;
    }
    trace("requests: " + totalCount);
}
Also used : CacheLongKeyLIRS(org.h2.mvstore.cache.CacheLongKeyLIRS) Task(org.h2.util.Task) CountDownLatch(java.util.concurrent.CountDownLatch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Random(java.util.Random)

Aggregations

Task (org.h2.util.Task)3 Random (java.util.Random)2 File (java.io.File)1 RandomAccessFile (java.io.RandomAccessFile)1 ByteBuffer (java.nio.ByteBuffer)1 FileChannel (java.nio.channels.FileChannel)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 ConcurrentArrayList (org.h2.mvstore.ConcurrentArrayList)1 CacheLongKeyLIRS (org.h2.mvstore.cache.CacheLongKeyLIRS)1 TestCluster (org.h2.test.db.TestCluster)1 TestMultiThreadedKernel (org.h2.test.db.TestMultiThreadedKernel)1 TestUpgrade (org.h2.test.db.TestUpgrade)1 TestUsingIndex (org.h2.test.db.TestUsingIndex)1 RecoverLobTest (org.h2.test.recover.RecoverLobTest)1 TestWeb (org.h2.test.server.TestWeb)1 TestCacheConcurrentLIRS (org.h2.test.store.TestCacheConcurrentLIRS)1 TestCacheLIRS (org.h2.test.store.TestCacheLIRS)1 TestCacheLongKeyLIRS (org.h2.test.store.TestCacheLongKeyLIRS)1