From: Michael Vorburger Date: Fri, 31 Aug 2018 16:12:56 +0000 (+0200) Subject: reduce duplication in ManagedTransactionFactory impls (1/2) X-Git-Tag: release/neon~110 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F31%2F75631%2F4;p=genius.git reduce duplication in ManagedTransactionFactory impls (1/2) in ManagedNewTransactionRunnerImpl and ManagedTransactionFactoryImpl Change-Id: I88a528691511f70c41d1169858747cc88e0a9fcc Signed-off-by: Michael Vorburger --- 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()); + } }