Fix: add a timer to harden the k8s node's state checking logic

Change-Id: I76eb3dd22a712299669dac81fb48f2a4937ebecf
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
index a64b772..e3ca070 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
@@ -64,6 +64,7 @@
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
 
+import static java.lang.Thread.sleep;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.packet.TpPort.tpPort;
 import static org.onlab.util.Tools.groupedThreads;
@@ -110,6 +111,7 @@
     private static final String DEFAULT_OF_PROTO = "tcp";
     private static final int DEFAULT_OFPORT = 6653;
     private static final int DPID_BEGIN = 3;
+    private static final long SLEEP_MS = 3000; // we wait 3s
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
@@ -479,6 +481,7 @@
             case COMPLETE:
             case INCOMPLETE:
             case ON_BOARDED:
+            case POST_ON_BOARD:
                 // always return false
                 // run init CLI to re-trigger node bootstrap
                 return false;
@@ -493,6 +496,14 @@
             return false;
         }
 
+        try {
+            // we need to wait a while, in case interface and bridge
+            // creation requires some time
+            sleep(SLEEP_MS);
+        } catch (InterruptedException e) {
+            log.error("Exception caused during init state checking...");
+        }
+
         return k8sNode.intgBridge() != null && k8sNode.extBridge() != null &&
                 deviceService.isAvailable(k8sNode.intgBridge()) &&
                 deviceService.isAvailable(k8sNode.extBridge()) &&
@@ -500,6 +511,15 @@
     }
 
     private boolean isDeviceCreatedStateDone(K8sNode k8sNode) {
+
+        try {
+            // we need to wait a while, in case interface and bridge
+            // creation requires some time
+            sleep(SLEEP_MS);
+        } catch (InterruptedException e) {
+            log.error("Exception caused during init state checking...");
+        }
+
         if (k8sNode.dataIp() != null &&
                 !isIntfEnabled(k8sNode, VXLAN_TUNNEL)) {
             return false;