Enhance RM logic in kubevirt networking app.
Change-Id: If12d7918486f6c8712004c276a2e84ede180c4dd
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
index 345e670..8b95507 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
@@ -542,7 +542,8 @@
if (numOfGateways == 0) {
return null;
}
- return (KubevirtNode) nodeService.completeNodes(GATEWAY).toArray()[router.hashCode() % numOfGateways];
+ return (KubevirtNode) nodeService.completeNodes(GATEWAY)
+ .toArray()[Math.floorMod(router.hashCode(), numOfGateways)];
}
/**
@@ -557,14 +558,18 @@
public static KubevirtNode gatewayNodeForSpecifiedService(KubevirtNodeService nodeService,
KubernetesExternalLb externalLb) {
//TODO: enhance election logic for a better load balancing
+ try {
+ int numOfGateways = nodeService.completeExternalLbGatewayNodes().size();
+ if (numOfGateways == 0) {
+ return null;
+ }
- int numOfGateways = nodeService.completeExternalLbGatewayNodes().size();
- if (numOfGateways == 0) {
+ return (KubevirtNode) nodeService.completeExternalLbGatewayNodes()
+ .toArray()[Math.floorMod(externalLb.hashCode(), numOfGateways)];
+ } catch (IndexOutOfBoundsException e) {
+ log.error("IndexOutOfBoundsException occurred {}", e.toString());
return null;
}
-
- return (KubevirtNode) nodeService.completeExternalLbGatewayNodes()
- .toArray()[externalLb.hashCode() % numOfGateways];
}
/**