Resolves code smells of Openstack node app.
Change-Id: Ibcb17b75baa8a22a316ac259ca41adf6a9a4ef43
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
index c2c3d57..01f8e4f 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
@@ -121,6 +121,7 @@
private final Logger log = getLogger(getClass());
private static final String DEFAULT_OF_PROTO = "tcp";
+ private static final String NO_OVSDB_CLIENT_MSG = "Failed to get ovsdb client";
private static final int DEFAULT_OFPORT = 6653;
private static final int DPID_BEGIN = 3;
@@ -278,7 +279,7 @@
@Override
public void processIncompleteState(OpenstackNode osNode) {
- //TODO
+ //Do nothing for now
}
private boolean hasDpdkTunnelBridge(OpenstackNode osNode) {
@@ -293,7 +294,7 @@
OvsdbClientService client = getOvsdbClient(osNode, ovsdbPortNum, ovsdbController);
if (client == null) {
- log.info("Failed to get ovsdb client");
+ log.info(NO_OVSDB_CLIENT_MSG);
return false;
}
@@ -453,6 +454,57 @@
port.isEnabled());
}
+
+ private boolean initStateDone(OpenstackNode osNode) {
+ if (!isOvsdbConnected(osNode, ovsdbPortNum, ovsdbController, deviceService)) {
+ return false;
+ }
+
+ boolean initStateDone = deviceService.isAvailable(osNode.intgBridge());
+ if (hasDpdkTunnelBridge(osNode)) {
+ initStateDone = initStateDone && dpdkTunnelBridgeCreated(osNode);
+ }
+
+ return initStateDone;
+ }
+
+ private boolean deviceCreatedStateDone(OpenstackNode osNode) {
+ if (osNode.dataIp() != null &&
+ !isIntfEnabled(osNode, VXLAN_TUNNEL)) {
+ return false;
+ }
+ if (osNode.dataIp() != null &&
+ !isIntfEnabled(osNode, GRE_TUNNEL)) {
+ return false;
+ }
+ if (osNode.dataIp() != null &&
+ !isIntfEnabled(osNode, GENEVE_TUNNEL)) {
+ return false;
+ }
+ if (osNode.vlanIntf() != null &&
+ !isIntfEnabled(osNode, osNode.vlanIntf())) {
+ return false;
+ }
+ if (osNode.type() == GATEWAY &&
+ !isIntfEnabled(osNode, osNode.uplinkPort())) {
+ return false;
+ }
+ if (osNode.dpdkConfig() != null &&
+ osNode.dpdkConfig().dpdkIntfs() != null &&
+ !isDpdkIntfsCreated(osNode, osNode.dpdkConfig().dpdkIntfs())) {
+ return false;
+ }
+
+ for (OpenstackPhyInterface intf : osNode.phyIntfs()) {
+ if (intf != null && !isIntfEnabled(osNode, intf.intf())) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+
/**
* Checks whether all requirements for this state are fulfilled or not.
*
@@ -462,50 +514,9 @@
private boolean isCurrentStateDone(OpenstackNode osNode) {
switch (osNode.state()) {
case INIT:
- if (!isOvsdbConnected(osNode, ovsdbPortNum,
- ovsdbController, deviceService)) {
- return false;
- }
-
- boolean initStateDone = deviceService.isAvailable(osNode.intgBridge());
- if (hasDpdkTunnelBridge(osNode)) {
- initStateDone = initStateDone && dpdkTunnelBridgeCreated(osNode);
- }
- return initStateDone;
+ return initStateDone(osNode);
case DEVICE_CREATED:
- if (osNode.dataIp() != null &&
- !isIntfEnabled(osNode, VXLAN_TUNNEL)) {
- return false;
- }
- if (osNode.dataIp() != null &&
- !isIntfEnabled(osNode, GRE_TUNNEL)) {
- return false;
- }
- if (osNode.dataIp() != null &&
- !isIntfEnabled(osNode, GENEVE_TUNNEL)) {
- return false;
- }
- if (osNode.vlanIntf() != null &&
- !isIntfEnabled(osNode, osNode.vlanIntf())) {
- return false;
- }
- if (osNode.type() == GATEWAY &&
- !isIntfEnabled(osNode, osNode.uplinkPort())) {
- return false;
- }
- if (osNode.dpdkConfig() != null &&
- osNode.dpdkConfig().dpdkIntfs() != null &&
- !isDpdkIntfsCreated(osNode, osNode.dpdkConfig().dpdkIntfs())) {
- return false;
- }
-
- for (OpenstackPhyInterface intf : osNode.phyIntfs()) {
- if (intf != null && !isIntfEnabled(osNode, intf.intf())) {
- return false;
- }
- }
-
- return true;
+ return deviceCreatedStateDone(osNode);
case COMPLETE:
case INCOMPLETE:
// always return false
@@ -632,41 +643,6 @@
}
}
- private void processOpenstackNodeRemoved(OpenstackNode osNode) {
- OvsdbClientService client = getOvsdbClient(osNode, ovsdbPortNum, ovsdbController);
- if (client == null) {
- log.info("Failed to get ovsdb client");
- return;
- }
-
- //delete physical interfaces from the node
- removePhysicalInterface(osNode);
-
- //delete vlan interface from the node
- removeVlanInterface(osNode);
-
- //delete dpdk interfaces from the node
- if (osNode.dpdkConfig() != null) {
- osNode.dpdkConfig().dpdkIntfs().forEach(dpdkInterface -> {
- if (isDpdkIntfsCreated(osNode, Lists.newArrayList(dpdkInterface))) {
- addOrRemoveDpdkInterface(osNode, dpdkInterface, ovsdbPortNum,
- ovsdbController, false);
- }
- });
- }
-
- //delete tunnel bridge from the node
- if (hasDpdkTunnelBridge(osNode)) {
- client.dropBridge(TUNNEL_BRIDGE);
- }
-
- //delete integration bridge from the node
- client.dropBridge(INTEGRATION_BRIDGE);
-
- //disconnect ovsdb
- client.disconnect();
- }
-
/**
* Checks the validity of the given endpoint.
*
@@ -742,21 +718,10 @@
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
-
if (!isRelevantHelper()) {
return;
}
-
- OpenstackNode osNode = osNodeService.node(device.id());
-
- if (osNode == null || osNode.type() == CONTROLLER) {
- return;
- }
-
- if (deviceService.isAvailable(device.id())) {
- log.debug("OVSDB {} detected", device.id());
- bootstrapNode(osNode);
- }
+ processDeviceAddedOfOvsdbDevice(osNodeService.node(device.id()), device);
});
break;
case PORT_ADDED:
@@ -767,6 +732,17 @@
break;
}
}
+
+ private void processDeviceAddedOfOvsdbDevice(OpenstackNode osNode, Device device) {
+ if (osNode == null || osNode.type() == CONTROLLER) {
+ return;
+ }
+
+ if (deviceService.isAvailable(device.id())) {
+ log.debug("OVSDB {} detected", device.id());
+ bootstrapNode(osNode);
+ }
+ }
}
/**
@@ -794,92 +770,27 @@
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
-
if (!isRelevantHelper()) {
return;
}
-
- OpenstackNode osNode = osNodeService.node(device.id());
-
- if (osNode == null || osNode.type() == CONTROLLER) {
- return;
- }
-
- if (deviceService.isAvailable(device.id())) {
- log.debug("Integration bridge created on {}", osNode.hostname());
- bootstrapNode(osNode);
- } else if (osNode.state() == COMPLETE) {
- log.info("Device {} disconnected", device.id());
- setState(osNode, INCOMPLETE);
- }
-
- if (autoRecovery) {
- if (osNode.state() == INCOMPLETE ||
- osNode.state() == DEVICE_CREATED) {
- log.info("Device {} is reconnected", device.id());
- osNodeAdminService.updateNode(
- osNode.updateState(NodeState.INIT));
- }
- }
+ processDeviceAddedOfBridge(osNodeService.node(device.id()), device);
});
break;
case PORT_UPDATED:
case PORT_ADDED:
eventExecutor.execute(() -> {
-
if (!isRelevantHelper()) {
return;
}
-
- OpenstackNode osNode = osNodeService.node(device.id());
-
- if (osNode == null || osNode.type() == CONTROLLER) {
- return;
- }
-
- Port port = event.port();
- String portName = port.annotations().value(PORT_NAME);
- if (osNode.state() == DEVICE_CREATED && (
- Objects.equals(portName, VXLAN_TUNNEL) ||
- Objects.equals(portName, GRE_TUNNEL) ||
- Objects.equals(portName, GENEVE_TUNNEL) ||
- Objects.equals(portName, osNode.vlanIntf()) ||
- Objects.equals(portName, osNode.uplinkPort()) ||
- containsPhyIntf(osNode, portName)) ||
- containsDpdkIntfs(osNode, portName)) {
- log.info("Interface {} added or updated to {}",
- portName, device.id());
- bootstrapNode(osNode);
- }
+ processPortAddedOfBridge(osNodeService.node(device.id()), event.port());
});
break;
case PORT_REMOVED:
eventExecutor.execute(() -> {
-
if (!isRelevantHelper()) {
return;
}
-
- OpenstackNode osNode = osNodeService.node(device.id());
-
- if (osNode == null || osNode.type() == CONTROLLER) {
- return;
- }
-
- Port port = event.port();
- String portName = port.annotations().value(PORT_NAME);
- if (osNode.state() == COMPLETE && (
- Objects.equals(portName, VXLAN_TUNNEL) ||
- Objects.equals(portName, GRE_TUNNEL) ||
- Objects.equals(portName, GENEVE_TUNNEL) ||
- Objects.equals(portName, osNode.vlanIntf()) ||
- Objects.equals(portName, osNode.uplinkPort()) ||
- containsPhyIntf(osNode, portName)) ||
- containsDpdkIntfs(osNode, portName)) {
- log.warn("Interface {} removed from {}",
- portName, event.subject().id());
- setState(osNode, INCOMPLETE);
- }
+ processPortRemovedOfBridge(osNodeService.node(device.id()), event.port());
});
break;
case DEVICE_REMOVED:
@@ -888,37 +799,103 @@
break;
}
}
- }
- /**
- * Checks whether the openstack node contains the given physical interface.
- *
- * @param osNode openstack node
- * @param portName physical interface
- * @return true if openstack node contains the given physical interface,
- * false otherwise
- */
- private boolean containsPhyIntf(OpenstackNode osNode, String portName) {
- return osNode.phyIntfs().stream()
- .anyMatch(phyInterface -> phyInterface.intf().equals(portName));
- }
+ private void processDeviceAddedOfBridge(OpenstackNode osNode, Device device) {
- /**
- * Checks whether the openstack node contains the given dpdk interface.
- *
- * @param osNode openstack node
- * @param portName dpdk interface
- * @return true if openstack node contains the given dpdk interface,
- * false otherwise
- */
- private boolean containsDpdkIntfs(OpenstackNode osNode, String portName) {
- if (osNode.dpdkConfig() == null) {
- return false;
+ if (osNode == null || osNode.type() == CONTROLLER) {
+ return;
+ }
+
+ if (deviceService.isAvailable(device.id())) {
+ log.debug("Integration bridge created on {}", osNode.hostname());
+ bootstrapNode(osNode);
+ } else if (osNode.state() == COMPLETE) {
+ log.info("Device {} disconnected", device.id());
+ setState(osNode, INCOMPLETE);
+ }
+
+ if (autoRecovery) {
+ if (osNode.state() == INCOMPLETE ||
+ osNode.state() == DEVICE_CREATED) {
+ log.info("Device {} is reconnected", device.id());
+ osNodeAdminService.updateNode(
+ osNode.updateState(NodeState.INIT));
+ }
+ }
}
- return osNode.dpdkConfig().dpdkIntfs().stream()
- .anyMatch(dpdkInterface -> dpdkInterface.intf().equals(portName));
+
+ private void processPortAddedOfBridge(OpenstackNode osNode, Port port) {
+ if (osNode == null || osNode.type() == CONTROLLER) {
+ return;
+ }
+
+ String portName = port.annotations().value(PORT_NAME);
+ if (osNode.state() == DEVICE_CREATED && (
+ Objects.equals(portName, VXLAN_TUNNEL) ||
+ Objects.equals(portName, GRE_TUNNEL) ||
+ Objects.equals(portName, GENEVE_TUNNEL) ||
+ Objects.equals(portName, osNode.vlanIntf()) ||
+ Objects.equals(portName, osNode.uplinkPort()) ||
+ containsPhyIntf(osNode, portName)) ||
+ containsDpdkIntfs(osNode, portName)) {
+ log.info("Interface {} added or updated to {}",
+ portName, osNode.intgBridge());
+ bootstrapNode(osNode);
+ }
+ }
+
+ private void processPortRemovedOfBridge(OpenstackNode osNode, Port port) {
+ if (osNode == null || osNode.type() == CONTROLLER) {
+ return;
+ }
+
+ String portName = port.annotations().value(PORT_NAME);
+ if (osNode.state() == COMPLETE && (
+ Objects.equals(portName, VXLAN_TUNNEL) ||
+ Objects.equals(portName, GRE_TUNNEL) ||
+ Objects.equals(portName, GENEVE_TUNNEL) ||
+ Objects.equals(portName, osNode.vlanIntf()) ||
+ Objects.equals(portName, osNode.uplinkPort()) ||
+ containsPhyIntf(osNode, portName)) ||
+ containsDpdkIntfs(osNode, portName)) {
+ log.warn("Interface {} removed from {}",
+ portName, osNode.intgBridge());
+ setState(osNode, INCOMPLETE);
+ }
+ }
+
+
+ /**
+ * Checks whether the openstack node contains the given physical interface.
+ *
+ * @param osNode openstack node
+ * @param portName physical interface
+ * @return true if openstack node contains the given physical interface,
+ * false otherwise
+ */
+ private boolean containsPhyIntf(OpenstackNode osNode, String portName) {
+ return osNode.phyIntfs().stream()
+ .anyMatch(phyInterface -> phyInterface.intf().equals(portName));
+ }
+
+ /**
+ * Checks whether the openstack node contains the given dpdk interface.
+ *
+ * @param osNode openstack node
+ * @param portName dpdk interface
+ * @return true if openstack node contains the given dpdk interface,
+ * false otherwise
+ */
+ private boolean containsDpdkIntfs(OpenstackNode osNode, String portName) {
+ if (osNode.dpdkConfig() == null) {
+ return false;
+ }
+ return osNode.dpdkConfig().dpdkIntfs().stream()
+ .anyMatch(dpdkInterface -> dpdkInterface.intf().equals(portName));
+ }
}
+
/**
* An internal openstack node listener.
* The notification is triggered by OpenstackNodeStore.
@@ -949,7 +926,6 @@
if (!isRelevantHelper()) {
return;
}
-
processOpenstackNodeRemoved(event.subject());
});
break;
@@ -958,5 +934,40 @@
break;
}
}
+
+ private void processOpenstackNodeRemoved(OpenstackNode osNode) {
+ OvsdbClientService client = getOvsdbClient(osNode, ovsdbPortNum, ovsdbController);
+ if (client == null) {
+ log.info("Failed to get ovsdb client");
+ return;
+ }
+
+ //delete physical interfaces from the node
+ removePhysicalInterface(osNode);
+
+ //delete vlan interface from the node
+ removeVlanInterface(osNode);
+
+ //delete dpdk interfaces from the node
+ if (osNode.dpdkConfig() != null) {
+ osNode.dpdkConfig().dpdkIntfs().forEach(dpdkInterface -> {
+ if (isDpdkIntfsCreated(osNode, Lists.newArrayList(dpdkInterface))) {
+ addOrRemoveDpdkInterface(osNode, dpdkInterface, ovsdbPortNum,
+ ovsdbController, false);
+ }
+ });
+ }
+
+ //delete tunnel bridge from the node
+ if (hasDpdkTunnelBridge(osNode)) {
+ client.dropBridge(TUNNEL_BRIDGE);
+ }
+
+ //delete integration bridge from the node
+ client.dropBridge(INTEGRATION_BRIDGE);
+
+ //disconnect ovsdb
+ client.disconnect();
+ }
}
}