[ONOS-4983] Fix the bug of gateway information modification
Change-Id: Ie5b672b5034e2cdac08d674da510e21f02588e6d
diff --git a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
index 80b4f45..0e49149 100644
--- a/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
+++ b/apps/scalablegateway/src/main/java/org/onosproject/scalablegateway/impl/ScalableGatewayManager.java
@@ -21,7 +21,6 @@
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
-
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
@@ -29,7 +28,6 @@
import org.onlab.util.Tools;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
-
import org.onosproject.core.GroupId;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Port;
@@ -50,11 +48,6 @@
import org.onosproject.scalablegateway.api.GatewayNode;
import org.onosproject.scalablegateway.api.GatewayNodeConfig;
import org.onosproject.scalablegateway.api.ScalableGatewayService;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.ConsistentMap;
import org.onosproject.store.service.Serializer;
@@ -63,6 +56,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
/**
@@ -210,11 +207,16 @@
@Override
public synchronized boolean addGatewayNode(GatewayNode gatewayNode) {
- Versioned<GatewayNode> existingNode = gatewayNodeMap.putIfAbsent(
- gatewayNode.getGatewayDeviceId(), gatewayNode);
+ Versioned<GatewayNode> existingNode = gatewayNodeMap.put(gatewayNode.getGatewayDeviceId(),
+ gatewayNode);
if (existingNode == null) {
updateGatewayGroup(gatewayNode, true);
- log.info("Added {} to gateway pool", gatewayNode);
+ log.info("Gateway {} is added to Gateway pool", gatewayNode);
+ return true;
+ } else if (!existingNode.value().equals(gatewayNode)) {
+ updateGatewayGroup(existingNode.value(), false);
+ updateGatewayGroup(gatewayNode, true);
+ log.info("Gateway {} is updated", gatewayNode);
return true;
} else {
return false;