Fix: guarantee to referring to the correct openstack node state
Change-Id: I73265ba744ea5ec8e5e0e3e8f36735ae1d1ac952
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
index ddb130f..3af0eca 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
@@ -52,6 +52,7 @@
import java.util.Objects;
import java.util.Optional;
+import static java.lang.Thread.sleep;
import static org.onlab.util.Tools.nullIsIllegal;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.addRouterIface;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkArpMode;
@@ -68,7 +69,7 @@
private static final String FLOATINGIPS = "floatingips";
private static final String ARP_MODE_NAME = "arpMode";
- private static final long TIMEOUT_MS = 10000; // we wait 10s for init each node
+ private static final long SLEEP_MS = 3000; // we wait 3s for init each node
private static final String DEVICE_OWNER_IFACE = "network:router_interface";
@@ -299,19 +300,16 @@
OpenstackNode updated = osNode.updateState(NodeState.INIT);
osNodeAdminService.updateNode(updated);
- long timeoutExpiredMs = System.currentTimeMillis() + TIMEOUT_MS;
- while (updated.state() != NodeState.COMPLETE) {
- long waitMs = timeoutExpiredMs - System.currentTimeMillis();
+ try {
+ sleep(SLEEP_MS);
+ } catch (InterruptedException e) {
+ log.error("Exception caused during node synchronization...");
+ }
- if (updated.state() == NodeState.COMPLETE) {
- log.info("Finished sync rules for node {}", updated.hostname());
- break;
- }
-
- if (waitMs <= 0) {
- log.warn("Failed to sync rules for node {}", updated.hostname());
- break;
- }
+ if (osNodeService.node(osNode.hostname()).state() == NodeState.COMPLETE) {
+ log.info("Finished sync rules for node {}", osNode.hostname());
+ } else {
+ log.info("Failed to sync rules for node {}", osNode.hostname());
}
});
}