Move kubevirt sync rules endpoint from network to node package
Change-Id: Iaaedeba57c18ae49d90cc5a8d913b17596be38fa
(cherry picked from commit 82c2fdf0827127234a0af0e8892dcd93f4f17073)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/web/KubevirtManagementWebResource.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/web/KubevirtManagementWebResource.java
deleted file mode 100644
index 043899f..0000000
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/web/KubevirtManagementWebResource.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2021-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.kubevirtnetworking.web;
-
-import org.onosproject.kubevirtnode.api.KubevirtNode;
-import org.onosproject.kubevirtnode.api.KubevirtNodeAdminService;
-import org.onosproject.rest.AbstractWebResource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import static java.lang.Thread.sleep;
-import static org.onosproject.kubevirtnode.api.KubevirtNode.Type.WORKER;
-import static org.onosproject.kubevirtnode.api.KubevirtNodeState.COMPLETE;
-import static org.onosproject.kubevirtnode.api.KubevirtNodeState.INIT;
-
-/**
- * REST interface for synchronizing kubevirt network states and rules.
- */
-@Path("management")
-public class KubevirtManagementWebResource extends AbstractWebResource {
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- private static final long SLEEP_MS = 5000; // we wait 5s for init each node
- private static final long TIMEOUT_MS = 10000; // we wait 10s
-
- /**
- * Synchronizes the flow rules.
- *
- * @return 200 OK with sync result, 404 not found
- */
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Path("sync/rules")
- public Response syncRules() {
-
- KubevirtNodeAdminService service = get(KubevirtNodeAdminService.class);
-
- service.completeNodes(WORKER).forEach(this::syncRulesBase);
- return ok(mapper().createObjectNode()).build();
- }
-
- private void syncRulesBase(KubevirtNode node) {
- KubevirtNode updated = node.updateState(INIT);
- KubevirtNodeAdminService service = get(KubevirtNodeAdminService.class);
- service.updateNode(updated);
-
- boolean result = true;
- long timeoutExpiredMs = System.currentTimeMillis() + TIMEOUT_MS;
-
- while (service.node(node.hostname()).state() != COMPLETE) {
-
- long waitMs = timeoutExpiredMs - System.currentTimeMillis();
-
- try {
- sleep(SLEEP_MS);
- } catch (InterruptedException e) {
- log.error("Exception caused during node synchronization...");
- }
-
- if (service.node(node.hostname()).state() == COMPLETE) {
- break;
- } else {
- service.updateNode(updated);
- log.info("Failed to synchronize flow rules, retrying...");
- }
-
- if (waitMs <= 0) {
- result = false;
- break;
- }
- }
-
- if (result) {
- log.info("Successfully synchronize flow rules for node {}!", node.hostname());
- } else {
- log.warn("Failed to synchronize flow rules for node {}.", node.hostname());
- }
- }
-}
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkingWebApplication.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkingWebApplication.java
index 45dcdae..1345f95 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkingWebApplication.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkingWebApplication.java
@@ -27,7 +27,6 @@
public Set<Class<?>> getClasses() {
return getClasses(
KubevirtNetworkWebResource.class,
- KubevirtManagementWebResource.class,
KubevirtRouterWebResource.class,
KubevirtFloatingIpsWebResource.class,
KubevirtSecurityGroupWebResource.class,
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java
index c28bc94..b18f42d 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/web/KubevirtNodeWebResource.java
@@ -43,9 +43,13 @@
import java.util.Set;
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
+import static java.lang.Thread.sleep;
import static javax.ws.rs.core.Response.created;
import static org.onlab.util.Tools.nullIsIllegal;
import static org.onlab.util.Tools.readTreeFromStream;
+import static org.onosproject.kubevirtnode.api.KubevirtNode.Type.WORKER;
+import static org.onosproject.kubevirtnode.api.KubevirtNodeState.COMPLETE;
+import static org.onosproject.kubevirtnode.api.KubevirtNodeState.INIT;
/**
* Handles REST API call of KubeVirt node config.
@@ -62,11 +66,13 @@
private static final String NODE_ID = "NODE_ID";
private static final String REMOVE = "REMOVE";
private static final String QUERY = "QUERY";
- private static final String INIT = "INIT";
private static final String NOT_EXIST = "Not exist";
private static final String STATE = "State";
private static final String RESULT = "Result";
+ private static final long SLEEP_MS = 5000; // we wait 5s for init each node
+ private static final long TIMEOUT_MS = 10000; // we wait 10s
+
private static final String HOST_NAME = "hostname";
private static final String ERROR_MESSAGE = " cannot be null";
@@ -197,7 +203,7 @@
log.error("Given node {} does not exist", hostname);
return Response.serverError().build();
}
- KubevirtNode updated = node.updateState(KubevirtNodeState.INIT);
+ KubevirtNode updated = node.updateState(INIT);
service.updateNode(updated);
return ok(mapper().createObjectNode()).build();
}
@@ -217,7 +223,7 @@
service.nodes()
.forEach(n -> {
- KubevirtNode updated = n.updateState(KubevirtNodeState.INIT);
+ KubevirtNode updated = n.updateState(INIT);
service.updateNode(updated);
});
@@ -239,13 +245,67 @@
service.nodes().stream()
.filter(n -> n.state() != KubevirtNodeState.COMPLETE)
.forEach(n -> {
- KubevirtNode updated = n.updateState(KubevirtNodeState.INIT);
+ KubevirtNode updated = n.updateState(INIT);
service.updateNode(updated);
});
return ok(mapper().createObjectNode()).build();
}
+ /**
+ * Synchronizes the flow rules.
+ *
+ * @return 200 OK with sync result, 404 not found
+ */
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("sync/rules")
+ public Response syncRules() {
+
+ KubevirtNodeAdminService service = get(KubevirtNodeAdminService.class);
+
+ service.completeNodes(WORKER).forEach(this::syncRulesBase);
+ return ok(mapper().createObjectNode()).build();
+ }
+
+ private void syncRulesBase(KubevirtNode node) {
+ KubevirtNode updated = node.updateState(INIT);
+ KubevirtNodeAdminService service = get(KubevirtNodeAdminService.class);
+ service.updateNode(updated);
+
+ boolean result = true;
+ long timeoutExpiredMs = System.currentTimeMillis() + TIMEOUT_MS;
+
+ while (service.node(node.hostname()).state() != COMPLETE) {
+
+ long waitMs = timeoutExpiredMs - System.currentTimeMillis();
+
+ try {
+ sleep(SLEEP_MS);
+ } catch (InterruptedException e) {
+ log.error("Exception caused during node synchronization...");
+ }
+
+ if (service.node(node.hostname()).state() == COMPLETE) {
+ break;
+ } else {
+ service.updateNode(updated);
+ log.info("Failed to synchronize flow rules, retrying...");
+ }
+
+ if (waitMs <= 0) {
+ result = false;
+ break;
+ }
+ }
+
+ if (result) {
+ log.info("Successfully synchronize flow rules for node {}!", node.hostname());
+ } else {
+ log.warn("Failed to synchronize flow rules for node {}.", node.hostname());
+ }
+ }
+
private Set<KubevirtNode> readNodeConfiguration(InputStream input) {
Set<KubevirtNode> nodeSet = Sets.newHashSet();
try {