provider.register(MultipartType.OFPMPMETER, new MeterStatsMultipartWriter(deviceContext, instanceIdentifier));
provider.register(MultipartType.OFPMPPORTSTATS, new PortStatsMultipartWriter(deviceContext,
instanceIdentifier, deviceContext.getPrimaryConnectionContext().getFeatures()));
- provider.register(MultipartType.OFPMPQUEUE, new QueueStatsMultipartWriter(deviceContext, instanceIdentifier));
+ provider.register(MultipartType.OFPMPQUEUE, new QueueStatsMultipartWriter(deviceContext,
+ instanceIdentifier, deviceContext.getPrimaryConnectionContext().getFeatures()));
provider.register(MultipartType.OFPMPFLOW, new FlowStatsMultipartWriter(deviceContext, instanceIdentifier,
deviceContext, deviceContext.getDeviceInfo().getVersion()));
provider.register(MultipartType.OFPMPGROUPDESC, new GroupDescMultipartWriter(deviceContext,
package org.opendaylight.openflowplugin.impl.datastore.multipart;
import org.opendaylight.openflowplugin.api.openflow.device.TxFacade;
+import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
+import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
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.openflow.protocol.rev130731.FeaturesReply;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsDataBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueIdAndStatisticsMap;
public class QueueStatsMultipartWriter extends AbstractMultipartWriter<QueueIdAndStatisticsMap> {
- public QueueStatsMultipartWriter(final TxFacade txFacade, final InstanceIdentifier<Node> instanceIdentifier) {
+ private final FeaturesReply features;
+
+
+ public QueueStatsMultipartWriter(final TxFacade txFacade,
+ final InstanceIdentifier<Node> instanceIdentifier,
+ final FeaturesReply features) {
super(txFacade, instanceIdentifier);
+ this.features = features;
}
@Override
@Override
public void storeStatistics(final QueueIdAndStatisticsMap statistics, final boolean withParents) {
+ final OpenflowVersion openflowVersion = OpenflowVersion.get(features.getVersion());
+
statistics.getQueueIdAndStatisticsMap()
- .forEach(stat -> writeToTransaction(
- getInstanceIdentifier()
- .child(NodeConnector.class, new NodeConnectorKey(stat.getNodeConnectorId()))
- .augmentation(FlowCapableNodeConnector.class)
- .child(Queue.class, new QueueKey(stat.getQueueId())),
- new QueueBuilder()
- .setKey(new QueueKey(stat.getQueueId()))
- .setQueueId(stat.getQueueId())
- .addAugmentation(
- FlowCapableNodeConnectorQueueStatisticsData.class,
- new FlowCapableNodeConnectorQueueStatisticsDataBuilder()
- .setFlowCapableNodeConnectorQueueStatistics(
- new FlowCapableNodeConnectorQueueStatisticsBuilder(stat).build())
- .build())
- .build(),
- withParents));
+ .forEach((stat) -> {
+ final Long port = InventoryDataServiceUtil
+ .portNumberfromNodeConnectorId(openflowVersion, stat.getNodeConnectorId());
+ final NodeConnectorId id = InventoryDataServiceUtil
+ .nodeConnectorIdfromDatapathPortNo(
+ features.getDatapathId(),
+ port,
+ OpenflowVersion.get(features.getVersion()));
+
+ writeToTransaction(
+ getInstanceIdentifier()
+ .child(NodeConnector.class, new NodeConnectorKey(id))
+ .augmentation(FlowCapableNodeConnector.class)
+ .child(Queue.class, new QueueKey(stat.getQueueId())),
+ new QueueBuilder()
+ .setKey(new QueueKey(stat.getQueueId()))
+ .setQueueId(stat.getQueueId())
+ .addAugmentation(
+ FlowCapableNodeConnectorQueueStatisticsData.class,
+ new FlowCapableNodeConnectorQueueStatisticsDataBuilder()
+ .setFlowCapableNodeConnectorQueueStatistics(
+ new FlowCapableNodeConnectorQueueStatisticsBuilder(stat)
+ .build())
+ .build())
+ .build(),
+ withParents);
+ });
}
}
import java.math.BigInteger;
import java.util.Collections;
import java.util.List;
+import org.junit.Test;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.openflowplugin.api.openflow.device.Xid;
import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
assertEquals(map.getNodeConnectorId(), nodeConnectorId);
}
+ @Test
+ public void testStoreStatisticsBarePortNo() throws Exception {
+ final QueueIdAndStatisticsMap map = mock(QueueIdAndStatisticsMap.class);
+ when(map.getQueueId()).thenReturn(new QueueId(QUEUE_NO));
+ when(map.getNodeConnectorId()).thenReturn(new NodeConnectorId("1"));
+
+ final List<QueueIdAndStatisticsMap> maps = Collections.singletonList(map);
+ final GetQueueStatisticsOutput output = mock(GetQueueStatisticsOutput.class);
+ when(output.getQueueIdAndStatisticsMap()).thenReturn(maps);
+
+ multipartWriterProvider.lookup(MultipartType.OFPMPQUEUE).get().write(output, true);
+ verify(deviceContext).writeToTransactionWithParentsSlow(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
+ }
+
@Override
public void testStoreStatistics() throws Exception {
final QueueIdAndStatisticsMap map = mock(QueueIdAndStatisticsMap.class);
when(map.getQueueId()).thenReturn(new QueueId(QUEUE_NO));
+ when(map.getNodeConnectorId()).thenReturn(new NodeConnectorId("openflow:1:1"));
final List<QueueIdAndStatisticsMap> maps = Collections.singletonList(map);
final GetQueueStatisticsOutput output = mock(GetQueueStatisticsOutput.class);
import java.math.BigInteger;
import java.util.Collections;
import java.util.List;
+import org.junit.Test;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.openflowplugin.api.openflow.device.Xid;
import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
assertEquals(map.getNodeConnectorId().getValue(), PORT_NO.toString());
}
+ @Test
+ public void testStoreStatisticsBarePortNo() throws Exception {
+ final QueueIdAndStatisticsMap map = mock(QueueIdAndStatisticsMap.class);
+ when(map.getQueueId()).thenReturn(new QueueId(QUEUE_NO));
+ when(map.getNodeConnectorId()).thenReturn(new NodeConnectorId("1"));
+
+ final List<QueueIdAndStatisticsMap> maps = Collections.singletonList(map);
+ final GetQueueStatisticsOutput output = mock(GetQueueStatisticsOutput.class);
+ when(output.getQueueIdAndStatisticsMap()).thenReturn(maps);
+
+ multipartWriterProvider.lookup(MultipartType.OFPMPQUEUE).get().write(output, true);
+ verify(deviceContext).writeToTransactionWithParentsSlow(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
+ }
+
@Override
public void testStoreStatistics() throws Exception {
final QueueIdAndStatisticsMap map = mock(QueueIdAndStatisticsMap.class);
when(map.getQueueId()).thenReturn(new QueueId(QUEUE_NO));
+ when(map.getNodeConnectorId()).thenReturn(new NodeConnectorId("openflow:1:1"));
final List<QueueIdAndStatisticsMap> maps = Collections.singletonList(map);
final GetQueueStatisticsOutput output = mock(GetQueueStatisticsOutput.class);