[Falcon] Fixed to avoid exception cases for compute node bootstrap

- Handled network config event with thread
- Considered ONOS restart situation, where node state in the store
is not the same as real state

Change-Id: Iec8c063317f1292052f299b680b7944821e60b7f
diff --git a/src/main/java/org/onosproject/cordvtn/CordVtnConfigManager.java b/src/main/java/org/onosproject/cordvtn/CordVtnConfigManager.java
index f79b446..525135d 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtnConfigManager.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtnConfigManager.java
@@ -30,6 +30,10 @@
 import org.onosproject.net.config.basics.SubjectFactories;
 import org.slf4j.Logger;
 
+import java.util.concurrent.ExecutorService;
+
+import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
+import static org.onlab.util.Tools.groupedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -63,13 +67,15 @@
             };
 
     private final NetworkConfigListener configListener = new InternalConfigListener();
-
     private ApplicationId appId;
+    protected ExecutorService eventExecutor;
+
 
     @Activate
     protected void active() {
         appId = coreService.getAppId(CordVtnService.CORDVTN_APP_ID);
 
+        eventExecutor = newSingleThreadScheduledExecutor(groupedThreads("onos/cordvtncfg", "event-handler"));
         configService.addListener(configListener);
         configRegistry.registerConfigFactory(configFactory);
     }
@@ -78,6 +84,7 @@
     protected void deactivate() {
         configRegistry.unregisterConfigFactory(configFactory);
         configService.removeListener(configListener);
+        eventExecutor.shutdown();
     }
 
     private void readConfiguration() {
@@ -106,11 +113,11 @@
             switch (event.type()) {
                 case CONFIG_ADDED:
                     log.info("Network configuration added");
-                    readConfiguration();
+                    eventExecutor.execute(CordVtnConfigManager.this::readConfiguration);
                     break;
                 case CONFIG_UPDATED:
                     log.info("Network configuration updated");
-                    readConfiguration();
+                    eventExecutor.execute(CordVtnConfigManager.this::readConfiguration);
                     break;
                 default:
                     break;