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/OpenstackRoutingIcmpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
index f4947f0..75db5a6 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
@@ -181,9 +181,11 @@
     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() == GATEWAY;
+            return event.subject().type() == GATEWAY;
+        }
+
+        private boolean isRelevantHelper() {
+            return Objects.equals(localNodeId, leadershipService.getLeader(appId.name()));
         }
 
         @Override
@@ -191,10 +193,24 @@
             OpenstackNode osNode = event.subject();
             switch (event.type()) {
                 case OPENSTACK_NODE_COMPLETE:
-                    eventExecutor.execute(() -> setIcmpReplyRules(osNode.intgBridge(), true));
+                    eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper()) {
+                            return;
+                        }
+
+                        setIcmpReplyRules(osNode.intgBridge(), true);
+                    });
                     break;
                 case OPENSTACK_NODE_INCOMPLETE:
-                    eventExecutor.execute(() -> setIcmpReplyRules(osNode.intgBridge(), false));
+                    eventExecutor.execute(() -> {
+
+                        if (!isRelevantHelper()) {
+                            return;
+                        }
+
+                        setIcmpReplyRules(osNode.intgBridge(), false);
+                    });
                     break;
                 default:
                     break;
@@ -233,12 +249,8 @@
             }
 
             eventExecutor.execute(() -> {
-                Set<DeviceId> gateways = osNodeService.completeNodes(GATEWAY)
-                        .stream().map(OpenstackNode::intgBridge)
-                        .collect(Collectors.toSet());
 
-                if (!gateways.isEmpty() &&
-                        !gateways.contains(context.inPacket().receivedFrom().deviceId())) {
+                if (!isRelevantHelper(context)) {
                     return;
                 }
 
@@ -256,6 +268,14 @@
             });
         }
 
+        private boolean isRelevantHelper(PacketContext context) {
+            Set<DeviceId> gateways = osNodeService.completeNodes(GATEWAY)
+                    .stream().map(OpenstackNode::intgBridge)
+                    .collect(Collectors.toSet());
+
+            return gateways.contains(context.inPacket().receivedFrom().deviceId());
+        }
+
         private void processIcmpPacket(PacketContext context, Ethernet ethernet) {
             IPv4 ipPacket = (IPv4) ethernet.getPayload();
             ICMP icmp = (ICMP) ipPacket.getPayload();