Support LB in kubevirt networking application.
Change-Id: I59578fc0b778173a20c958b641cf9bf1abe69bc6
(cherry picked from commit c8a8759e3adc292a429a4ca7173d15c220b7ea3c)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtLoadBalancerStore.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtLoadBalancerStore.java
index fd90e8a..1c045f3 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtLoadBalancerStore.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtLoadBalancerStore.java
@@ -16,6 +16,7 @@
package org.onosproject.kubevirtnetworking.impl;
import com.google.common.collect.ImmutableSet;
+import org.onlab.packet.IpAddress;
import org.onlab.util.KryoNamespace;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
@@ -42,6 +43,7 @@
import org.slf4j.Logger;
import java.util.Collection;
+import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
@@ -49,6 +51,8 @@
import static java.util.concurrent.Executors.newSingleThreadExecutor;
import static org.onlab.util.Tools.groupedThreads;
import static org.onosproject.kubevirtnetworking.api.KubevirtLoadBalancerEvent.Type.KUBEVIRT_LOAD_BALANCER_CREATED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtLoadBalancerEvent.Type.KUBEVIRT_LOAD_BALANCER_MEMBER_ADDED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtLoadBalancerEvent.Type.KUBEVIRT_LOAD_BALANCER_MEMBER_REMOVED;
import static org.onosproject.kubevirtnetworking.api.KubevirtLoadBalancerEvent.Type.KUBEVIRT_LOAD_BALANCER_REMOVED;
import static org.onosproject.kubevirtnetworking.api.KubevirtLoadBalancerEvent.Type.KUBEVIRT_LOAD_BALANCER_UPDATED;
import static org.slf4j.LoggerFactory.getLogger;
@@ -168,9 +172,7 @@
break;
case UPDATE:
log.debug("Kubevirt load balancer updated");
- eventExecutor.execute(() ->
- notifyDelegate(new KubevirtLoadBalancerEvent(
- KUBEVIRT_LOAD_BALANCER_UPDATED, event.newValue().value())));
+ eventExecutor.execute(() -> processLoadBalancerMapUpdate(event));
break;
case REMOVE:
log.debug("Kubevirt load balancer removed");
@@ -183,5 +185,41 @@
break;
}
}
+
+ private void processLoadBalancerMapUpdate(MapEvent<String, KubevirtLoadBalancer> event) {
+ KubevirtLoadBalancer oldLb = event.oldValue().value();
+ KubevirtLoadBalancer newLb = event.newValue().value();
+
+ Set<IpAddress> added = new HashSet<>(newLb.members());
+ Set<IpAddress> oldSet = oldLb.members();
+
+ added.removeAll(oldSet);
+
+ if (added.size() > 0) {
+ notifyDelegate(new KubevirtLoadBalancerEvent(
+ KUBEVIRT_LOAD_BALANCER_MEMBER_ADDED,
+ newLb,
+ added
+ ));
+ }
+
+ Set<IpAddress> removed = new HashSet<>(oldLb.members());
+ Set<IpAddress> newSet = newLb.members();
+ removed.removeAll(newSet);
+
+ if (removed.size() > 0) {
+ notifyDelegate(new KubevirtLoadBalancerEvent(
+ KUBEVIRT_LOAD_BALANCER_MEMBER_REMOVED,
+ newLb,
+ removed
+ ));
+ }
+
+ notifyDelegate(new KubevirtLoadBalancerEvent(
+ KUBEVIRT_LOAD_BALANCER_UPDATED,
+ newLb,
+ oldLb
+ ));
+ }
}
}