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/OpenstackSwitchingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
index a4696d5..a2d0013 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
@@ -566,11 +566,10 @@
 
         @Override
         public boolean isRelevant(OpenstackNetworkEvent event) {
-            Subnet osSubnet = event.subnet();
-            if (osSubnet == null) {
-                return false;
-            }
+            return event.subnet() != null;
+        }
 
+        private boolean isRelevantHelper(Subnet osSubnet) {
             Network network = osNetworkService.network(osSubnet.getNetworkId());
 
             if (network == null) {
@@ -597,11 +596,21 @@
                 case OPENSTACK_SUBNET_CREATED:
                 case OPENSTACK_SUBNET_UPDATED:
                     eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper(event.subnet())) {
+                            return;
+                        }
+
                         setFakeGatewayArpRule(event.subnet(), true, null);
                     });
                     break;
                 case OPENSTACK_SUBNET_REMOVED:
                     eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper(event.subnet())) {
+                            return;
+                        }
+
                         setFakeGatewayArpRule(event.subnet(), false, null);
                     });
                     break;
@@ -624,13 +633,8 @@
      * default ARP rule to handle ARP request.
      */
     private class InternalNodeEventListener implements OpenstackNodeListener {
-
-        @Override
-        public boolean isRelevant(OpenstackNodeEvent event) {
-
-            // do not allow to proceed without leadership
-            NodeId leader = leadershipService.getLeader(appId.name());
-            return Objects.equals(localNodeId, leader) && event.subject().type() == COMPUTE;
+        private boolean isRelevantHelper() {
+            return Objects.equals(localNodeId, leadershipService.getLeader(appId.name()));
         }
 
         @Override
@@ -639,12 +643,22 @@
             switch (event.type()) {
                 case OPENSTACK_NODE_COMPLETE:
                     eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper()) {
+                            return;
+                        }
+
                         setDefaultArpRule(osNode, true);
                         setAllArpRules(osNode, true);
                     });
                     break;
                 case OPENSTACK_NODE_INCOMPLETE:
                     eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper()) {
+                            return;
+                        }
+
                         setDefaultArpRule(osNode, false);
                         setAllArpRules(osNode, false);
                     });
@@ -749,13 +763,11 @@
 
         @Override
         public boolean isRelevant(InstancePortEvent event) {
+            return ARP_BROADCAST_MODE.equals(getArpMode());
+        }
 
-            if (ARP_PROXY_MODE.equals(getArpMode())) {
-                return false;
-            }
-
-            InstancePort instPort = event.subject();
-            return mastershipService.isLocalMaster(instPort.deviceId());
+        private boolean isRelevantHelper(InstancePortEvent event) {
+            return mastershipService.isLocalMaster(event.subject().deviceId());
         }
 
         @Override
@@ -763,25 +775,35 @@
             switch (event.type()) {
                 case OPENSTACK_INSTANCE_PORT_DETECTED:
                 case OPENSTACK_INSTANCE_PORT_UPDATED:
+                case OPENSTACK_INSTANCE_MIGRATION_STARTED:
                     eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper(event)) {
+                            return;
+                        }
+
                         setArpRequestRule(event.subject(), true);
                         setArpReplyRule(event.subject(), true);
                     });
                     break;
                 case OPENSTACK_INSTANCE_PORT_VANISHED:
                     eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper(event)) {
+                            return;
+                        }
+
                         setArpRequestRule(event.subject(), false);
                         setArpReplyRule(event.subject(), false);
                     });
                     break;
-                case OPENSTACK_INSTANCE_MIGRATION_STARTED:
-                    eventExecutor.execute(() -> {
-                        setArpRequestRule(event.subject(), true);
-                        setArpReplyRule(event.subject(), true);
-                    });
-                    break;
                 case OPENSTACK_INSTANCE_MIGRATION_ENDED:
                     eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper(event)) {
+                            return;
+                        }
+
                         InstancePort revisedInstPort = swapStaleLocation(event.subject());
                         setArpRequestRule(revisedInstPort, false);
                     });