Fix: resolve thread blocking issue caused by querying dist store
Change-Id: Ifddf7eb07a4430af11ca64e8eb2098369fc7db6c
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 54a0c19..98ee29e 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
@@ -642,20 +642,23 @@
public boolean isRelevant(DeviceEvent event) {
NodeId leader = leadershipService.getLeader(appId.name());
return Objects.equals(localNode, leader) &&
- event.subject().type() == Device.Type.CONTROLLER &&
- osNodeService.node(event.subject().id()) != null &&
- osNodeService.node(event.subject().id()).type() != CONTROLLER;
+ event.subject().type() == Device.Type.CONTROLLER;
}
@Override
public void event(DeviceEvent event) {
Device device = event.subject();
- OpenstackNode osNode = osNodeService.node(device.id());
switch (event.type()) {
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
+ 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);
@@ -684,20 +687,23 @@
public boolean isRelevant(DeviceEvent event) {
NodeId leader = leadershipService.getLeader(appId.name());
return Objects.equals(localNode, leader) &&
- event.subject().type() == Device.Type.SWITCH &&
- osNodeService.node(event.subject().id()) != null &&
- osNodeService.node(event.subject().id()).type() != CONTROLLER;
+ event.subject().type() == Device.Type.SWITCH;
}
@Override
public void event(DeviceEvent event) {
Device device = event.subject();
- OpenstackNode osNode = osNodeService.node(device.id());
switch (event.type()) {
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
+ 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);
@@ -719,6 +725,12 @@
case PORT_UPDATED:
case PORT_ADDED:
eventExecutor.execute(() -> {
+ 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 && (
@@ -735,6 +747,12 @@
break;
case PORT_REMOVED:
eventExecutor.execute(() -> {
+ 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 && (