From: Robert Varga Date: Wed, 12 Feb 2014 02:34:26 +0000 (+0100) Subject: Compress removals into a single transaction X-Git-Tag: autorelease-tag-v20140601202136_82eb3f9~463 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=cb037c92ab0b907a96487ff84052638bdddab3e9 Compress removals into a single transaction When node removal occurs, do not cascade into multiple transactions, but trigger only a single one. Change-Id: Ic9994e6a801953efdf83a707be3b821f9a93b35b Signed-off-by: Robert Varga --- 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..acf182ad2b 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 @@ -36,39 +36,33 @@ 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 static final 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); @@ -114,56 +108,50 @@ public class StatisticsUpdateHandler implements DataChangeListener { } } } - + + 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(); } }