Fixed gateway nodes are stuck in PORT_CREATED state
We don't need to double check group state when handling GROUP_ADDED or
GROUP_UPDATED event, which results in race when multiple gateway nodes
exist.
Change-Id: I8c2cff7ab56f7739e05c99ce2c535615661bdc04
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java b/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
index 9c06445..d3597ee 100644
--- a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
+++ b/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
@@ -538,8 +538,7 @@
.setOutput(cNode.tunnelPortNum())
.build();
GroupBucket bucket = createSelectGroupBucket(treatment);
- if (osGroup == null || osGroup.state() != Group.GroupState.ADDED ||
- !osGroup.buckets().buckets().contains(bucket)) {
+ if (osGroup == null || !osGroup.buckets().buckets().contains(bucket)) {
return false;
}
}
@@ -551,8 +550,7 @@
.setOutput(cNode.vlanPortNum())
.build();
GroupBucket bucket = createSelectGroupBucket(treatment);
- if (osGroup == null || osGroup.state() != Group.GroupState.ADDED ||
- !osGroup.buckets().buckets().contains(bucket)) {
+ if (osGroup == null || !osGroup.buckets().buckets().contains(bucket)) {
return false;
}
}
@@ -763,11 +761,12 @@
}
private void processGroup(Group group) {
- OpenstackNode osNode = osNodeService.nodes().stream()
- .filter(n -> n.gatewayGroupId(VXLAN).equals(group.id()) ||
- n.gatewayGroupId(VLAN).equals(group.id()))
+ OpenstackNode osNode = osNodeService.nodes(COMPUTE).stream()
+ .filter(n -> n.state() == PORT_CREATED &&
+ (n.gatewayGroupId(VXLAN).equals(group.id()) ||
+ n.gatewayGroupId(VLAN).equals(group.id())))
.findAny().orElse(null);
- if (osNode != null && osNode.state() == PORT_CREATED) {
+ if (osNode != null) {
bootstrapNode(osNode);
}
osNodeService.nodes(GATEWAY).stream()