Search in sources :

Example 1 with TestConcurrentUpdate

use of org.h2.test.synth.TestConcurrentUpdate in project h2database by h2database.

the class TestTransactionStore method testConcurrentUpdate.

private void testConcurrentUpdate() {
    MVStore s;
    TransactionStore ts;
    s = MVStore.open(null);
    ts = new TransactionStore(s);
    ts.init();
    Transaction tx1 = ts.begin();
    TransactionMap<Integer, Integer> map1 = tx1.openMap("data");
    map1.put(1, 10);
    Transaction tx2 = ts.begin();
    TransactionMap<Integer, Integer> map2 = tx2.openMap("data");
    try {
        map2.put(1, 20);
        fail();
    } catch (IllegalStateException e) {
        assertEquals(DataUtils.ERROR_TRANSACTION_LOCKED, DataUtils.getErrorCode(e.getMessage()));
    }
    assertEquals(10, map1.get(1).intValue());
    assertNull(map2.get(1));
    tx1.commit();
    assertEquals(10, map2.get(1).intValue());
    s.close();
}
Also used : MVStore(org.h2.mvstore.MVStore) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) TransactionStore(org.h2.mvstore.db.TransactionStore) Transaction(org.h2.mvstore.db.TransactionStore.Transaction)

Example 2 with TestConcurrentUpdate

use of org.h2.test.synth.TestConcurrentUpdate in project h2database by h2database.

the class TestMvcc2 method testConcurrentUpdate.

private void testConcurrentUpdate() throws Exception {
    Connection conn = getConnection();
    final Connection conn2 = getConnection();
    Statement stat = conn.createStatement();
    final Statement stat2 = conn2.createStatement();
    stat2.execute("set lock_timeout 1000");
    stat.execute("create table test(id int primary key, name varchar)");
    stat.execute("insert into test values(0, 'Hello')");
    conn.setAutoCommit(false);
    Task t = new Task() {

        @Override
        public void call() throws SQLException {
            stat2.execute("update test set name = 'Hallo'");
        }
    };
    stat.execute("update test set name = 'Hi'");
    t.execute();
    Thread.sleep(500);
    conn.commit();
    t.get();
    ResultSet rs;
    rs = stat.executeQuery("select name from test");
    rs.next();
    assertEquals("Hallo", rs.getString(1));
    stat.execute("drop table test");
    conn2.close();
    conn.close();
}
Also used : Task(org.h2.util.Task) Statement(java.sql.Statement) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet)

Example 3 with TestConcurrentUpdate

use of org.h2.test.synth.TestConcurrentUpdate in project h2database by h2database.

the class TestMultiThread method testConcurrentUpdate.

private void testConcurrentUpdate() throws Exception {
    deleteDb("lockMode");
    final int objectCount = 10000;
    final String url = getURL("lockMode;MULTI_THREADED=1;LOCK_TIMEOUT=10000", true);
    int threadCount = 25;
    ExecutorService executor = Executors.newFixedThreadPool(threadCount);
    Connection conn = getConnection(url);
    try {
        conn.createStatement().execute("CREATE TABLE IF NOT EXISTS ACCOUNT" + "(ID NUMBER(18,0) not null PRIMARY KEY, BALANCE NUMBER null)");
        final PreparedStatement mergeAcctStmt = conn.prepareStatement("MERGE INTO Account(id, balance) key (id) VALUES (?, ?)");
        for (int i = 0; i < objectCount; i++) {
            mergeAcctStmt.setLong(1, i);
            mergeAcctStmt.setBigDecimal(2, BigDecimal.ZERO);
            mergeAcctStmt.execute();
        }
        final ArrayList<Callable<Void>> callables = new ArrayList<>();
        for (int i = 0; i < threadCount; i++) {
            callables.add(new Callable<Void>() {

                @Override
                public Void call() throws Exception {
                    try (Connection taskConn = getConnection(url)) {
                        taskConn.setAutoCommit(false);
                        final PreparedStatement updateAcctStmt = taskConn.prepareStatement("UPDATE account SET balance = ? WHERE id = ?");
                        for (int j = 0; j < 1000; j++) {
                            updateAcctStmt.setDouble(1, Math.random());
                            updateAcctStmt.setLong(2, (int) (Math.random() * objectCount));
                            updateAcctStmt.execute();
                            taskConn.commit();
                        }
                    }
                    return null;
                }
            });
        }
        final ArrayList<Future<Void>> jobs = new ArrayList<>();
        for (int i = 0; i < threadCount; i++) {
            jobs.add(executor.submit(callables.get(i)));
        }
        // check for exceptions
        for (Future<Void> job : jobs) {
            job.get(5, TimeUnit.MINUTES);
        }
    } finally {
        IOUtils.closeSilently(conn);
        executor.shutdown();
        executor.awaitTermination(20, TimeUnit.SECONDS);
    }
    deleteDb("lockMode");
}
Also used : Connection(java.sql.Connection) ArrayList(java.util.ArrayList) PreparedStatement(java.sql.PreparedStatement) Callable(java.util.concurrent.Callable) ExecutionException(java.util.concurrent.ExecutionException) SQLException(java.sql.SQLException) JdbcSQLException(org.h2.jdbc.JdbcSQLException) ExecutorService(java.util.concurrent.ExecutorService) Future(java.util.concurrent.Future)

