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 a64b7722b5..e3ca070841 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.Objects; 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 @@ public class DefaultK8sNodeHandler implements K8sNodeHandler { 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 @@ public class DefaultK8sNodeHandler implements K8sNodeHandler { 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 @@ public class DefaultK8sNodeHandler implements K8sNodeHandler { 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 @@ public class DefaultK8sNodeHandler implements K8sNodeHandler { } 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;