From e8a1199eb50859f4d8a80322b168f7167add9822 Mon Sep 17 00:00:00 2001 From: Anil Vishnoi Date: Thu, 9 Jan 2014 16:49:43 +0530 Subject: [PATCH] MD-SAL Statistics Manager-Fixed issue related to aggregate flow stats Also fixed minor bug in individual flow statistics augmentation. Change-Id: I787cbb54e70862d26521845988cee5e42651cc24 Signed-off-by: Anil Vishnoi --- .../manager/StatisticsProvider.java | 19 +++---------------- .../manager/StatisticsUpdateCommiter.java | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java index 19cf0ed386..45bc905502 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java @@ -260,22 +260,9 @@ public class StatisticsProvider implements AutoCloseable { this.multipartMessageManager.addTxIdToRequestTypeEntry(response.get().getResult().getTransactionId() , StatsRequestType.AGGR_FLOW); } + }else{ + spLogger.debug("No details found in data store for flow tables associated with Node {}",targetNodeKey); } - - //Note: Just for testing, because i am not able to fetch table list from datastore - // Bug-225 is raised for investigation. - -// spLogger.info("Send aggregate stats request for flow table {} to node {}",1,targetNodeKey); -// GetAggregateFlowStatisticsFromFlowTableForAllFlowsInputBuilder input = -// new GetAggregateFlowStatisticsFromFlowTableForAllFlowsInputBuilder(); -// -// input.setNode(new NodeRef(InstanceIdentifier.builder(Nodes.class).child(Node.class, targetNodeKey).toInstance())); -// input.setTableId(new TableId((short)1)); -// Future> response = -// flowStatsService.getAggregateFlowStatisticsFromFlowTableForAllFlows(input.build());` -// -// multipartMessageManager.setTxIdAndTableIdMapEntry(response.get().getResult().getTransactionId(), (short)1); - } private void sendAllNodeConnectorsStatisticsRequest(NodeRef targetNode) throws InterruptedException, ExecutionException{ @@ -376,7 +363,7 @@ public class StatisticsProvider implements AutoCloseable { private List getTablesFromNode(NodeKey nodeKey){ InstanceIdentifier nodesIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class,nodeKey).augmentation(FlowCapableNode.class).toInstance(); - FlowCapableNode node = (FlowCapableNode)dps.readConfigurationData(nodesIdentifier); + FlowCapableNode node = (FlowCapableNode)dps.readOperationalData(nodesIdentifier); List tablesId = new ArrayList(); if(node != null && node.getTable()!=null){ spLogger.info("Number of tables {} supported by node {}",node.getTable().size(),nodeKey); diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java index aa6e99a03f..e7f6129aa5 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java @@ -799,7 +799,11 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList * _ethernetSource=EthernetSource [_address=MacAddress [_value=00:00:00:00:00:00], _mask=null, augmentation=[]], * _ethernetType=EthernetType [_type=EtherType [_value=2048], _mask=null, augmentation=[]] * - * So this custom equals method add additional check, in case any match element is null in data-store-flow, but not + * Similarly for inPort, if user/application don't set any value for it, FRM will store null value for it in data store. + * When we fetch the same flow (with its statistics) from switch, plugin converts its value to openflow:X:0. + * e.g _inPort=Uri [_value=openflow:1:0] + * + * So this custom equals method add additional check to take care of these scenario, in case any match element is null in data-store-flow, but not * in the flow fetched from switch. * * @param statsFlow @@ -820,8 +824,7 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList return false; } } - } //else if(!storedFlow.getEthernetMatch().equals(statsFlow.getEthernetMatch())) { - else if(!EthernetMatchEquals(statsFlow.getEthernetMatch(),storedFlow.getEthernetMatch())) { + } else if(!EthernetMatchEquals(statsFlow.getEthernetMatch(),storedFlow.getEthernetMatch())) { return false; } if (storedFlow.getIcmpv4Match()== null) { @@ -847,7 +850,12 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList } if (storedFlow.getInPort()== null) { if (statsFlow.getInPort() != null) { - return false; + String[] portArr = statsFlow.getInPort().getValue().split(":"); + if(portArr.length >= 3){ + if(Integer.parseInt(portArr[2]) != 0){ + return false; + } + } } } else if(!storedFlow.getInPort().equals(statsFlow.getInPort())) { return false; -- 2.36.6