Example 4 with TestConcurrentUpdate

use of org.h2.test.synth.TestConcurrentUpdate in project h2database by h2database.

the class TestAll method test.

/**
 * Run all tests with the current settings.
 */
private void test() throws SQLException {
    System.out.println();
    System.out.println("Test " + toString() + " (" + Utils.getMemoryUsed() + " KB used)");
    beforeTest();
    // db
    addTest(new TestScriptSimple());
    addTest(new TestScript());
    addTest(new TestAlter());
    addTest(new TestAlterSchemaRename());
    addTest(new TestAutoRecompile());
    addTest(new TestBackup());
    addTest(new TestBigDb());
    addTest(new TestBigResult());
    addTest(new TestCases());
    addTest(new TestCheckpoint());
    addTest(new TestCompatibility());
    addTest(new TestCompatibilityOracle());
    addTest(new TestCsv());
    addTest(new TestDeadlock());
    if (vmlens) {
        return;
    }
    addTest(new TestDrop());
    addTest(new TestDuplicateKeyUpdate());
    addTest(new TestEncryptedDb());
    addTest(new TestExclusive());
    addTest(new TestFullText());
    addTest(new TestFunctionOverload());
    addTest(new TestFunctions());
    addTest(new TestInit());
    addTest(new TestIndex());
    addTest(new TestIndexHints());
    addTest(new TestLargeBlob());
    addTest(new TestLinkedTable());
    addTest(new TestListener());
    addTest(new TestLob());
    addTest(new TestMergeUsing());
    addTest(new TestMultiConn());
    addTest(new TestMultiDimension());
    addTest(new TestMultiThreadedKernel());
    addTest(new TestOpenClose());
    addTest(new TestOptimizations());
    addTest(new TestOptimizerHints());
    addTest(new TestOutOfMemory());
    addTest(new TestReadOnly());
    addTest(new TestRecursiveQueries());
    addTest(new TestGeneralCommonTableQueries());
    if (!memory) {
        // requires persistent store for reconnection tests
        addTest(new TestPersistentCommonTableExpressions());
    }
    addTest(new TestRights());
    addTest(new TestRunscript());
    addTest(new TestSQLInjection());
    addTest(new TestSessionsLocks());
    addTest(new TestSelectCountNonNullColumn());
    addTest(new TestSequence());
    addTest(new TestShow());
    addTest(new TestSpaceReuse());
    addTest(new TestSpatial());
    addTest(new TestSpeed());
    addTest(new TestTableEngines());
    addTest(new TestRowFactory());
    addTest(new TestTempTables());
    addTest(new TestTransaction());
    addTest(new TestTriggersConstraints());
    addTest(new TestTwoPhaseCommit());
    addTest(new TestView());
    addTest(new TestViewAlterTable());
    addTest(new TestViewDropView());
    addTest(new TestReplace());
    addTest(new TestSynonymForTable());
    addTest(new TestColumnNamer());
    // jaqu
    addTest(new AliasMapTest());
    addTest(new AnnotationsTest());
    addTest(new ClobTest());
    addTest(new ModelsTest());
    addTest(new SamplesTest());
    addTest(new UpdateTest());
    // jdbc
    addTest(new TestBatchUpdates());
    addTest(new TestCallableStatement());
    addTest(new TestCancel());
    addTest(new TestConcurrentConnectionUsage());
    addTest(new TestConnection());
    addTest(new TestDatabaseEventListener());
    addTest(new TestJavaObject());
    addTest(new TestLimitUpdates());
    addTest(new TestLobApi());
    addTest(new TestManyJdbcObjects());
    addTest(new TestMetaData());
    addTest(new TestNativeSQL());
    addTest(new TestPreparedStatement());
    addTest(new TestResultSet());
    addTest(new TestStatement());
    addTest(new TestGetGeneratedKeys());
    addTest(new TestTransactionIsolation());
    addTest(new TestUpdatableResultSet());
    addTest(new TestZloty());
    addTest(new TestCustomDataTypesHandler());
    addTest(new TestSetCollation());
    // jdbcx
    addTest(new TestConnectionPool());
    addTest(new TestDataSource());
    addTest(new TestXA());
    addTest(new TestXASimple());
    // server
    addTest(new TestAutoServer());
    addTest(new TestNestedLoop());
    // mvcc & row level locking
    addTest(new TestMvcc1());
    addTest(new TestMvcc2());
    addTest(new TestMvcc3());
    addTest(new TestMvcc4());
    addTest(new TestMvccMultiThreaded());
    addTest(new TestMvccMultiThreaded2());
    addTest(new TestRowLocks());
    // synth
    addTest(new TestBtreeIndex());
    addTest(new TestConcurrentUpdate());
    addTest(new TestDiskFull());
    addTest(new TestCrashAPI());
    addTest(new TestFuzzOptimizations());
    addTest(new TestLimit());
    addTest(new TestRandomCompare());
    addTest(new TestKillRestart());
    addTest(new TestKillRestartMulti());
    addTest(new TestMultiThreaded());
    addTest(new TestOuterJoins());
    addTest(new TestNestedJoins());
    addTest(new TestStringAggCompatibility());
    runAddedTests();
    // serial
    addTest(new TestDateStorage());
    addTest(new TestDriver());
    addTest(new TestJavaObjectSerializer());
    addTest(new TestLocale());
    addTest(new TestMemoryUsage());
    addTest(new TestMultiThread());
    addTest(new TestPowerOff());
    addTest(new TestReorderWrites());
    addTest(new TestRandomSQL());
    addTest(new TestQueryCache());
    addTest(new TestUrlJavaObjectSerializer());
    addTest(new TestWeb());
    runAddedTests(1);
    afterTest();
}
Also used : TestDuplicateKeyUpdate(org.h2.test.db.TestDuplicateKeyUpdate) TestDeadlock(org.h2.test.db.TestDeadlock) TestPreparedStatement(org.h2.test.jdbc.TestPreparedStatement) TestXA(org.h2.test.jdbcx.TestXA) TestTransactionIsolation(org.h2.test.jdbc.TestTransactionIsolation) TestViewDropView(org.h2.test.db.TestViewDropView) TestRandomCompare(org.h2.test.synth.TestRandomCompare) TestSetCollation(org.h2.test.db.TestSetCollation) TestSelectCountNonNullColumn(org.h2.test.db.TestSelectCountNonNullColumn) TestConcurrentConnectionUsage(org.h2.test.jdbc.TestConcurrentConnectionUsage) TestCompatibility(org.h2.test.db.TestCompatibility) TestUpdatableResultSet(org.h2.test.jdbc.TestUpdatableResultSet) TestMvccMultiThreaded(org.h2.test.mvcc.TestMvccMultiThreaded) TestDatabaseEventListener(org.h2.test.jdbc.TestDatabaseEventListener) TestCheckpoint(org.h2.test.db.TestCheckpoint) TestListener(org.h2.test.db.TestListener) TestCustomDataTypesHandler(org.h2.test.jdbc.TestCustomDataTypesHandler) TestOpenClose(org.h2.test.db.TestOpenClose) TestEncryptedDb(org.h2.test.db.TestEncryptedDb) TestExclusive(org.h2.test.db.TestExclusive) TestViewAlterTable(org.h2.test.db.TestViewAlterTable) TestGetGeneratedKeys(org.h2.test.jdbc.TestGetGeneratedKeys) TestFunctions(org.h2.test.db.TestFunctions) TestManyJdbcObjects(org.h2.test.jdbc.TestManyJdbcObjects) TestLobApi(org.h2.test.jdbc.TestLobApi) TestLocale(org.h2.test.unit.TestLocale) TestLimit(org.h2.test.synth.TestLimit) TestDataSource(org.h2.test.jdbcx.TestDataSource) TestTransaction(org.h2.test.db.TestTransaction) TestJavaObject(org.h2.test.jdbc.TestJavaObject) TestRowLocks(org.h2.test.rowlock.TestRowLocks) TestWeb(org.h2.test.server.TestWeb) TestAutoServer(org.h2.test.server.TestAutoServer) TestNestedLoop(org.h2.test.server.TestNestedLoop) TestMultiDimension(org.h2.test.db.TestMultiDimension) UpdateTest(org.h2.test.jaqu.UpdateTest) TestCases(org.h2.test.db.TestCases) TestJavaObjectSerializer(org.h2.test.jdbc.TestJavaObjectSerializer) TestUrlJavaObjectSerializer(org.h2.test.jdbc.TestUrlJavaObjectSerializer) TestMultiThread(org.h2.test.db.TestMultiThread) TestLob(org.h2.test.db.TestLob) TestFuzzOptimizations(org.h2.test.synth.TestFuzzOptimizations) TestRunscript(org.h2.test.db.TestRunscript) TestTableEngines(org.h2.test.db.TestTableEngines) TestMemoryUsage(org.h2.test.db.TestMemoryUsage) TestConnection(org.h2.test.jdbc.TestConnection) TestRandomSQL(org.h2.test.synth.TestRandomSQL) TestRights(org.h2.test.db.TestRights) TestXASimple(org.h2.test.jdbcx.TestXASimple) TestLargeBlob(org.h2.test.db.TestLargeBlob) TestBatchUpdates(org.h2.test.jdbc.TestBatchUpdates) TestStringAggCompatibility(org.h2.test.synth.TestStringAggCompatibility) TestMvccMultiThreaded2(org.h2.test.mvcc.TestMvccMultiThreaded2) TestSequence(org.h2.test.db.TestSequence) AliasMapTest(org.h2.test.jaqu.AliasMapTest) TestMergeUsing(org.h2.test.db.TestMergeUsing) TestMetaData(org.h2.test.jdbc.TestMetaData) TestMultiThreadedKernel(org.h2.test.db.TestMultiThreadedKernel) TestConcurrentUpdate(org.h2.test.synth.TestConcurrentUpdate) TestResultSet(org.h2.test.jdbc.TestResultSet) ModelsTest(org.h2.test.jaqu.ModelsTest) TestSpaceReuse(org.h2.test.db.TestSpaceReuse) TestDriver(org.h2.test.jdbc.TestDriver) TestGeneralCommonTableQueries(org.h2.test.db.TestGeneralCommonTableQueries) TestBigDb(org.h2.test.db.TestBigDb) TestOutOfMemory(org.h2.test.db.TestOutOfMemory) TestFunctionOverload(org.h2.test.db.TestFunctionOverload) TestPowerOff(org.h2.test.db.TestPowerOff) TestPersistentCommonTableExpressions(org.h2.test.db.TestPersistentCommonTableExpressions) TestKillRestartMulti(org.h2.test.synth.TestKillRestartMulti) TestBtreeIndex(org.h2.test.synth.TestBtreeIndex) TestOptimizations(org.h2.test.db.TestOptimizations) TestMultiThreaded(org.h2.test.synth.TestMultiThreaded) TestLinkedTable(org.h2.test.db.TestLinkedTable) TestTriggersConstraints(org.h2.test.db.TestTriggersConstraints) SamplesTest(org.h2.test.jaqu.SamplesTest) TestSynonymForTable(org.h2.test.db.TestSynonymForTable) TestReadOnly(org.h2.test.db.TestReadOnly) TestCompatibilityOracle(org.h2.test.db.TestCompatibilityOracle) TestInit(org.h2.test.server.TestInit) TestCsv(org.h2.test.db.TestCsv) TestFullText(org.h2.test.db.TestFullText) TestIndexHints(org.h2.test.db.TestIndexHints) AnnotationsTest(org.h2.test.jaqu.AnnotationsTest) TestDiskFull(org.h2.test.synth.TestDiskFull) TestStatement(org.h2.test.jdbc.TestStatement) TestReplace(org.h2.test.db.TestReplace) TestScriptSimple(org.h2.test.scripts.TestScriptSimple) TestTwoPhaseCommit(org.h2.test.db.TestTwoPhaseCommit) TestSessionsLocks(org.h2.test.db.TestSessionsLocks) TestIndex(org.h2.test.db.TestIndex) TestOuterJoins(org.h2.test.synth.TestOuterJoins) TestAlterSchemaRename(org.h2.test.db.TestAlterSchemaRename) TestBackup(org.h2.test.db.TestBackup) TestAutoRecompile(org.h2.test.db.TestAutoRecompile) TestShow(org.h2.test.db.TestShow) TestSQLInjection(org.h2.test.db.TestSQLInjection) TestDrop(org.h2.test.db.TestDrop) TestConnectionPool(org.h2.test.jdbcx.TestConnectionPool) TestCancel(org.h2.test.jdbc.TestCancel) TestScript(org.h2.test.scripts.TestScript) TestCrashAPI(org.h2.test.synth.TestCrashAPI) TestRecursiveQueries(org.h2.test.db.TestRecursiveQueries) TestKillRestart(org.h2.test.synth.TestKillRestart) TestBigResult(org.h2.test.db.TestBigResult) ClobTest(org.h2.test.jaqu.ClobTest) TestNestedJoins(org.h2.test.synth.TestNestedJoins) TestRowFactory(org.h2.test.db.TestRowFactory) TestCallableStatement(org.h2.test.jdbc.TestCallableStatement) TestNativeSQL(org.h2.test.jdbc.TestNativeSQL) TestSpeed(org.h2.test.db.TestSpeed) TestTempTables(org.h2.test.db.TestTempTables) TestZloty(org.h2.test.jdbc.TestZloty) TestMultiConn(org.h2.test.db.TestMultiConn) TestMvcc3(org.h2.test.mvcc.TestMvcc3) TestMvcc4(org.h2.test.mvcc.TestMvcc4) TestMvcc1(org.h2.test.mvcc.TestMvcc1) TestSpatial(org.h2.test.db.TestSpatial) TestMvcc2(org.h2.test.mvcc.TestMvcc2) TestQueryCache(org.h2.test.db.TestQueryCache) TestAlter(org.h2.test.db.TestAlter) TestDateStorage(org.h2.test.db.TestDateStorage) TestColumnNamer(org.h2.test.utils.TestColumnNamer) TestLimitUpdates(org.h2.test.jdbc.TestLimitUpdates) TestReorderWrites(org.h2.test.poweroff.TestReorderWrites) TestView(org.h2.test.db.TestView) TestOptimizerHints(org.h2.test.db.TestOptimizerHints)

