From cab4176def56bfbb8d0adff427a357ca53bb47a4 Mon Sep 17 00:00:00 2001 From: Jian Li Date: Tue, 6 Nov 2018 12:30:08 +0900 Subject: [PATCH] Fix: resolve thread blocking issue caused by querying dist store Change-Id: Ifddf7eb07a4430af11ca64e8eb2098369fc7db6c --- .../impl/DefaultOpenstackNodeHandler.java | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) 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 54a0c19540..98ee29e7b2 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 class DefaultOpenstackNodeHandler implements OpenstackNodeHandler { 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 class DefaultOpenstackNodeHandler implements OpenstackNodeHandler { 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 @@ public class DefaultOpenstackNodeHandler implements OpenstackNodeHandler { 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 @@ public class DefaultOpenstackNodeHandler implements OpenstackNodeHandler { 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 && (