X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fstatistics-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fstatistics%2Fmanager%2FStatisticsUpdateHandler.java;h=e22bd0874fb2e94db636b88c482682e32655c41e;hb=84c506752f2041f6133bd4514d87321fb9a311fe;hp=941a8f8c2cd97e83a3a030e5d182fb835cb9c9e2;hpb=065ef4acddbae75329e75562c533120d2d615efe;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateHandler.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateHandler.java index 941a8f8c2c..e22bd0874f 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateHandler.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateHandler.java @@ -9,12 +9,10 @@ package org.opendaylight.controller.md.statistics.manager; import java.util.Map; import java.util.Set; -import java.util.concurrent.ExecutionException; import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowStatisticsData; @@ -22,148 +20,102 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.q import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupDescStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupStatistics; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; 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.meter.statistics.rev131111.NodeMeterConfigStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterStatistics; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsData; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Following are two main responsibilities of the class - * 1) Listen for the create changes in config data store for tree nodes (Flow,Group,Meter,Queue) + * 1) Listen for the create changes in config data store for tree nodes (Flow,Group,Meter,Queue) * and send statistics request to the switch to fetch the statistics - * + * * 2)Listen for the remove changes in config data store for tree nodes (Flow,Group,Meter,Queue) * and remove the relative statistics data from operational data store. - * + * * @author avishnoi@in.ibm.com * */ public class StatisticsUpdateHandler implements DataChangeListener { - - public final static Logger suhLogger = LoggerFactory.getLogger(StatisticsUpdateHandler.class); - private final StatisticsProvider statisticsManager; - - public StatisticsUpdateHandler(final StatisticsProvider manager){ + public StatisticsUpdateHandler(final StatisticsProvider manager){ this.statisticsManager = manager; } - - public StatisticsProvider getStatisticsManager(){ - return statisticsManager; - } @SuppressWarnings("unchecked") @Override public void onDataChanged(DataChangeEvent, DataObject> change) { - - Map, DataObject> nodeAdditions = change.getCreatedOperationalData(); - for (InstanceIdentifier dataObjectInstance : nodeAdditions.keySet()) { - DataObject dataObject = nodeAdditions.get(dataObjectInstance); - if(dataObject instanceof Node){ - - Node node = (Node) dataObject; - if(node.getAugmentation(FlowCapableNode.class) != null){ - this.statisticsManager.sendStatisticsRequestsToNode(node); - } - } - } - Map, DataObject> additions = change.getCreatedConfigurationData(); for (InstanceIdentifier dataObjectInstance : additions.keySet()) { DataObject dataObject = additions.get(dataObjectInstance); - InstanceIdentifier nodeII = dataObjectInstance.firstIdentifierOf(Node.class); - NodeRef nodeRef = new NodeRef(nodeII); + NodeKey nodeII = dataObjectInstance.firstKeyOf(Node.class, NodeKey.class); if(dataObject instanceof Flow){ Flow flow = (Flow) dataObject; - try { - this.statisticsManager.sendFlowStatsFromTableRequest(nodeRef, flow); - } catch (InterruptedException | ExecutionException e) { - suhLogger.warn("Following exception occured while sending flow statistics request newly added flow: {}", e); - } + this.statisticsManager.sendFlowStatsFromTableRequest(nodeII, flow); } if(dataObject instanceof Meter){ - try { - this.statisticsManager.sendMeterConfigStatisticsRequest(nodeRef); - } catch (InterruptedException | ExecutionException e) { - suhLogger.warn("Following exception occured while sending meter statistics request for newly added meter: {}", e); - } + this.statisticsManager.sendMeterConfigStatisticsRequest(nodeII); } if(dataObject instanceof Group){ - try { - this.statisticsManager.sendGroupDescriptionRequest(nodeRef); - } catch (InterruptedException | ExecutionException e) { - suhLogger.warn("Following exception occured while sending group description request for newly added group: {}", e); - } + this.statisticsManager.sendGroupDescriptionRequest(nodeII); } if(dataObject instanceof Queue){ Queue queue = (Queue) dataObject; InstanceIdentifier nodeConnectorII = dataObjectInstance.firstIdentifierOf(NodeConnector.class); NodeConnectorKey nodeConnectorKey = InstanceIdentifier.keyOf(nodeConnectorII); - try { - this.statisticsManager.sendQueueStatsFromGivenNodeConnector(nodeRef, nodeConnectorKey.getId(), queue.getQueueId()); - } catch (InterruptedException | ExecutionException e) { - suhLogger.warn("Following exception occured while sending queue statistics request for newly added group: {}", e); - } + this.statisticsManager.sendQueueStatsFromGivenNodeConnector(nodeII, nodeConnectorKey.getId(), queue.getQueueId()); } } - + + DataModificationTransaction it = this.statisticsManager.startChange(); Set> removals = change.getRemovedConfigurationData(); for (InstanceIdentifier dataObjectInstance : removals) { DataObject dataObject = change.getOriginalConfigurationData().get(dataObjectInstance); - + if(dataObject instanceof Flow){ InstanceIdentifier flowII = (InstanceIdentifier)dataObjectInstance; - InstanceIdentifier flowAugmentation = + InstanceIdentifier flowAugmentation = InstanceIdentifier.builder(flowII).augmentation(FlowStatisticsData.class).toInstance(); - removeAugmentedOperationalData(flowAugmentation); + it.removeOperationalData(flowAugmentation); } if(dataObject instanceof Meter){ InstanceIdentifier meterII = (InstanceIdentifier)dataObjectInstance; - - InstanceIdentifier nodeMeterConfigStatsAugmentation = + + InstanceIdentifier nodeMeterConfigStatsAugmentation = InstanceIdentifier.builder(meterII).augmentation(NodeMeterConfigStats.class).toInstance(); - removeAugmentedOperationalData(nodeMeterConfigStatsAugmentation); + it.removeOperationalData(nodeMeterConfigStatsAugmentation); - InstanceIdentifier nodeMeterStatisticsAugmentation = + InstanceIdentifier nodeMeterStatisticsAugmentation = InstanceIdentifier.builder(meterII).augmentation(NodeMeterStatistics.class).toInstance(); - removeAugmentedOperationalData(nodeMeterStatisticsAugmentation); + it.removeOperationalData(nodeMeterStatisticsAugmentation); } - + if(dataObject instanceof Group){ InstanceIdentifier groupII = (InstanceIdentifier)dataObjectInstance; - - InstanceIdentifier nodeGroupDescStatsAugmentation = + + InstanceIdentifier nodeGroupDescStatsAugmentation = InstanceIdentifier.builder(groupII).augmentation(NodeGroupDescStats.class).toInstance(); - removeAugmentedOperationalData(nodeGroupDescStatsAugmentation); + it.removeOperationalData(nodeGroupDescStatsAugmentation); - InstanceIdentifier nodeGroupStatisticsAugmentation = + InstanceIdentifier nodeGroupStatisticsAugmentation = InstanceIdentifier.builder(groupII).augmentation(NodeGroupStatistics.class).toInstance(); - removeAugmentedOperationalData(nodeGroupStatisticsAugmentation); + it.removeOperationalData(nodeGroupStatisticsAugmentation); } - + if(dataObject instanceof Queue){ InstanceIdentifier queueII = (InstanceIdentifier)dataObjectInstance; - - InstanceIdentifier nodeConnectorQueueStatisticsDataAugmentation = + + InstanceIdentifier nodeConnectorQueueStatisticsDataAugmentation = InstanceIdentifier.builder(queueII).augmentation(FlowCapableNodeConnectorQueueStatisticsData.class).toInstance(); - removeAugmentedOperationalData(nodeConnectorQueueStatisticsDataAugmentation); + it.removeOperationalData(nodeConnectorQueueStatisticsDataAugmentation); } } - } - - private void removeAugmentedOperationalData(InstanceIdentifier dataObjectInstance ){ - if(dataObjectInstance != null){ - DataModificationTransaction it = this.statisticsManager.startChange(); - it.removeOperationalData(dataObjectInstance); - it.commit(); - } + it.commit(); } }