IGNITE-6181 wip.

Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b0177135
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b0177135
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b0177135

Branch: refs/heads/ignite-6181-1
Commit: b01771355b697b9bd4b23ce6c807d777510b87c0
Parents: 225d4f5
Author: ascherbakoff <[email protected]>
Authored: Tue Sep 12 23:03:30 2017 +0300
Committer: ascherbakoff <[email protected]>
Committed: Tue Sep 12 23:03:30 2017 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/IgniteTransactions.java   |  3 +-
 .../configuration/TransactionConfiguration.java |  6 ---
 .../near/GridNearOptimisticTxPrepareFuture.java |  3 +-
 .../cache/distributed/near/GridNearTxLocal.java |  3 +-
 .../transactions/IgniteTransactionsImpl.java    |  2 +-
 .../cache/transactions/IgniteTxManager.java     |  7 +--
 ...niteTxConfigCacheForceTxTimeoutSelfTest.java | 43 +++++++++++++++
 .../cache/IgniteTxConfigCacheSelfTest.java      |  2 +-
 .../transactions/TxRollbackOnTimeoutTest.java   | 55 +++++++++++++++++++-
 .../ignite/testsuites/IgniteCacheTestSuite.java |  2 +
 .../hadoop/impl/HadoopTxConfigCacheTest.java    |  2 +-
 11 files changed, 110 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java 
