X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fstatistics%2FStatisticsContextImpl.java;h=27ee72b5cd8e3d2ebc4b61f474db49c1a2e330fc;hb=e4faef067c5ed399ccdd686d26c09a0b7a6cf4b7;hp=c83a25f65e73621a3edae7c85d486bf90e3fbe06;hpb=d1cecf72132dc1fbaf2074f21530cb51919a55c4;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java index c83a25f65e..27ee72b5cd 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java @@ -12,27 +12,19 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; -import com.sun.org.apache.xpath.internal.operations.Bool; -import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; import java.util.List; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceState; import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsContext; -import org.opendaylight.openflowplugin.impl.rpc.RequestContextImpl; +import org.opendaylight.openflowplugin.impl.rpc.AbstractRequestContext; import org.opendaylight.openflowplugin.impl.services.RequestContextUtil; import org.opendaylight.openflowplugin.impl.statistics.services.dedicated.StatisticsGatheringService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAllFlowsStatisticsFromAllFlowTablesInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; -import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,52 +34,40 @@ import org.slf4j.LoggerFactory; public class StatisticsContextImpl implements StatisticsContext { private static final Logger LOG = LoggerFactory.getLogger(StatisticsContextImpl.class); - public static final String CONNECTION_CLOSED = "Connection closed."; - private final List requestContexts = new ArrayList(); + private static final String CONNECTION_CLOSED = "Connection closed."; + private final Collection> requestContexts = new HashSet<>(); private final DeviceContext deviceContext; - private final StatisticsGatheringService statisticsGatheringService; public StatisticsContextImpl(final DeviceContext deviceContext) { this.deviceContext = deviceContext; statisticsGatheringService = new StatisticsGatheringService(this, deviceContext); - - } - - private void pollFlowStatistics() { - final KeyedInstanceIdentifier nodeII = InstanceIdentifier.create(Nodes.class).child(Node.class, new NodeKey(deviceContext.getPrimaryConnectionContext().getNodeId())); - final NodeRef nodeRef = new NodeRef(nodeII); - final GetAllFlowsStatisticsFromAllFlowTablesInputBuilder builder = - new GetAllFlowsStatisticsFromAllFlowTablesInputBuilder(); - builder.setNode(nodeRef); - //TODO : process data from result } @Override public ListenableFuture gatherDynamicData() { - final DeviceState devState = deviceContext.getDeviceState(); + final SettableFuture settableResultingFuture = SettableFuture.create(); + ListenableFuture resultingFuture = settableResultingFuture; - final ListenableFuture resultingFuture; if (ConnectionContext.CONNECTION_STATE.WORKING.equals(deviceContext.getPrimaryConnectionContext().getConnectionState())) { - final SettableFuture settableResultingFuture = SettableFuture.create(); - resultingFuture = settableResultingFuture; - ListenableFuture emptyFuture = Futures.immediateFuture(new Boolean(false)); - final ListenableFuture flowStatistics = devState.isFlowStatisticsAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPFLOW) : emptyFuture; + final DeviceState devState = deviceContext.getDeviceState(); + final ListenableFuture emptyFuture = Futures.immediateFuture(new Boolean(false)); + final ListenableFuture flowStatistics = devState.isFlowStatisticsAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPFLOW) : emptyFuture; - final ListenableFuture tableStatistics = devState.isTableStatisticsAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPTABLE) : emptyFuture; + final ListenableFuture tableStatistics = devState.isTableStatisticsAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPTABLE) : emptyFuture; - final ListenableFuture portStatistics = devState.isPortStatisticsAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPPORTSTATS) : emptyFuture; + final ListenableFuture portStatistics = devState.isPortStatisticsAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPPORTSTATS) : emptyFuture; - final ListenableFuture queueStatistics = devState.isQueueStatisticsAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPQUEUE) : emptyFuture; + final ListenableFuture queueStatistics = devState.isQueueStatisticsAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPQUEUE) : emptyFuture; - final ListenableFuture groupDescStatistics = devState.isGroupAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPGROUPDESC) : emptyFuture; - final ListenableFuture groupStatistics = devState.isGroupAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPGROUP) : emptyFuture; + final ListenableFuture groupDescStatistics = devState.isGroupAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPGROUPDESC) : emptyFuture; + final ListenableFuture groupStatistics = devState.isGroupAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPGROUP) : emptyFuture; - final ListenableFuture meterConfigStatistics = devState.isMetersAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPMETERCONFIG) : emptyFuture; - final ListenableFuture meterStatistics = devState.isMetersAvailable() ? wrapLoggingOnStatisticsRequestCall(MultipartType.OFPMPMETER) : emptyFuture; + final ListenableFuture meterConfigStatistics = devState.isMetersAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPMETERCONFIG) : emptyFuture; + final ListenableFuture meterStatistics = devState.isMetersAvailable() ? StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, MultipartType.OFPMPMETER) : emptyFuture; final ListenableFuture> allFutures = Futures.allAsList(Arrays.asList(flowStatistics, tableStatistics, groupDescStatistics, groupStatistics, meterConfigStatistics, meterStatistics, portStatistics, queueStatistics)); @@ -95,7 +75,7 @@ public class StatisticsContextImpl implements StatisticsContext { @Override public void onSuccess(final List booleans) { boolean atLeastOneSuccess = false; - for (Boolean bool : booleans){ + for (final Boolean bool : booleans) { atLeastOneSuccess |= bool.booleanValue(); } settableResultingFuture.set(new Boolean(atLeastOneSuccess)); @@ -107,46 +87,35 @@ public class StatisticsContextImpl implements StatisticsContext { } }); } else { - resultingFuture = Futures.immediateFailedFuture(new Throwable("Device connection doesn't exist anymore.")); - } - return resultingFuture; - } - - private ListenableFuture wrapLoggingOnStatisticsRequestCall(final MultipartType type) { - final ListenableFuture future = StatisticsGatheringUtils.gatherStatistics(statisticsGatheringService, deviceContext, type); - Futures.addCallback(future, new FutureCallback() { - @Override - public void onSuccess(final Object o) { - LOG.trace("Multipart response for {} was successful.", type); - } - - @Override - public void onFailure(final Throwable throwable) { - LOG.trace("Multipart response for {} FAILED.", type, throwable); + switch (deviceContext.getPrimaryConnectionContext().getConnectionState()) { + case RIP: + resultingFuture = Futures.immediateFailedFuture(new Throwable(String.format("Device connection doesn't exist anymore. Primary connection status : %s", deviceContext.getPrimaryConnectionContext().getConnectionState()))); + break; + default: + resultingFuture = Futures.immediateCheckedFuture(Boolean.TRUE); + break; } - }); - return future; - } - @Override - public void forgetRequestContext(final RequestContext requestContext) { - requestContexts.remove(requestContexts); - } - @Override - public SettableFuture> storeOrFail(final RequestContext data) { - requestContexts.add(data); - return data.getFuture(); + } + return resultingFuture; } @Override public RequestContext createRequestContext() { - return new RequestContextImpl<>(this); + final AbstractRequestContext ret = new AbstractRequestContext() { + @Override + public void close() { + requestContexts.remove(this); + } + }; + requestContexts.add(ret); + return ret; } @Override - public void close() throws Exception { - for (RequestContext requestContext : requestContexts) { + public void close() { + for (final RequestContext requestContext : requestContexts) { RequestContextUtil.closeRequestContextWithRpcError(requestContext, CONNECTION_CLOSED); } }