From 10ba5a102f9e15a24c3f5a355a44fafadbf2801f Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Thu, 28 Nov 2013 09:36:49 +0100 Subject: [PATCH] Fixed Group and Meter RPC model to use MD-SAL routing correctly - Changed RPCs in Group and Meter to use node-context-ref instead of node for routing information (same pattern as in flow-services). - Updated statistics manager to use updated code. Change-Id: I7e6b156665008fea5814f6cdb16ed8de2511759a Signed-off-by: Tony Tkacik --- .../src/main/yang/flow-error.yang | 10 +- .../src/main/yang/flow-service.yang | 6 +- .../src/main/yang/group-service.yang | 6 +- .../src/main/yang/group-statistics.yang | 122 ++++++++--------- .../src/main/yang/meter-statistics.yang | 128 +++++++++--------- .../codegen/impl/RuntimeCodeGenerator.xtend | 9 +- .../manager/StatisticsProvider.java | 58 ++++---- 7 files changed, 178 insertions(+), 161 deletions(-) diff --git a/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-error.yang b/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-error.yang index 369b279b95..3e9d1ee75f 100644 --- a/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-error.yang +++ b/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-error.yang @@ -16,7 +16,7 @@ module flow-errors { enum flow-mod-failed; enum group-mod-failed; enum port-mod-failed; - enum table-mod-failed; + enum table-mod-failed; enum queue-op-failed; enum switch-config-failed; enum role-request-failed; @@ -34,7 +34,7 @@ module flow-errors { } leaf code { - type uint16; + type uint16; } leaf data { @@ -48,15 +48,15 @@ module flow-errors { } leaf exp-type { - type uint16; + type uint16; } leaf experimenter-id { - type uint32; + type uint32; } leaf data { type string; } - } + } } \ No newline at end of file diff --git a/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-service.yang b/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-service.yang index a32a45f2fd..07678f57e1 100644 --- a/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-service.yang +++ b/opendaylight/md-sal/model/model-flow-service/src/main/yang/flow-service.yang @@ -52,7 +52,7 @@ module sal-flow { rpc add-flow { input { uses node-flow; - uses tr:transaction-aware; + uses tr:transaction-aware; } output { uses tr:transaction-aware; @@ -62,7 +62,7 @@ module sal-flow { rpc remove-flow { input { uses node-flow; - uses tr:transaction-aware; + uses tr:transaction-aware; } output { uses tr:transaction-aware; @@ -72,7 +72,7 @@ module sal-flow { rpc update-flow { input { uses flow-update; - uses tr:transaction-aware; + uses tr:transaction-aware; } output { uses tr:transaction-aware; diff --git a/opendaylight/md-sal/model/model-flow-service/src/main/yang/group-service.yang b/opendaylight/md-sal/model/model-flow-service/src/main/yang/group-service.yang index b21423b7d4..9106bca8a4 100644 --- a/opendaylight/md-sal/model/model-flow-service/src/main/yang/group-service.yang +++ b/opendaylight/md-sal/model/model-flow-service/src/main/yang/group-service.yang @@ -32,7 +32,7 @@ module sal-group { rpc add-group { input { uses node-group; - uses tr:transaction-aware; + uses tr:transaction-aware; } output { uses tr:transaction-aware; @@ -42,7 +42,7 @@ module sal-group { rpc remove-group { input { uses node-group; - uses tr:transaction-aware; + uses tr:transaction-aware; } output { uses tr:transaction-aware; @@ -52,7 +52,7 @@ module sal-group { rpc update-group { input { uses group-update; - uses tr:transaction-aware; + uses tr:transaction-aware; } output { uses tr:transaction-aware; diff --git a/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/group-statistics.yang b/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/group-statistics.yang index d29ddc0ddd..1b6a9df9ad 100644 --- a/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/group-statistics.yang +++ b/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/group-statistics.yang @@ -8,9 +8,9 @@ module opendaylight-group-statistics { import flow-capable-transaction {prefix tr;} contact - "Anilkumar Vishnoi - Email: avishnoi@in.ibm.com"; - + "Anilkumar Vishnoi + Email: avishnoi@in.ibm.com"; + revision "2013-11-11" { description "Initial revision of group statistics service"; } @@ -18,44 +18,44 @@ module opendaylight-group-statistics { augment "/inv:nodes/inv:node" { ext:augment-identifier "node-group-statistics"; container group-statistics { - //config "false"; - uses group-types:group-statistics-reply; + //config "false"; + uses group-types:group-statistics-reply; } } - augment "/inv:nodes/inv:node" { + augment "/inv:nodes/inv:node" { ext:augment-identifier "node-group-desc-stats"; container group-desc { - //config "false"; - uses group-types:group-desc-stats-reply; + //config "false"; + uses group-types:group-desc-stats-reply; } } - - augment "/inv:nodes/inv:node" { + + augment "/inv:nodes/inv:node" { ext:augment-identifier "node-group-features"; container group-features { - //config "false"; - uses group-types:group-features-reply; + //config "false"; + uses group-types:group-features-reply; } } - // RPC calls - rpc get-all-group-statistics { - input { - uses inv:node; + // RPC calls + rpc get-all-group-statistics { + input { + uses inv:node-context-ref; } output { - uses group-types:group-statistics-reply; + uses group-types:group-statistics-reply; uses tr:transaction-aware; } - - } - - rpc get-group-statistics { - input { - uses inv:node; + + } + + rpc get-group-statistics { + input { + uses inv:node-context-ref; leaf group-id{ - type group-types:group-id; + type group-types:group-id; } } @@ -63,56 +63,56 @@ module opendaylight-group-statistics { uses group-types:group-statistics-reply; uses tr:transaction-aware; } - - } - - rpc get-group-description { - input { - uses inv:node; + + } + + rpc get-group-description { + input { + uses inv:node-context-ref; } output { uses group-types:group-desc-stats-reply; uses tr:transaction-aware; } - } - - rpc get-group-features { - input { - uses inv:node; + } + + rpc get-group-features { + input { + uses inv:node-context-ref; } output { uses group-types:group-features-reply; uses tr:transaction-aware; } - } - + } + - //Notification calls - - notification group-statistics-updated { - leaf moreReplies { - type boolean; - } - uses inv:node; - uses group-types:group-statistics-reply; + //Notification calls + + notification group-statistics-updated { + leaf moreReplies { + type boolean; + } + uses inv:node; + uses group-types:group-statistics-reply; uses tr:transaction-aware; - } - - notification group-desc-stats-updated { - leaf moreReplies { - type boolean; - } - uses inv:node; - uses group-types:group-desc-stats-reply; + } + + notification group-desc-stats-updated { + leaf moreReplies { + type boolean; + } + uses inv:node; + uses group-types:group-desc-stats-reply; uses tr:transaction-aware; - } + } - notification group-features-updated { - leaf moreReplies { - type boolean; - } - uses inv:node; - uses group-types:group-features-reply; + notification group-features-updated { + leaf moreReplies { + type boolean; + } + uses inv:node; + uses group-types:group-features-reply; uses tr:transaction-aware; - } + } } diff --git a/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/meter-statistics.yang b/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/meter-statistics.yang index c22bdd3906..e3b2a3fc64 100644 --- a/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/meter-statistics.yang +++ b/opendaylight/md-sal/model/model-flow-statistics/src/main/yang/meter-statistics.yang @@ -8,8 +8,8 @@ module opendaylight-meter-statistics { import flow-capable-transaction {prefix tr;} contact - "Anilkumar Vishnoi - Email: avishnoi@in.ibm.com"; + "Anilkumar Vishnoi + Email: avishnoi@in.ibm.com"; revision "2013-11-11" { description "Initial revision of meter statistics service"; @@ -18,103 +18,103 @@ module opendaylight-meter-statistics { augment "/inv:nodes/inv:node" { ext:augment-identifier "node-meter-statistics"; container meter-statistics { - //config "false"; - uses meter-types:meter-statistics-reply; + //config "false"; + uses meter-types:meter-statistics-reply; } } - augment "/inv:nodes/inv:node" { + augment "/inv:nodes/inv:node" { ext:augment-identifier "node-meter-config-stats"; container meter-config-stats { - //config "false"; - uses meter-types:meter-config-stats-reply; + //config "false"; + uses meter-types:meter-config-stats-reply; } } - - augment "/inv:nodes/inv:node" { + + augment "/inv:nodes/inv:node" { ext:augment-identifier "node-meter-features"; container meter-features { - //config "false"; - uses meter-types:meter-features-reply; + //config "false"; + uses meter-types:meter-features-reply; } } - // RPC calls - rpc get-all-meter-statistics { - input { - uses inv:node; + // RPC calls + rpc get-all-meter-statistics { + input { + uses inv:node-context-ref; } output { - uses meter-types:meter-statistics-reply; - uses tr:transaction-aware; + uses meter-types:meter-statistics-reply; + uses tr:transaction-aware; } - - } - - rpc get-meter-statistics { - input { - uses inv:node; + + } + + rpc get-meter-statistics { + input { + uses inv:node-context-ref; leaf meter-id{ - type meter-types:meter-id; + type meter-types:meter-id; } } output { uses meter-types:meter-statistics-reply; uses tr:transaction-aware; } - - } - - rpc get-all-meter-config-statistics { - input { - uses inv:node; + + } + + rpc get-all-meter-config-statistics { + input { + uses inv:node-context-ref; } output { - uses meter-types:meter-config-stats-reply; + uses meter-types:meter-config-stats-reply; uses tr:transaction-aware; } - } - - rpc get-meter-features { - input { - uses inv:node; + } + + rpc get-meter-features { + input { + uses inv:node-context-ref; } output { - uses meter-types:meter-features-reply; + uses meter-types:meter-features-reply; uses tr:transaction-aware; } - } - + } + - //Notification calls - - notification meter-statistics-updated { - leaf moreReplies { - type boolean; - } - - uses inv:node; + //Notification calls + + notification meter-statistics-updated { + leaf moreReplies { + type boolean; + } + + uses inv:node; uses meter-types:meter-statistics-reply; uses tr:transaction-aware; - } - - notification meter-config-stats-updated { - leaf moreReplies { - type boolean; - } - + } + + notification meter-config-stats-updated { + leaf moreReplies { + type boolean; + } + uses inv:node; - uses meter-types:meter-config-stats-reply; - uses tr:transaction-aware; - } + uses meter-types:meter-config-stats-reply; + uses tr:transaction-aware; + } - notification meter-features-updated { - leaf moreReplies { - type boolean; - } - - uses inv:node; + notification meter-features-updated { + leaf moreReplies { + type boolean; + } + + uses inv:node; uses meter-types:meter-features-reply; uses tr:transaction-aware; - } + } } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend index 801e4984c0..90fcbd99aa 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend @@ -57,7 +57,14 @@ class RuntimeCodeGenerator implements org.opendaylight.controller.sal.binding.co val targetCls = createClass(iface.directProxyName, supertype) [ field(DELEGATE_FIELD, iface); implementMethodsFrom(supertype) [ - body = '''return ($r) «DELEGATE_FIELD».«it.name»($$);''' + body = ''' + { + if(«DELEGATE_FIELD» == null) { + throw new java.lang.IllegalStateException("No provider is processing supplied message"); + } + return ($r) «DELEGATE_FIELD».«it.name»($$); + } + ''' ] ] return targetCls.toClass(iface.classLoader).newInstance as T 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 d1ab351503..bb7d6f7157 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 @@ -24,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111. import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsInputBuilder; @@ -137,76 +138,86 @@ public class StatisticsProvider implements AutoCloseable { //We need to add check, so see if groups/meters are supported //by the target node. Below check doesn't look good. if(targetNode.getId().getValue().contains("openflow:")){ - sendAllGroupStatisticsRequest(targetNode); + InstanceIdentifier targetInstanceId = InstanceIdentifier.builder(Nodes.class).child(Node.class,targetNode.getKey()).toInstance(); + NodeRef targetNodeRef = new NodeRef(targetInstanceId); - sendAllMeterStatisticsRequest(targetNode); + sendAllGroupStatisticsRequest(targetNodeRef); - sendGroupDescriptionRequest(targetNode); + sendAllMeterStatisticsRequest(targetNodeRef); - sendGroupFeaturesRequest(targetNode); + sendGroupDescriptionRequest(targetNodeRef); - sendMeterConfigStatisticsRequest(targetNode); + sendGroupFeaturesRequest(targetNodeRef); - sendMeterFeaturesRequest(targetNode); + sendMeterConfigStatisticsRequest(targetNodeRef); + + sendMeterFeaturesRequest(targetNodeRef); } } } - private void sendAllGroupStatisticsRequest(Node targetNode){ + private void sendAllGroupStatisticsRequest(NodeRef targetNode){ final GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder(); - input.setId(targetNode.getId()); + input.setNode(targetNode); + input.setNode(targetNode); + @SuppressWarnings("unused") Future> response = groupStatsService.getAllGroupStatistics(input.build()); } - private void sendGroupDescriptionRequest(Node targetNode){ + private void sendGroupDescriptionRequest(NodeRef targetNode){ final GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder(); - input.setId(targetNode.getId()); - + input.setNode(targetNode); + + @SuppressWarnings("unused") Future> response = groupStatsService.getGroupDescription(input.build()); } - private void sendGroupFeaturesRequest(Node targetNode){ + private void sendGroupFeaturesRequest(NodeRef targetNode){ GetGroupFeaturesInputBuilder input = new GetGroupFeaturesInputBuilder(); - input.setId(targetNode.getId()); - + input.setNode(targetNode); + + @SuppressWarnings("unused") Future> response = groupStatsService.getGroupFeatures(input.build()); } - private void sendAllMeterStatisticsRequest(Node targetNode){ + private void sendAllMeterStatisticsRequest(NodeRef targetNode){ GetAllMeterStatisticsInputBuilder input = new GetAllMeterStatisticsInputBuilder(); - input.setId(targetNode.getId()); - + input.setNode(targetNode); + + @SuppressWarnings("unused") Future> response = meterStatsService.getAllMeterStatistics(input.build()); } - private void sendMeterConfigStatisticsRequest(Node targetNode){ + private void sendMeterConfigStatisticsRequest(NodeRef targetNode){ GetAllMeterConfigStatisticsInputBuilder input = new GetAllMeterConfigStatisticsInputBuilder(); - input.setId(targetNode.getId()); - + input.setNode(targetNode); + + @SuppressWarnings("unused") Future> response = meterStatsService.getAllMeterConfigStatistics(input.build()); } - private void sendMeterFeaturesRequest(Node targetNode){ + private void sendMeterFeaturesRequest(NodeRef targetNode){ GetMeterFeaturesInputBuilder input = new GetMeterFeaturesInputBuilder(); - input.setId(targetNode.getId()); - + input.setNode(targetNode); + + @SuppressWarnings("unused") Future> response = meterStatsService.getMeterFeatures(input.build()); } @@ -241,7 +252,6 @@ public class StatisticsProvider implements AutoCloseable { } catch (Throwable e) { throw Exceptions.sneakyThrow(e); } - } } -- 2.36.6