use of org.apache.ignite.transactions.TransactionIsolation in project ignite by apache.
the class IndexingSpiQueryTxSelfTest method testIndexingSpiWithTx.
/**
* @throws Exception If failed.
*/
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
public void testIndexingSpiWithTx() throws Exception {
IgniteEx ignite = grid(0);
final IgniteCache<Integer, Integer> cache = ignite.cache("test-cache");
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(1, 1);
tx0.commit();
}
assertEquals(TransactionState.ROLLED_BACK, tx.state());
return null;
}
}, IgniteTxHeuristicCheckedException.class);
}
}
}
use of org.apache.ignite.transactions.TransactionIsolation in project ignite by apache.
the class IgnitePessimisticTxSuspendResumeTest method testSuspendPessimisticTx.
/**
* Test for suspension on pessimistic transaction.
*
* @throws Exception If failed.
*/
public void testSuspendPessimisticTx() throws Exception {
try (Ignite g = startGrid()) {
IgniteCache<Integer, String> cache = jcache();
IgniteTransactions txs = g.transactions();
for (TransactionIsolation isolation : TransactionIsolation.values()) {
final Transaction tx = txs.txStart(TransactionConcurrency.PESSIMISTIC, isolation);
cache.put(1, "1");
GridTestUtils.assertThrowsWithCause(new Callable<Object>() {
@Override
public Object call() throws Exception {
tx.suspend();
return null;
}
}, UnsupportedOperationException.class);
tx.close();
assertNull(cache.get(1));
}
}
}
use of org.apache.ignite.transactions.TransactionIsolation in project ignite by apache.
the class IgniteOptimisticTxSuspendResumeTest method testMultiTxSuspendResume.
/**
* Test for starting and suspending transactions, and then resuming and committing in another thread.
*
* @throws Exception If failed.
*/
public void testMultiTxSuspendResume() throws Exception {
executeTestForAllCaches(new CI2Exc<Ignite, IgniteCache<Integer, Integer>>() {
@Override
public void applyx(Ignite ignite, final IgniteCache<Integer, Integer> cache) throws Exception {
for (TransactionIsolation isolation : TransactionIsolation.values()) {
final List<Transaction> clientTxs = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Transaction tx = ignite.transactions().txStart(OPTIMISTIC, isolation);
cache.put(i, i);
tx.suspend();
clientTxs.add(tx);
}
GridTestUtils.runMultiThreaded(new CI1Exc<Integer>() {
public void applyx(Integer idx) throws Exception {
Transaction tx = clientTxs.get(idx);
assertEquals(SUSPENDED, tx.state());
tx.resume();
assertEquals(ACTIVE, tx.state());
tx.commit();
}
}, 10, "th-suspend");
for (int i = 0; i < 10; i++) assertEquals(i, (int) cache.get(i));
cache.removeAll();
}
}
});
}
use of org.apache.ignite.transactions.TransactionIsolation in project ignite by apache.
the class CacheEventSecurityContextTest method data.
/**
*/
@Parameterized.Parameters(name = "cacheAtomicity={0}, txConcurrency={1}, txIsolation={2}")
public static Iterable<Object[]> data() {
List<Object[]> res = new ArrayList<>();
for (TransactionConcurrency txConcurrency : TransactionConcurrency.values()) {
for (TransactionIsolation txIsolation : TransactionIsolation.values()) res.add(new Object[] { TRANSACTIONAL_CACHE, txIsolation, txConcurrency });
}
res.add(new Object[] { TRANSACTIONAL_CACHE, null, null });
res.add(new Object[] { ATOMIC_CACHE, null, null });
return res;
}
use of org.apache.ignite.transactions.TransactionIsolation in project ignite by apache.
the class CdcCacheVersionTest method testConflictVersionWritten.
/**
* Test that conflict version is writtern to WAL.
*/
@Test
public void testConflictVersionWritten() throws Exception {
walProvider = (ctx) -> new FileWriteAheadLogManager(ctx) {
@Override
public WALPointer log(WALRecord rec) throws IgniteCheckedException {
if (rec.type() != DATA_RECORD_V2)
return super.log(rec);
DataRecord dataRec = (DataRecord) rec;
for (int i = 0; i < dataRec.entryCount(); i++) {
DataEntry dataEntry = dataRec.writeEntries().get(i);
assertEquals(CU.cacheId(DEFAULT_CACHE_NAME), dataEntry.cacheId());
assertEquals(DFLT_CLUSTER_ID, dataEntry.writeVersion().dataCenterId());
assertNotNull(dataEntry.writeVersion().conflictVersion());
assertEquals(OTHER_CLUSTER_ID, dataEntry.writeVersion().conflictVersion().dataCenterId());
walRecCheckedCntr.incrementAndGet();
}
return super.log(rec);
}
};
conflictResolutionMgrSupplier = () -> new CacheVersionConflictResolver() {
@Override
public <K1, V1> GridCacheVersionConflictContext<K1, V1> resolve(CacheObjectValueContext ctx, GridCacheVersionedEntryEx<K1, V1> oldEntry, GridCacheVersionedEntryEx<K1, V1> newEntry, boolean atomicVerComparator) {
GridCacheVersionConflictContext<K1, V1> res = new GridCacheVersionConflictContext<>(ctx, oldEntry, newEntry);
res.useNew();
assertEquals(OTHER_CLUSTER_ID, newEntry.version().dataCenterId());
if (!oldEntry.isStartVersion())
assertEquals(OTHER_CLUSTER_ID, oldEntry.version().dataCenterId());
conflictCheckedCntr.incrementAndGet();
return res;
}
@Override
public String toString() {
return "TestCacheConflictResolutionManager";
}
};
startGrids(gridCnt);
IgniteEx cli = startClientGrid(gridCnt);
for (int i = 0; i < gridCnt; i++) {
grid(i).context().cache().context().versions().dataCenterId(DFLT_CLUSTER_ID);
assertEquals(DFLT_CLUSTER_ID, grid(i).context().metric().registry(CACHE_METRICS).<IntMetric>findMetric(DATA_VER_CLUSTER_ID).value());
}
cli.cluster().state(ACTIVE);
IgniteCache<Integer, User> cache = cli.getOrCreateCache(new CacheConfiguration<Integer, User>(DEFAULT_CACHE_NAME).setCacheMode(cacheMode).setAtomicityMode(atomicityMode).setBackups(Integer.MAX_VALUE));
if (atomicityMode == ATOMIC)
putRemoveCheck(cli, cache, null, null);
else {
// Check operations for transaction cache without explicit transaction.
putRemoveCheck(cli, cache, null, null);
// Check operations for transaction cache with explicit transaction in all modes.
for (TransactionConcurrency concurrency : TransactionConcurrency.values()) for (TransactionIsolation isolation : TransactionIsolation.values()) putRemoveCheck(cli, cache, concurrency, isolation);
}
for (int i = 0; i < gridCnt; i++) {
boolean dfltCacheFound = false;
assertFalse(grid(i).context().clientNode());
SystemView<CacheView> caches = grid(i).context().systemView().view(CACHES_VIEW);
for (CacheView v : caches) {
if (v.cacheName().equals(DEFAULT_CACHE_NAME)) {
assertEquals(v.conflictResolver(), "TestCacheConflictResolutionManager");
dfltCacheFound = true;
} else
assertNull(v.conflictResolver());
}
assertTrue(dfltCacheFound);
}
}
Aggregations