Fix: do not query the distributed store inside main thread
Change-Id: I883030cb661b619f82bd554c21a48bb39f3fbbe6
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
index 8b190d0..4dd5ea7 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
@@ -304,15 +304,11 @@
@Override
public boolean isRelevant(DeviceEvent event) {
- if (!mastershipService.isLocalMaster(event.subject().id())) {
- // do not allow to proceed without mastership
- return false;
- }
-
Port port = event.port();
if (port == null) {
return false;
}
+
String portName = port.annotations().value(PORT_NAME);
return !Strings.isNullOrEmpty(portName) &&
@@ -321,6 +317,10 @@
portName.startsWith(PORT_NAME_VHOST_USER_PREFIX_VM));
}
+ private boolean isRelevantHelper(DeviceEvent event) {
+ return mastershipService.isLocalMaster(event.subject().id());
+ }
+
private boolean isDirectPort(String portName) {
return portNamePrefixMap().values().stream().anyMatch(portName::startsWith);
}
@@ -330,17 +330,38 @@
log.info("Device event occurred with type {}", event.type());
switch (event.type()) {
case PORT_UPDATED:
- if (!event.port().isEnabled()) {
- executor.execute(() -> portRemovedHelper(event));
- } else if (event.port().isEnabled()) {
- executor.execute(() -> portAddedHelper(event));
- }
+ executor.execute(() -> {
+ if (!isRelevantHelper(event)) {
+ return;
+ }
+
+ if (!event.port().isEnabled()) {
+ portRemovedHelper(event);
+ } else if (event.port().isEnabled()) {
+ portAddedHelper(event);
+ }
+ });
+
break;
case PORT_ADDED:
- executor.execute(() -> portAddedHelper(event));
+ executor.execute(() -> {
+
+ if (!isRelevantHelper(event)) {
+ return;
+ }
+
+ portAddedHelper(event);
+ });
break;
case PORT_REMOVED:
- executor.execute(() -> portRemovedHelper(event));
+ executor.execute(() -> {
+
+ if (!isRelevantHelper(event)) {
+ return;
+ }
+
+ portRemovedHelper(event);
+ });
break;
default:
break;
@@ -352,10 +373,10 @@
@Override
public boolean isRelevant(OpenstackNodeEvent event) {
+ return event.subject().type() != CONTROLLER;
+ }
- if (event.subject().type() == CONTROLLER) {
- return false;
- }
+ private boolean isRelevantHelper(OpenstackNodeEvent event) {
// do not allow to proceed without mastership
Device device = deviceService.getDevice(event.subject().intgBridge());
if (device == null) {
@@ -371,7 +392,14 @@
switch (event.type()) {
case OPENSTACK_NODE_COMPLETE:
log.info("COMPLETE node {} is detected", osNode.hostname());
- executor.execute(() -> processCompleteNode(event.subject()));
+ executor.execute(() -> {
+
+ if (!isRelevantHelper(event)) {
+ return;
+ }
+
+ processCompleteNode(event.subject());
+ });
break;
case OPENSTACK_NODE_INCOMPLETE:
log.warn("{} is changed to INCOMPLETE state", osNode);