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%2FQueueStatsTracker.java;h=4a589703beb4303b9686d7887663b8f6d1492486;hb=67d58d1ab50f3c3bbe19a96fb6f0d9d94211829f;hp=a9db771fa610c856a7bd85fa617e1d574a607f4d;hpb=84c506752f2041f6133bd4514d87321fb9a311fe;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java index a9db771fa6..4a589703be 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java @@ -7,9 +7,12 @@ */ package org.opendaylight.controller.md.statistics.manager; +import java.util.Map.Entry; + +import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; +import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.QueueBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.QueueKey; @@ -24,20 +27,18 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216. import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.OpendaylightQueueStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.flow.capable.node.connector.queue.statistics.FlowCapableNodeConnectorQueueStatisticsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap; +import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.ListenableFuture; - -final class QueueStatsTracker extends AbstractStatsTracker { +final class QueueStatsTracker extends AbstractListeningStatsTracker { private static final Logger logger = LoggerFactory.getLogger(QueueStatsTracker.class); private final OpendaylightQueueStatisticsService queueStatsService; - QueueStatsTracker(OpendaylightQueueStatisticsService queueStatsService, final FlowCapableContext context, long lifetimeNanos) { - super(context, lifetimeNanos); - this.queueStatsService = Preconditions.checkNotNull(queueStatsService); + QueueStatsTracker(OpendaylightQueueStatisticsService queueStatsService, final FlowCapableContext context) { + super(context); + this.queueStatsService = queueStatsService; } @Override @@ -81,20 +82,80 @@ final class QueueStatsTracker extends AbstractStatsTracker request() { - GetAllQueuesStatisticsFromAllPortsInputBuilder input = new GetAllQueuesStatisticsFromAllPortsInputBuilder(); - input.setNode(getNodeRef()); + @Override + public void request() { + if (queueStatsService != null) { + GetAllQueuesStatisticsFromAllPortsInputBuilder input = new GetAllQueuesStatisticsFromAllPortsInputBuilder(); + input.setNode(getNodeRef()); - return requestHelper(queueStatsService.getAllQueuesStatisticsFromAllPorts(input.build())); + requestHelper(queueStatsService.getAllQueuesStatisticsFromAllPorts(input.build())); + } } - public ListenableFuture request(NodeConnectorId nodeConnectorId, QueueId queueId) { - GetQueueStatisticsFromGivenPortInputBuilder input = new GetQueueStatisticsFromGivenPortInputBuilder(); + public void request(NodeConnectorId nodeConnectorId, QueueId queueId) { + if (queueStatsService != null) { + GetQueueStatisticsFromGivenPortInputBuilder input = new GetQueueStatisticsFromGivenPortInputBuilder(); + + input.setNode(getNodeRef()); + input.setNodeConnectorId(nodeConnectorId); + input.setQueueId(queueId); + + requestHelper(queueStatsService.getQueueStatisticsFromGivenPort(input.build())); + } + } - input.setNode(getNodeRef()); - input.setNodeConnectorId(nodeConnectorId); - input.setQueueId(queueId); + @Override + public void onDataChanged(DataChangeEvent, DataObject> change) { + for (Entry, DataObject> e : change.getCreatedConfigurationData().entrySet()) { + if (Queue.class.equals(e.getKey().getTargetType())) { + final Queue queue = (Queue) e.getValue(); + final NodeConnectorKey key = e.getKey().firstKeyOf(NodeConnector.class, NodeConnectorKey.class); + logger.debug("Key {} triggered request for connector {} queue {}", key.getId(), queue.getQueueId()); + request(key.getId(), queue.getQueueId()); + } else { + logger.debug("Ignoring key {}", e.getKey()); + } + } + + final DataModificationTransaction trans = startTransaction(); + for (InstanceIdentifier key : change.getRemovedConfigurationData()) { + if (Queue.class.equals(key.getTargetType())) { + @SuppressWarnings("unchecked") + final InstanceIdentifier queue = (InstanceIdentifier)key; + final InstanceIdentifier del = queue + .augmentation(FlowCapableNodeConnectorQueueStatisticsData.class); + logger.debug("Key {} triggered remove of augmentation {}", key, del); + + trans.removeOperationalData(del); + } + } + trans.commit(); + } - return requestHelper(queueStatsService.getQueueStatisticsFromGivenPort(input.build())); + @Override + protected InstanceIdentifier listenPath() { + return getNodeIdentifierBuilder().child(NodeConnector.class) + .augmentation(FlowCapableNodeConnector.class).child(Queue.class).build(); + } + + @Override + protected String statName() { + return "Queue"; + } + + @Override + public void start(final DataBrokerService dbs) { + if (queueStatsService == null) { + logger.debug("No Queue Statistics service, not subscribing to queues on node {}", getNodeIdentifier()); + return; + } + + super.start(dbs); + } + + @Override + protected QueueStatsEntry createInvariantKey(QueueStatsEntry item) { + // No invariant data exist in the group description stats. + return item; } }