From 1d85dccb4f48c47b90c6aae95ce99167f4bc7a7e Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Fri, 31 Aug 2018 18:12:56 +0200 Subject: [PATCH] reduce duplication in ManagedTransactionFactory impls (1/2) in ManagedNewTransactionRunnerImpl and ManagedTransactionFactoryImpl Change-Id: I88a528691511f70c41d1169858747cc88e0a9fcc Signed-off-by: Michael Vorburger --- .../ManagedNewTransactionRunnerImpl.java | 38 +++++++------------ .../infra/ManagedTransactionFactoryImpl.java | 11 ++++-- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedNewTransactionRunnerImpl.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedNewTransactionRunnerImpl.java index cbd66c95f..3f9499e24 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedNewTransactionRunnerImpl.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedNewTransactionRunnerImpl.java @@ -74,14 +74,7 @@ public class ManagedNewTransactionRunnerImpl extends ManagedTransactionFactoryIm WriteTrackingReadWriteTransaction wrappedTx = new NonSubmitCancelableReadWriteTransaction(realTx); try { txConsumer.accept(wrappedTx); - if (wrappedTx.isWritten()) { - // The transaction contains changes, commit it - return realTx.submit(); - } else { - // The transaction only handled reads, cancel it - realTx.cancel(); - return Futures.immediateCheckedFuture(null); - } + return commit(realTx, null, wrappedTx); // catch Exception for both the thrown by accept() as well as any RuntimeException } catch (Exception e) { if (!realTx.cancel()) { @@ -101,14 +94,7 @@ public class ManagedNewTransactionRunnerImpl extends ManagedTransactionFactoryIm new WriteTrackingTypedReadWriteTransactionImpl<>(datastoreType, realTx); try { txConsumer.accept(wrappedTx); - if (wrappedTx.isWritten()) { - // The transaction contains changes, commit it - return realTx.commit().transform(v -> null, MoreExecutors.directExecutor()); - } else { - // The transaction only handled reads, cancel it - realTx.cancel(); - return FluentFuture.from(Futures.immediateFuture(null)); - } + return commit(realTx, null, wrappedTx); // catch Exception for both the thrown by accept() as well as any RuntimeException } catch (Exception e) { if (!realTx.cancel()) { @@ -127,14 +113,7 @@ public class ManagedNewTransactionRunnerImpl extends ManagedTransactionFactoryIm new WriteTrackingTypedReadWriteTransactionImpl<>(datastoreType, realTx); try { R result = txFunction.apply(wrappedTx); - if (wrappedTx.isWritten()) { - // The transaction contains changes, commit it - return realTx.commit().transform(v -> result, MoreExecutors.directExecutor()); - } else { - // The transaction only handled reads, cancel it - realTx.cancel(); - return FluentFuture.from(Futures.immediateFuture(result)); - } + return commit(realTx, result, wrappedTx); // catch Exception for both the thrown by accept() as well as any RuntimeException } catch (Exception e) { if (!realTx.cancel()) { @@ -161,4 +140,15 @@ public class ManagedNewTransactionRunnerImpl extends ManagedTransactionFactoryIm return chainConsumer.apply(new ManagedTransactionChainImpl(realTxChain)); } } + + private FluentFuture commit(ReadWriteTransaction realTx, R result, WriteTrackingTransaction wrappedTx) { + if (wrappedTx.isWritten()) { + // The transaction contains changes, commit it + return realTx.commit().transform(v -> result, MoreExecutors.directExecutor()); + } else { + // The transaction only handled reads, cancel it + realTx.cancel(); + return FluentFuture.from(Futures.immediateFuture(result)); + } + } } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedTransactionFactoryImpl.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedTransactionFactoryImpl.java index ae82cec49..ca1e60912 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedTransactionFactoryImpl.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/ManagedTransactionFactoryImpl.java @@ -52,8 +52,7 @@ class ManagedTransactionFactoryImpl implements ManagedTransactionFactory { ReadWriteTransaction realTx = transactionFactory.newReadWriteTransaction(); TypedReadWriteTransaction wrappedTx = new TypedReadWriteTransactionImpl<>(datastoreType, realTx); try { - R result = txFunction.apply(wrappedTx); - return realTx.commit().transform(v -> result, MoreExecutors.directExecutor()); + return commit(realTx, txFunction.apply(wrappedTx)); } catch (Exception e) { // catch Exception for both the thrown by accept() as well as any RuntimeException if (!realTx.cancel()) { @@ -83,7 +82,7 @@ class ManagedTransactionFactoryImpl implements ManagedTransactionFactory { TypedReadWriteTransaction wrappedTx = new TypedReadWriteTransactionImpl<>(datastoreType, realTx); try { txConsumer.accept(wrappedTx); - return realTx.commit().transform(commitInfo -> null, MoreExecutors.directExecutor()); + return commit(realTx, null); // catch Exception for both the thrown by accept() as well as any RuntimeException } catch (Exception e) { if (!realTx.cancel()) { @@ -102,7 +101,7 @@ class ManagedTransactionFactoryImpl implements ManagedTransactionFactory { new TypedWriteTransactionImpl<>(datastoreType, realTx); try { txConsumer.accept(wrappedTx); - return realTx.commit().transform(commitInfo -> null, MoreExecutors.directExecutor()); + return commit(realTx, null); // catch Exception for both the thrown by accept() as well as any RuntimeException } catch (Exception e) { if (!realTx.cancel()) { @@ -111,4 +110,8 @@ class ManagedTransactionFactoryImpl implements ManagedTransactionFactory { return FluentFuture.from(immediateFailedFuture(e)); } } + + private FluentFuture commit(WriteTransaction realTx, R result) { + return realTx.commit().transform(v -> result, MoreExecutors.directExecutor()); + } } -- 2.36.6