BUG 8422: Change tx handlers hard timeout 32/57132/3
authorTomas Cere <tcere@cisco.com>
Tue, 16 May 2017 10:40:35 +0000 (12:40 +0200)
committerAnil Belur <abelur@linuxfoundation.org>
Wed, 17 May 2017 00:10:46 +0000 (00:10 +0000)
This makes write-transactions/produce-transactions return an
RpcError upon reaching 2 minutes of waiting after the last
transaction is submitted in case the transactions arent timed out
from the frontend.

Also close producer when the initial write into id-ints list fails.

Change-Id: I20abbd02ed14e16d9e9a49f935113c0044e7c6d8
Signed-off-by: Tomas Cere <tcere@cisco.com>
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/ProduceTransactionsHandler.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/WriteTransactionsHandler.java

index 0d49a697d6d5b1227ee704bbb5099233b07cf05c..21c82b7c907800eb2cb7638ba21f393ef92a4b3a 100644 (file)
@@ -143,11 +143,17 @@ public class ProduceTransactionsHandler implements Runnable {
         cursor.close();
 
         try {
-            tx.submit().checkedGet();
-        } catch (final TransactionCommitFailedException e) {
+            tx.submit().checkedGet(125, TimeUnit.SECONDS);
+        } catch (final TransactionCommitFailedException | TimeoutException e) {
             LOG.warn("Unable to fill the initial item list.", e);
             settableFuture.set(RpcResultBuilder.<ProduceTransactionsOutput>failed()
                     .withError(RpcError.ErrorType.APPLICATION, "Unexpected-exception", e).build());
+
+            try {
+                itemProducer.close();
+            } catch (final DOMDataTreeProducerException exception) {
+                LOG.warn("Failure while closing producer.", exception);
+            }
             return false;
         }
 
@@ -192,7 +198,8 @@ public class ProduceTransactionsHandler implements Runnable {
             final ListenableFuture<List<Void>> allFutures = Futures.allAsList(futures);
 
             try {
-                allFutures.get(30, TimeUnit.SECONDS);
+                // Timeout from cds should be 2 minutes so leave some leeway.
+                allFutures.get(125, TimeUnit.SECONDS);
 
                 LOG.debug("All futures completed successfully.");
 
index e4236abc7b38adf6c55034d696ff2ad2e6e5ac32..c4abb391e64b94e59a5058d018d887af3e55d680 100644 (file)
@@ -189,8 +189,8 @@ public class WriteTransactionsHandler implements Runnable {
         tx.put(LogicalDatastoreType.CONFIGURATION, itemListId, mapBuilder.build());
 
         try {
-            tx.submit().checkedGet();
-        } catch (final TransactionCommitFailedException e) {
+            tx.submit().checkedGet(125, TimeUnit.SECONDS);
+        } catch (final TransactionCommitFailedException | TimeoutException e) {
             LOG.warn("Unable to fill the initial item list.", e);
             settableFuture.set(RpcResultBuilder.<WriteTransactionsOutput>failed()
                     .withError(RpcError.ErrorType.APPLICATION, "Unexpected-exception", e).build());
@@ -234,7 +234,8 @@ public class WriteTransactionsHandler implements Runnable {
             final ListenableFuture<List<Void>> allFutures = Futures.allAsList(futures);
 
             try {
-                allFutures.get(30, TimeUnit.SECONDS);
+                // Timeout from cds should be 2 minutes so leave some leeway.
+                allFutures.get(125, TimeUnit.SECONDS);
 
                 LOG.debug("All futures completed successfully.");