Example 5 with TestConcurrentUpdate

use of org.h2.test.synth.TestConcurrentUpdate in project h2database by h2database.

the class TestMvccMultiThreaded method testConcurrentUpdate.

private void testConcurrentUpdate() throws Exception {
    deleteDb(getTestName());
    int len = 2;
    final Connection[] connList = new Connection[len];
    for (int i = 0; i < len; i++) {
        connList[i] = getConnection(getTestName() + ";MVCC=TRUE");
    }
    Connection conn = connList[0];
    conn.createStatement().execute("create table test(id int primary key, value int)");
    conn.createStatement().execute("insert into test values(0, 0)");
    final int count = 1000;
    Task[] tasks = new Task[len];
    final CountDownLatch latch = new CountDownLatch(len);
    for (int i = 0; i < len; i++) {
        final int x = i;
        tasks[i] = new Task() {

            @Override
            public void call() throws Exception {
                for (int a = 0; a < count; a++) {
                    connList[x].createStatement().execute("update test set value=value+1");
                    latch.countDown();
                    latch.await();
                }
            }
        };
        tasks[i].execute();
    }
    for (int i = 0; i < len; i++) {
        tasks[i].get();
    }
    ResultSet rs = conn.createStatement().executeQuery("select value from test");
    rs.next();
    assertEquals(count * len, rs.getInt(1));
    for (int i = 0; i < len; i++) {
        connList[i].close();
    }
}
Also used : Task(org.h2.util.Task) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) CountDownLatch(java.util.concurrent.CountDownLatch) SQLException(java.sql.SQLException)

Aggregations

Connection (java.sql.Connection)3 ResultSet (java.sql.ResultSet)2 SQLException (java.sql.SQLException)2 PreparedStatement (java.sql.PreparedStatement)1 Statement (java.sql.Statement)1 ArrayList (java.util.ArrayList)1 Callable (java.util.concurrent.Callable)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 ExecutionException (java.util.concurrent.ExecutionException)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 JdbcSQLException (org.h2.jdbc.JdbcSQLException)1 MVStore (org.h2.mvstore.MVStore)1 TransactionStore (org.h2.mvstore.db.TransactionStore)1 Transaction (org.h2.mvstore.db.TransactionStore.Transaction)1 TestAlter (org.h2.test.db.TestAlter)1 TestAlterSchemaRename (org.h2.test.db.TestAlterSchemaRename)1 TestAutoRecompile (org.h2.test.db.TestAutoRecompile)1 TestBackup (org.h2.test.db.TestBackup)1