You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@geode.apache.org by GitBox <gi...@apache.org> on 2021/02/16 19:15:23 UTC

[GitHub] [geode] mivanac commented on a change in pull request #6013: GEODE-8768_1: locator discovery improvement

mivanac commented on a change in pull request #6013:
URL: https://github.com/apache/geode/pull/6013#discussion_r577072869



##########
File path: geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorHelper.java
##########
@@ -46,13 +47,42 @@ public static boolean addLocator(int distributedSystemId, DistributionLocatorId
     Set<DistributionLocatorId> existingValue =
         allLocatorsInfo.putIfAbsent(distributedSystemId, locatorsSet);
     if (existingValue != null) {
-      if (!existingValue.contains(locator)) {
+      if (!locator.getMemberName().equals(DistributionConfig.DEFAULT_NAME)) {
+        DistributionLocatorId existingLocator =
+            getLocatorWithSameMemberName(existingValue, locator);
+
+        if (existingLocator != null) {
+          // if locator with same name exist, check did all parameters are same
+          if (!locator.detailCompare(existingLocator)) {
+            // some parameters had changed for existing locator
+            // replace it
+            existingValue.remove(existingLocator);
+            ConcurrentHashMap<Integer, Set<String>> allServerLocatorsInfo =
+                (ConcurrentHashMap<Integer, Set<String>>) locatorListener
+                    .getAllServerLocatorsInfo();
+            Set<String> alllocators = allServerLocatorsInfo.get(distributedSystemId);
+            alllocators.remove(existingLocator.toString());
+            existingValue.add(locator);
+            addServerLocator(distributedSystemId, locatorListener, locator);
+            locatorListener.locatorJoined(distributedSystemId, locator, sourceLocator);
+            return true;
+          }
+          return false;
+        }
         existingValue.add(locator);

Review comment:
       Main logic is that member name is main parameter, and if it does not exist, then we apply existing logic.
   This is the way we can determine that existing locator has change host[port].




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org