X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fstatistics-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fstatistics%2Fmanager%2FAbstractStatsTracker.java;h=c29b6a7730ced4f24374d2e4e67a650f3ed69293;hb=721b580748cb93b3dac952ff1f111d0ab0da0c79;hp=81fa7c87917e98af33da999da7b17949592a8fcc;hpb=e41bd0a8c722f09d901dd17b23480ad928c3e784;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java index 81fa7c8791..c29b6a7730 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java @@ -14,7 +14,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.Future; -import org.opendaylight.controller.md.statistics.manager.MultipartMessageManager.StatsRequestType; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionAware; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; @@ -23,18 +22,41 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import com.google.common.base.Function; import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.JdkFutureAdapters; abstract class AbstractStatsTracker { - private static final Function, TransactionId> FUNCTION = - new Function, TransactionId>() { + private static final Logger logger = LoggerFactory.getLogger(AbstractStatsTracker.class); + private final FutureCallback> callback = + new FutureCallback>() { @Override - public TransactionId apply(RpcResult input) { - return input.getResult().getTransactionId(); + public void onSuccess(RpcResult result) { + if (result.isSuccessful()) { + final TransactionId id = result.getResult().getTransactionId(); + if (id == null) { + final Throwable t = new UnsupportedOperationException("No protocol support"); + t.fillInStackTrace(); + onFailure(t); + } else { + context.registerTransaction(id); + } + } else { + logger.debug("Statistics request failed: {}", result.getErrors()); + + final Throwable t = new RPCFailedException("Failed to send statistics request", result.getErrors()); + t.fillInStackTrace(); + onFailure(t); + } + } + + @Override + public void onFailure(Throwable t) { + logger.debug("Failed to send statistics request", t); } }; @@ -59,8 +81,8 @@ abstract class AbstractStatsTracker { return context.getNodeIdentifier(); } - protected final void requestHelper(Future> future, StatsRequestType type) { - context.registerTransaction(Futures.transform(JdkFutureAdapters.listenInPoolThread(future), FUNCTION), type); + protected final void requestHelper(Future> future) { + Futures.addCallback(JdkFutureAdapters.listenInPoolThread(future), callback); } protected final DataModificationTransaction startTransaction() {