Repository: ignite Updated Branches: refs/heads/master 2b22933b8 -> 4b4d263ea
IGNITE-2313 Added an option to fail atomic cache access within a transaction - Fixes #4280. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4b4d263e Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4b4d263e Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4b4d263e Branch: refs/heads/master Commit: 4b4d263ea0762d3504f3401b439974e7b92577d2 Parents: 2b22933 Author: Dmitrii Ryabov <[email protected]> Authored: Wed Jul 18 17:13:58 2018 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Wed Jul 18 17:13:58 2018 +0300 ---------------------------------------------------------------------- .../src/main/java/org/apache/ignite/IgniteCache.java | 7 ++++++- .../processors/cache/GatewayProtectedCacheProxy.java | 5 +++++ .../cache/transactions/AtomicOperationsInTxTest.java | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4b4d263e/modules/core/src/main/java/org/apache/ignite/IgniteCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java index 7de830a..cf8087a 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java @@ -177,7 +177,12 @@ public interface IgniteCache<K, V> extends javax.cache.Cache<K, V>, IgniteAsyncS public <K1, V1> IgniteCache<K1, V1> withKeepBinary(); /** - * Reasonable only for atomic caches. + * By default atomic operations are allowed in transaction. + * To restrict transactions from operations with atomic caches you can set system property + * {@link IgniteSystemProperties#IGNITE_ALLOW_ATOMIC_OPS_IN_TX IGNITE_ALLOW_ATOMIC_OPS_IN_TX} to {@code false}. + * <p> + * If you want to use atomic operations inside transactions in case they are restricted by system property, + * you should allow it before transaction start. * * @return Cache with atomic operations allowed in transactions. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/4b4d263e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java index 33ea048..5a081fa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java @@ -176,6 +176,11 @@ public class GatewayProtectedCacheProxy<K, V> extends AsyncSupportAdapter<Ignite /** {@inheritDoc} */ @Override public IgniteCache<K, V> withAllowAtomicOpsInTx() { + if (context().atomic() && !opCtx.allowedAtomicOpsInTx() && context().tm().tx() != null) { + throw new IllegalStateException("Enabling atomic operations during active transaction is not allowed. " + + "Enable atomic operations before transaction start."); + } + CacheOperationGate opGate = onEnter(); try { http://git-wip-us.apache.org/repos/asf/ignite/blob/4b4d263e/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AtomicOperationsInTxTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AtomicOperationsInTxTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AtomicOperationsInTxTest.java index f12d790..b58dbe0 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AtomicOperationsInTxTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AtomicOperationsInTxTest.java @@ -71,6 +71,20 @@ public class AtomicOperationsInTxTest extends GridCommonAbstractTest { /** * @throws Exception If failed. */ + public void testEnablingAtomicOperationDuringTransaction() throws Exception { + GridTestUtils.assertThrows(log, (Callable<IgniteCache>)() -> { + try (Transaction tx = grid(0).transactions().txStart()) { + return grid(0).cache(DEFAULT_CACHE_NAME).withAllowAtomicOpsInTx(); + } + }, + IllegalStateException.class, + "Enabling atomic operations during active transaction is not allowed." + ); + } + + /** + * @throws Exception If failed. + */ public void testAllowedAtomicOperations() throws Exception { checkOperations(true); }
