X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-common-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fcommon%2Fimpl%2Fservice%2FAbstractDataTransaction.java;h=b2a03c298772caba9509e3122598dd8f1bc06aee;hb=cc0542591cd61d968af7083409730f24954feae1;hp=c73a62779921d74837d96eb9c06a3f274f06cf1b;hpb=fa3bc33c3103f8b52a57954d024e4b390ea01c94;p=controller.git 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 c73a627799..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,42 +7,58 @@ */ 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; import org.opendaylight.yangtools.concepts.Path; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@SuppressWarnings("all") 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 broker;
protected AbstractDataTransaction(final Object identifier,
final AbstractDataBroker dataBroker) {
super(dataBroker);
- this.identifier = identifier;
- this.broker = dataBroker;
- this.status = TransactionStatus.NEW;
- AbstractDataTransaction.LOG.debug("Transaction {} Allocated.", identifier);
+ this.identifier = Preconditions.checkNotNull(identifier);
+ this.broker = Preconditions.checkNotNull(dataBroker);
+ this.allocationTime = System.nanoTime();
+ LOG.debug("Transaction {} Allocated.", identifier);
+ }
+
+ @Override
+ public Object getIdentifier() {
+ return this.identifier;
}
@Override
public Future , D extends Objec
return this.broker.readOperationalData(path);
}
-
-
@Override
public int hashCode() {
final int prime = 31;
@@ -75,19 +89,24 @@ public abstract class AbstractDataTransaction , D extends Objec
}
@Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals(final Object obj) {
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (getClass() != obj.getClass()) {
return false;
- AbstractDataTransaction other = (AbstractDataTransaction) obj;
+ }
+ AbstractDataTransaction, ?> other = (AbstractDataTransaction, ?>) obj;
if (identifier == null) {
- if (other.identifier != null)
+ if (other.identifier != null) {
return false;
- } else if (!identifier.equals(other.identifier))
+ }
+ } else if (!identifier.equals(other.identifier)) {
return false;
+ }
return true;
}
@@ -98,11 +117,35 @@ public abstract class AbstractDataTransaction , D extends Objec
protected abstract void onStatusChange(final TransactionStatus status);
- public void changeStatus(final TransactionStatus status) {
- Object _identifier = this.getIdentifier();
- AbstractDataTransaction.LOG
- .debug("Transaction {} transitioned from {} to {}", _identifier, this.status, status);
+ public void succeeded() {
+ this.completeTime = System.nanoTime();
+ 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();
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Transaction {} Failed after {}ms.", identifier, TimeUnit.NANOSECONDS.toMillis(completeTime - readyTime));
+ }
+ changeStatus(TransactionStatus.FAILED);
+ }
+
+ private void changeStatus(final TransactionStatus status) {
+ LOG.debug("Transaction {} transitioned from {} to {}", getIdentifier(), this.status, status);
this.status = status;
this.onStatusChange(status);
}
+
+ public static ListenableFuture