/** * Tests timeouts in all tx configurations. * * @throws Exception If failed. */ @Test public void testSimple() throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) for (TransactionIsolation isolation : TransactionIsolation.values()) { for (int op = 0; op < 4; op++) testSimple0(concurrency, isolation, op); } }
/** */ private void executeWithAllTxCaches(final TestClosure clo) throws Exception { for (CacheConfiguration ccfg : cacheConfigurations()) { if (ccfg.getAtomicityMode() == CacheAtomicityMode.TRANSACTIONAL) { for (TransactionConcurrency con : TransactionConcurrency.values()) { for (TransactionIsolation iso : TransactionIsolation.values()) executeForCache(ccfg, clo, con, iso); } } } }
/** * Tests that deactivation is prohibited if transaction is active in current thread. * * @throws Exception If failed. */ @Test public void testDeactivationWithPendingTransaction() throws Exception { startGrids(GRID_CNT); for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) deactivateWithPendingTransaction(concurrency, isolation); } }
/** * @throws Exception If failed. */ private void doTestIndexingSpiWithTx(IgniteEx ignite, int key) throws Exception { final IgniteCache<Integer, Integer> cache = ignite.cache(DEFAULT_CACHE_NAME); final IgniteTransactions txs = ignite.transactions(); for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (final TransactionIsolation isolation : TransactionIsolation.values()) { System.out.println("Run in transaction: " + concurrency + " " + isolation); GridTestUtils.assertThrowsWithCause(new Callable<Void>() { @Override public Void call() throws Exception { Transaction tx; try (Transaction tx0 = tx = txs.txStart(concurrency, isolation)) { cache.put(key, key); tx0.commit(); } assertEquals(TransactionState.ROLLED_BACK, tx.state()); return null; } }, IgniteTxHeuristicCheckedException.class); checkFutures(); } } }
/** * @throws Exception If failed. */ @Test public void testInvokeAllAsyncTx() throws Exception { if (!txShouldBeUsed()) return; for (TransactionConcurrency conc : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkInvokeAllAsycnTx(conc, isolation); jcache().removeAll(); } } }
/** * @param ignite Node. * @param cache Cache. * @param async Use async API. * @param oldAsync Use old async API. * @throws Exception If failed. */ private void doTransformResourceInjectionInTx(Ignite ignite, IgniteCache<String, Integer> cache, boolean async, boolean oldAsync) throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { IgniteTransactions txs = ignite.transactions(); try (Transaction tx = txs.txStart(concurrency, isolation)) { doTransformResourceInjection(ignite, cache, async, oldAsync); tx.commit(); } } } }
/** * @throws Exception If failed. */ @Test public void testInvokeAllTx() throws Exception { if (!txShouldBeUsed()) return; for (TransactionConcurrency conc : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkInvokeAllTx(conc, isolation); jcache().removeAll(); } } }
/** * @throws Exception If failed. */ @Test public void testInvokeAsyncTx() throws Exception { if (!txShouldBeUsed()) return; for (TransactionConcurrency conc : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkInvokeAsyncTx(conc, isolation); jcache().removeAll(); } } }
/** * @throws Exception If failed. */ @Test public void testInvokeTx() throws Exception { if (!txShouldBeUsed()) return; for (TransactionConcurrency conc : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { info(">>>>> Executing test using explicit txs [concurrency=" + conc + ", isolation=" + isolation + "]"); checkInvokeTx(conc, isolation); jcache().removeAll(); } } }
/** * Tests timeout on DHT primary node for all tx configurations. * * @throws Exception If failed. */ @Test public void testTimeoutOnPrimaryDHTNode() throws Exception { final ClusterNode n0 = grid(0).affinity(CACHE_NAME).mapKeyToNode(0); final Ignite prim = G.ignite(n0.id()); for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) testTimeoutOnPrimaryDhtNode0(prim, concurrency, isolation); } }
/** * @throws Exception If failed. */ @Test public void testPutNearTx() throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkPutTx(true, concurrency, isolation, keyForNode(grid(0).localNode(), NOT_PRIMARY_AND_BACKUP)); checkPutTx(false, concurrency, isolation, keyForNode(grid(0).localNode(), NOT_PRIMARY_AND_BACKUP)); } } }
/** * @throws Exception If failed. */ @Test public void testNearNodeKey() throws Exception { if (cacheMode() != PARTITIONED) return; if (atomicityMode() == TRANSACTIONAL) { for (TransactionConcurrency txConcurrency : TransactionConcurrency.values()) { for (TransactionIsolation txIsolation : TransactionIsolation.values()) { for (Operation op : Operation.values()) { testNearNodeKey(txConcurrency, txIsolation, op); afterTest(); } } } } testNearNodeKey(null, null, null); }
/** * @throws Exception If failed. */ @Test public void testPutBackupTx() throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkPutTx(true, concurrency, isolation, keyForNode(grid(0).localNode(), BACKUP)); checkPutTx(false, concurrency, isolation, keyForNode(grid(0).localNode(), BACKUP)); } } }
/** * @throws Exception If failed. */ @Test public void testPutNearTx() throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkPutTx(true, concurrency, isolation, keyForNode(grid(0).localNode(), NOT_PRIMARY_AND_BACKUP)); checkPutTx(false, concurrency, isolation, keyForNode(grid(0).localNode(), NOT_PRIMARY_AND_BACKUP)); } } }
/** * @throws Exception If failed. */ @Test public void testPutPrimaryTx() throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkPutTx(true, concurrency, isolation, keyForNode(grid(0).localNode(), PRIMARY)); checkPutTx(false, concurrency, isolation, keyForNode(grid(0).localNode(), PRIMARY)); } } }
/** * @throws Exception If failed. */ @Test public void testPutPrimaryTx() throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkPutTx(true, concurrency, isolation, keyForNode(grid(0).localNode(), PRIMARY)); checkPutTx(false, concurrency, isolation, keyForNode(grid(0).localNode(), PRIMARY)); } } }
/** * @throws Exception If failed. */ @Test public void testPutBackupTx() throws Exception { for (TransactionConcurrency concurrency : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { checkPutTx(true, concurrency, isolation, keyForNode(grid(0).localNode(), BACKUP)); checkPutTx(false, concurrency, isolation, keyForNode(grid(0).localNode(), BACKUP)); } } }
/** * @param task Task. * @throws Exception If failed. */ protected void runInAllTxModes(TestRunnable task) throws Exception { info("Executing implicite tx"); task.run(); if (txShouldBeUsed()) { for (TransactionConcurrency conc : TransactionConcurrency.values()) { for (TransactionIsolation isolation : TransactionIsolation.values()) { try (Transaction tx = testedGrid().transactions().txStart(conc, isolation)) { info("Executing explicite tx [isolation" + isolation + ", concurrency=" + conc + "]"); task.run(); tx.commit(); } } } } } }
/** * @throws Exception if failed. */ @Test public void testKeepBinaryTxOverwrite() throws Exception { if (atomicityMode() != TRANSACTIONAL) return; IgniteCache<Integer, TestObject> cache = ignite(0).cache(DEFAULT_CACHE_NAME); cache.put(0, new TestObject(1)); for (TransactionConcurrency conc : TransactionConcurrency.values()) { for (TransactionIsolation iso : TransactionIsolation.values()) { try (Transaction tx = ignite(0).transactions().txStart(conc, iso)) { cache.withKeepBinary().get(0); cache.invoke(0, new ObjectEntryProcessor()); tx.commit(); } } } }
/** * @throws Exception If failed. */ @Test public void testContainsInTx() throws Exception { if (atomicityMode() == TRANSACTIONAL) { String key = "1"; for (int i = 0; i < gridCount(); i++) assertFalse("Invalid result on grid: " + i, jcache(i).containsKey(key)); IgniteCache<String, Integer> cache = jcache(0); for (TransactionConcurrency conc : TransactionConcurrency.values()) { for (TransactionIsolation iso : TransactionIsolation.values()) { try (Transaction tx = grid(0).transactions().txStart(conc, iso)) { assertFalse("Invalid result on grid inside tx", cache.containsKey(key)); assertFalse("Key was enlisted to transaction: " + tx, txContainsKey(tx, key)); cache.put(key, 1); assertTrue("Invalid result on grid inside tx", cache.containsKey(key)); // Do not commit. } for (int i = 0; i < gridCount(); i++) assertFalse("Invalid result on grid: " + i, jcache(i).containsKey(key)); } } } }