b/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
index 9da862d..dfe6a1a 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteTransactions.java
@@ -77,8 +77,7 @@ public interface IgniteTransactions {
      *
      * @param concurrency Concurrency.
      * @param isolation Isolation.
-     * @param timeout Timeout. See {@link 
TransactionConfiguration#setDefaultTxTimeout(long)}
-     * for additional info on transaction timeouts.
+     * @param timeout Timeout.
      * @param txSize Number of entries participating in transaction (may be 
approximate).
      * @return New transaction.
      * @throws IllegalStateException If transaction is already started by this 
thread.

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
 
b/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
index cbd2d82..0063afc 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
@@ -19,7 +19,6 @@ package org.apache.ignite.configuration;
 
 import java.io.Serializable;
 import javax.cache.configuration.Factory;
-import org.apache.ignite.IgniteTransactions;
 import org.apache.ignite.transactions.Transaction;
 import org.apache.ignite.transactions.TransactionConcurrency;
 import org.apache.ignite.transactions.TransactionIsolation;
@@ -182,11 +181,6 @@ public class TransactionConfiguration implements 
Serializable {
     /**
      * Sets default transaction timeout in milliseconds. By default this value 
is defined by {@link
      * #DFLT_TRANSACTION_TIMEOUT}.
-     * <p>
-     * If transaction's execution is not completed by calling {@link 
Transaction#commit()},
-     * {@link Transaction#rollback()} or {@link Transaction#close()}
-     * before timeout expires, it will be rolled back asynchronously. All 
further caches operations will fail until new
-     * explicit transaction is started in current thread by calling {@link 
IgniteTransactions#txStart()}.
      *
      * @param dfltTxTimeout Default transaction timeout.
      * @return {@code this} for chaining.

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
index 2c23a7a..822651c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
@@ -913,8 +913,7 @@ public class GridNearOptimisticTxPrepareFuture extends 
GridNearOptimisticTxPrepa
                 return;
 
             if (RCV_RES_UPD.compareAndSet(this, 0, 1)) {
-                if (parent.cctx.tm().deadlockDetectionEnabled() &&
-                    (parent.tx.remainingTime() == -1 || res.error() instanceof 
IgniteTxTimeoutCheckedException)) {
+                if (parent.tx.remainingTime() == -1 || res.error() instanceof 
IgniteTxTimeoutCheckedException) {
                     parent.onTimeout();
 
                     return;

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
index 2308d71..ee5797e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
@@ -4033,7 +4033,8 @@ public class GridNearTxLocal extends 
GridDhtTxLocalAdapter implements GridTimeou
         if (state(MARKED_ROLLBACK, true)) {
             cctx.kernalContext().closure().runLocalSafe(new Runnable() {
                 @Override public void run() {
-                    log().error("Transaction is timed out and will be rolled 
back: " + GridNearTxLocal.this);
+                    log().error("Transaction is timed out and will be rolled 
back [timeout=" + timeout() +
+                            ", tx=" + GridNearTxLocal.this + ']');
 
                     rollbackNearTxLocalAsync();
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
index 997fd8c..7adfb82 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
@@ -154,7 +154,7 @@ public class IgniteTransactionsImpl<K, V> implements 
IgniteTransactionsEx {
         try {
             GridNearTxLocal tx = cctx.tm().userTx(sysCacheCtx);
 
-            // Allow to override timed out transactions.
+            // Allow overriding timed out transaction.
             if (tx != null && !tx.timedOut())
                 throw new IllegalStateException("Failed to start new 
transaction " +
                     "(current thread already has a transaction): " + tx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
index 2214e10..db7a600 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
@@ -1422,8 +1422,9 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
      */
     private void clearThreadMap(IgniteInternalTx tx) {
         if (tx.local() && !tx.dht()) {
-            if (!tx.system() && !tx.timedOut())
-                threadMap.remove(tx.threadId(), tx);
+            if (!tx.system())
+                if (deadlockDetectionEnabled() || !tx.timedOut())
+                    threadMap.remove(tx.threadId(), tx);
             else {
                 Integer cacheId = tx.txState().firstCacheId();
 
@@ -1711,7 +1712,7 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
     }
 
     /**
-     * Remove tx from map.
+     * Removes tx from map.
      */
     public void onLocalClose(IgniteInternalTx tx) {
         threadMap.remove(tx.threadId(), tx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheForceTxTimeoutSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheForceTxTimeoutSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheForceTxTimeoutSelfTest.java
new file mode 100644
index 0000000..34a1dc5
--- /dev/null
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheForceTxTimeoutSelfTest.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS;
+
+/**
+ * Test checks that grid transaction configuration doesn't influence system 
caches.
+ */
+public class IgniteTxConfigCacheForceTxTimeoutSelfTest extends 
IgniteTxConfigCacheSelfTest {
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        System.setProperty(IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS, "0");
+
+        super.beforeTestsStarted();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        super.afterTestsStopped();
+
+        System.clearProperty(IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS);
+    }
+
+    @Override public void testUserTxTimeout() throws Exception {
+        super.testUserTxTimeout();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheSelfTest.java
index f2e17e4..af09858 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxConfigCacheSelfTest.java
@@ -63,7 +63,7 @@ public class IgniteTxConfigCacheSelfTest extends 
GridCommonAbstractTest {
     private static final String CACHE_NAME = "cache_name";
 
     /** Timeout of transaction. */
-    private static final long TX_TIMEOUT = 100;
+    private static final long TX_TIMEOUT = 300;
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java
index 0a2601d..20f6695 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java
@@ -227,6 +227,59 @@ public class TxRollbackOnTimeoutTest extends 
GridCommonAbstractTest {
     }
 
     /**
+     * Tests if deadlock is unblocked on timeout.
+     * @throws Exception
+     */
+    public void testDeadlockUnblockedOnTimeout() throws Exception {
+        final CountDownLatch l = new CountDownLatch(2);
+
+        IgniteInternalFuture<?> fut1 = multithreadedAsync(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    try (Transaction tx = ignite(0).transactions().txStart()) {
+                        ignite(0).cache(CACHE_NAME).put(1, 1);
+
+                        l.countDown();
+                        U.awaitQuiet(l);
+
+                        ignite(0).cache(CACHE_NAME).put(2, 2);
+
+                        tx.commit();
+
+                        fail();
+                    }
+                } catch (CacheException e) {
+                    // No-op.
+                }
+            }
+        }, 1, "First");
+
+        IgniteInternalFuture<?> fut2 = multithreadedAsync(new Runnable() {
+            @Override public void run() {
+                U.awaitQuiet(blocked);
+
+                try (Transaction tx = 
ignite(1).transactions().txStart(PESSIMISTIC, REPEATABLE_READ, TX_TIMEOUT, 1)) {
+                    ignite(1).cache(CACHE_NAME).put(2, 2);
+
+                    l.countDown();
+                    U.awaitQuiet(l);
+
+                    ignite(1).cache(CACHE_NAME).put(1, 1);
+
+                    tx.commit();
+                }
+            }
+        }, 1, "Second");
+
+        fut1.get();
+        fut2.get();
+
+        assertTrue(ignite(0).cache(CACHE_NAME).containsKey(1));
+        assertTrue(ignite(0).cache(CACHE_NAME).containsKey(2));
+    }
+
+    /**
      * Tests timeout object cleanup on tx commit.
      *
      * @throws Exception If failed.
@@ -442,7 +495,7 @@ public class TxRollbackOnTimeoutTest extends 
GridCommonAbstractTest {
                     tx.commit();
                 }
             }
-        }, 2, "Second");
+        }, 1, "Second");
 
         try {
             fut1.get();

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
 
b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
index c06647a..35331e9 100755
--- 
a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
@@ -102,6 +102,7 @@ import 
org.apache.ignite.internal.processors.cache.IgniteClientAffinityAssignmen
 import 
org.apache.ignite.internal.processors.cache.IgniteIncompleteCacheObjectSelfTest;
 import 
org.apache.ignite.internal.processors.cache.IgnitePutAllLargeBatchSelfTest;
 import 
org.apache.ignite.internal.processors.cache.IgnitePutAllUpdateNonPreloadedPartitionSelfTest;
+import 
org.apache.ignite.internal.processors.cache.IgniteTxConfigCacheForceTxTimeoutSelfTest;
 import org.apache.ignite.internal.processors.cache.IgniteTxConfigCacheSelfTest;
 import 
org.apache.ignite.internal.processors.cache.context.IgniteCacheAtomicExecutionContextTest;
 import 
org.apache.ignite.internal.processors.cache.context.IgniteCacheContinuousExecutionContextTest;
@@ -302,6 +303,7 @@ public class IgniteCacheTestSuite extends TestSuite {
         suite.addTestSuite(CachePutEventListenerErrorSelfTest.class);
 
         suite.addTestSuite(IgniteTxConfigCacheSelfTest.class);
+        suite.addTestSuite(IgniteTxConfigCacheForceTxTimeoutSelfTest.class);
 
         suite.addTestSuite(CacheTxFastFinishTest.class);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0177135/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/HadoopTxConfigCacheTest.java
----------------------------------------------------------------------
diff --git 
a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/HadoopTxConfigCacheTest.java
 
b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/HadoopTxConfigCacheTest.java
index e85baed..554c489 100644
--- 
a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/HadoopTxConfigCacheTest.java
+++ 
b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/HadoopTxConfigCacheTest.java
@@ -25,7 +25,7 @@ import org.apache.ignite.internal.util.typedef.internal.CU;
 /**
  * Test checks whether hadoop system cache doesn't use user defined TX config.
  */
-public class HadoopTxConfigCacheTest  extends IgniteTxConfigCacheSelfTest {
+public class HadoopTxConfigCacheTest extends IgniteTxConfigCacheSelfTest {
     /**
      * Success if system caches weren't timed out.
      *

Reply via email to