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;
             }