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];
     }
 
     /**