X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fstatistics%2Fservices%2Fdirect%2FFlowDirectStatisticsService.java;h=a106ad93e57f9a16f74e1d6a0b7058c2863e27b2;hb=0ac8877c3539d82e55ffe49dc0a2c8bcb0c82b19;hp=72066b0395f578dc3f72600e121d2b347f04ba93;hpb=6e8700e027d738d57e67a0cbb0523c9cf33b9445;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/FlowDirectStatisticsService.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/FlowDirectStatisticsService.java index 72066b0395..a106ad93e5 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/FlowDirectStatisticsService.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/FlowDirectStatisticsService.java @@ -8,13 +8,19 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.openflowplugin.api.OFConstants; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack; import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowRegistryKey; +import org.opendaylight.openflowplugin.extension.api.path.MatchPath; import org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory; -import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowStatsResponseConvertor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.FlowStatsResponseConvertorData; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor; import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput; @@ -41,23 +47,23 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import java.util.ArrayList; -import java.util.List; - /** * The Flow direct statistics service. */ public class FlowDirectStatisticsService extends AbstractDirectStatisticsService { - private final FlowStatsResponseConvertor flowStatsConvertor = new FlowStatsResponseConvertor(); + private final FlowStatsResponseConvertorData data; /** * Instantiates a new Flow direct statistics service. - * - * @param requestContextStack the request context stack + * @param requestContextStack the request context stack * @param deviceContext the device context + * @param convertorExecutor */ - public FlowDirectStatisticsService(RequestContextStack requestContextStack, DeviceContext deviceContext) { - super(MultipartType.OFPMPFLOW, requestContextStack, deviceContext); + public FlowDirectStatisticsService(RequestContextStack requestContextStack, DeviceContext deviceContext, ConvertorExecutor convertorExecutor) { + super(MultipartType.OFPMPFLOW, requestContextStack, deviceContext, convertorExecutor); + data = new FlowStatsResponseConvertorData(getVersion()); + data.setDatapathId(getDatapathId()); + data.setMatchPath(MatchPath.RPCFLOWSSTATISTICS_FLOWANDSTATISTICSMAPLIST_MATCH); } @Override @@ -94,7 +100,7 @@ public class FlowDirectStatisticsService extends AbstractDirectStatisticsService mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK); } - MatchReactor.getInstance().convert(input.getMatch(), getVersion(), mprFlowRequestBuilder, getDatapathId()); + MatchReactor.getInstance().convert(input.getMatch(), getVersion(), mprFlowRequestBuilder, getConvertorExecutor()); return new MultipartRequestFlowCaseBuilder() .setMultipartRequestFlow(mprFlowRequestBuilder.build()) @@ -109,17 +115,19 @@ public class FlowDirectStatisticsService extends AbstractDirectStatisticsService for (final MultipartReply mpReply : input) { final MultipartReplyFlowCase caseBody = (MultipartReplyFlowCase) mpReply.getMultipartReplyBody(); final MultipartReplyFlow replyBody = caseBody.getMultipartReplyFlow(); - - final List statsListPart = flowStatsConvertor.toSALFlowStatsList(replyBody.getFlowStats(), getDatapathId(), getOfVersion()); - - for (final FlowAndStatisticsMapList part : statsListPart) { - final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId flowId = - new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId(generateFlowId(part).getValue()); - - statsList.add(new FlowAndStatisticsMapListBuilder(part) - .setKey(new FlowAndStatisticsMapListKey(flowId)) - .setFlowId(flowId) - .build()); + final Optional> statsListPart = getConvertorExecutor().convert( + replyBody.getFlowStats(), data); + + if (statsListPart.isPresent()) { + for (final FlowAndStatisticsMapList part : statsListPart.get()) { + final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId flowId = + new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId(generateFlowId(part).getValue()); + + statsList.add(new FlowAndStatisticsMapListBuilder(part) + .setKey(new FlowAndStatisticsMapListKey(flowId)) + .setFlowId(flowId) + .build()); + } } } } @@ -131,8 +139,7 @@ public class FlowDirectStatisticsService extends AbstractDirectStatisticsService @Override protected void storeStatistics(GetFlowStatisticsOutput output) throws Exception { - final InstanceIdentifier nodePath = getDeviceContext() - .getDeviceState().getNodeInstanceIdentifier().augmentation(FlowCapableNode.class); + final InstanceIdentifier nodePath = getDeviceInfo().getNodeInstanceIdentifier().augmentation(FlowCapableNode.class); for (final FlowAndStatisticsMapList flowStatistics : output.getFlowAndStatisticsMapList()) { final FlowId flowId = generateFlowId(flowStatistics); @@ -149,7 +156,7 @@ public class FlowDirectStatisticsService extends AbstractDirectStatisticsService .child(Table.class, new TableKey(flowStatistics.getTableId())) .child(Flow.class, flowKey); - getDeviceContext().writeToTransactionWithParentsSlow(LogicalDatastoreType.OPERATIONAL, flowStatisticsPath, flowBuilder.build()); + getTxFacade().writeToTransactionWithParentsSlow(LogicalDatastoreType.OPERATIONAL, flowStatisticsPath, flowBuilder.build()); } } @@ -160,8 +167,7 @@ public class FlowDirectStatisticsService extends AbstractDirectStatisticsService final FlowBuilder flowBuilder = new FlowBuilder(flowStatistics) .addAugmentation(FlowStatisticsData.class, flowStatisticsDataBld.build()); - final short tableId = flowStatistics.getTableId(); - final FlowRegistryKey flowRegistryKey = FlowRegistryKeyFactory.create(flowBuilder.build()); - return getDeviceContext().getDeviceFlowRegistry().storeIfNecessary(flowRegistryKey, tableId); + final FlowRegistryKey flowRegistryKey = FlowRegistryKeyFactory.create(getVersion(), flowBuilder.build()); + return getDeviceRegistry().getDeviceFlowRegistry().storeIfNecessary(flowRegistryKey); } }