Fix: do not query dist store inside main thread for openstacknode
Change-Id: I5392cafc907295c50b29b5d81f855c5a2fe8ed1c
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 a670705..7be2074 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
@@ -435,7 +435,8 @@
}
}
- private boolean isDpdkIntfsCreated(OpenstackNode osNode, Collection<DpdkInterface> dpdkInterfaces) {
+ private boolean isDpdkIntfsCreated(OpenstackNode osNode,
+ Collection<DpdkInterface> dpdkInterfaces) {
OvsdbClientService client = getOvsdbClient(osNode, ovsdbPortNum, ovsdbController);
if (client == null) {
log.info("Failed to get ovsdb client");
@@ -469,7 +470,8 @@
if (!mtu.set().contains(dpdkInterface.mtu().intValue()) ||
!option.toString().contains(dpdkInterface.pciAddress())) {
- log.trace("The dpdk interface {} was created but mtu or pci address is different from the config.");
+ log.trace("The dpdk interface {} was created but mtu or " +
+ "pci address is different from the config.");
return false;
}
}
@@ -564,7 +566,8 @@
if (osNode.dpdkConfig() != null) {
osNode.dpdkConfig().dpdkIntfs().forEach(dpdkInterface -> {
if (isDpdkIntfsCreated(osNode, Lists.newArrayList(dpdkInterface))) {
- addOrRemoveDpdkInterface(osNode, dpdkInterface, ovsdbPortNum, ovsdbController, false);
+ addOrRemoveDpdkInterface(osNode, dpdkInterface, ovsdbPortNum,
+ ovsdbController, false);
}
});
}
@@ -641,9 +644,11 @@
@Override
public boolean isRelevant(DeviceEvent event) {
- NodeId leader = leadershipService.getLeader(appId.name());
- return Objects.equals(localNode, leader) &&
- event.subject().type() == Device.Type.CONTROLLER;
+ return event.subject().type() == Device.Type.CONTROLLER;
+ }
+
+ private boolean isRelevantHelper() {
+ return Objects.equals(localNode, leadershipService.getLeader(appId.name()));
}
@Override
@@ -654,6 +659,11 @@
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
+
+ if (!isRelevantHelper()) {
+ return;
+ }
+
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
@@ -686,9 +696,11 @@
@Override
public boolean isRelevant(DeviceEvent event) {
- NodeId leader = leadershipService.getLeader(appId.name());
- return Objects.equals(localNode, leader) &&
- event.subject().type() == Device.Type.SWITCH;
+ return event.subject().type() == Device.Type.SWITCH;
+ }
+
+ private boolean isRelevantHelper() {
+ return Objects.equals(localNode, leadershipService.getLeader(appId.name()));
}
@Override
@@ -699,6 +711,11 @@
case DEVICE_AVAILABILITY_CHANGED:
case DEVICE_ADDED:
eventExecutor.execute(() -> {
+
+ if (!isRelevantHelper()) {
+ return;
+ }
+
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
@@ -726,6 +743,11 @@
case PORT_UPDATED:
case PORT_ADDED:
eventExecutor.execute(() -> {
+
+ if (!isRelevantHelper()) {
+ return;
+ }
+
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
@@ -748,6 +770,11 @@
break;
case PORT_REMOVED:
eventExecutor.execute(() -> {
+
+ if (!isRelevantHelper()) {
+ return;
+ }
+
OpenstackNode osNode = osNodeService.node(device.id());
if (osNode == null || osNode.type() == CONTROLLER) {
@@ -811,10 +838,8 @@
*/
private class InternalOpenstackNodeListener implements OpenstackNodeListener {
- @Override
- public boolean isRelevant(OpenstackNodeEvent event) {
- NodeId leader = leadershipService.getLeader(appId.name());
- return Objects.equals(localNode, leader);
+ private boolean isRelevantHelper() {
+ return Objects.equals(localNode, leadershipService.getLeader(appId.name()));
}
@Override
@@ -822,13 +847,26 @@
switch (event.type()) {
case OPENSTACK_NODE_CREATED:
case OPENSTACK_NODE_UPDATED:
- eventExecutor.execute(() -> bootstrapNode(event.subject()));
- break;
- case OPENSTACK_NODE_COMPLETE:
+ eventExecutor.execute(() -> {
+
+ if (!isRelevantHelper()) {
+ return;
+ }
+
+ bootstrapNode(event.subject());
+ });
break;
case OPENSTACK_NODE_REMOVED:
- eventExecutor.execute(() -> processOpenstackNodeRemoved(event.subject()));
+ eventExecutor.execute(() -> {
+
+ if (!isRelevantHelper()) {
+ return;
+ }
+
+ processOpenstackNodeRemoved(event.subject());
+ });
break;
+ case OPENSTACK_NODE_COMPLETE:
default:
break;
}