From d9a98715f3559e510fb5e8142d3d7cb0ab98fa3b Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 12 Sep 2014 11:42:10 +0200 Subject: [PATCH] BUG-650: cache translated future We are instantiating a done future with fixed result -- this is an invariant, which can readily be shared. do precisely that by retaining a single global instance. Change-Id: I0a24adf6f3df4794fda5148c04baed7bbde11c64 Signed-off-by: Robert Varga --- .../impl/service/AbstractDataTransaction.java | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/AbstractDataTransaction.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/AbstractDataTransaction.java index d544c4b371..b2a03c2987 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/AbstractDataTransaction.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/AbstractDataTransaction.java @@ -7,9 +7,13 @@ */ package org.opendaylight.controller.md.sal.common.impl.service; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.AsyncFunction; +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; - import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.common.impl.AbstractDataModification; @@ -19,15 +23,11 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.AsyncFunction; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; - public abstract class AbstractDataTransaction

, D extends Object> extends AbstractDataModification { - private final static Logger LOG = LoggerFactory.getLogger(AbstractDataTransaction.class); + private static final Logger LOG = LoggerFactory.getLogger(AbstractDataTransaction.class); + private static final ListenableFuture> SUCCESS_FUTURE = + Futures.immediateFuture(RpcResultBuilder.success(TransactionStatus.COMMITED).build()); private final Object identifier; private final long allocationTime; @@ -55,9 +55,10 @@ public abstract class AbstractDataTransaction

, D extends Objec @Override public Future> commit() { readyTime = System.nanoTime(); - LOG.debug("Transaction {} Ready after {}ms.", identifier, TimeUnit.NANOSECONDS.toMillis(readyTime - allocationTime)); + if (LOG.isDebugEnabled()) { + LOG.debug("Transaction {} Ready after {}ms.", identifier, TimeUnit.NANOSECONDS.toMillis(readyTime - allocationTime)); + } changeStatus(TransactionStatus.SUBMITED); - return this.broker.commit(this); } @@ -88,7 +89,7 @@ public abstract class AbstractDataTransaction

, D extends Objec } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -118,13 +119,18 @@ public abstract class AbstractDataTransaction

, D extends Objec public void succeeded() { this.completeTime = System.nanoTime(); - LOG.debug("Transaction {} Committed after {}ms.", identifier, TimeUnit.NANOSECONDS.toMillis(completeTime - readyTime)); + if (LOG.isDebugEnabled()) { + LOG.debug("Transaction {} Committed after {}ms.", identifier, TimeUnit.NANOSECONDS.toMillis(completeTime - readyTime)); + } changeStatus(TransactionStatus.COMMITED); } public void failed() { this.completeTime = System.nanoTime(); - LOG.debug("Transaction {} Failed after {}ms.", identifier, TimeUnit.NANOSECONDS.toMillis(completeTime - readyTime)); + + if (LOG.isDebugEnabled()) { + LOG.debug("Transaction {} Failed after {}ms.", identifier, TimeUnit.NANOSECONDS.toMillis(completeTime - readyTime)); + } changeStatus(TransactionStatus.FAILED); } @@ -134,14 +140,12 @@ public abstract class AbstractDataTransaction

, D extends Objec this.onStatusChange(status); } - public static ListenableFuture> convertToLegacyCommitFuture( - CheckedFuture from ) { + public static ListenableFuture> convertToLegacyCommitFuture(final CheckedFuture from) { return Futures.transform(from, new AsyncFunction>() { @Override - public ListenableFuture> apply(Void input) throws Exception { - return Futures.immediateFuture(RpcResultBuilder. - success(TransactionStatus.COMMITED).build()); + public ListenableFuture> apply(final Void input) { + return SUCCESS_FUTURE; } - } ); + }); } } -- 2.36.6