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 2020/10/06 17:52:48 UTC

[GitHub] [geode] upthewaterspout opened a new pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

upthewaterspout opened a new pull request #5598:
URL: https://github.com/apache/geode/pull/5598


   If we can contact all other locators, we should stop waiting for
   locator-wait-time to elapse.
   
   Thank you for submitting a contribution to Apache Geode.
   
   In order to streamline the review of the contribution we ask you
   to ensure the following steps have been taken:
   
   ### For all changes:
   - [ ] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?
   
   - [ ] Has your PR been rebased against the latest commit within the target branch (typically `develop`)?
   
   - [ ] Is your initial contribution a single, squashed commit?
   
   - [ ] Does `gradlew build` run cleanly?
   
   - [ ] Have you written or updated unit tests to verify your changes?
   
   - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)?
   
   ### Note:
   Please ensure that once the PR is submitted, check Concourse for build issues and
   submit an update to your PR as soon as possible. If you need help, please send an
   email to dev@geode.apache.org.
   


----------------------------------------------------------------
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



[GitHub] [geode] upthewaterspout merged pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
upthewaterspout merged pull request #5598:
URL: https://github.com/apache/geode/pull/5598


   


----------------------------------------------------------------
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



[GitHub] [geode] rhoughton-pivot commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
rhoughton-pivot commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500570669



##########
File path: geode-memcached/build.gradle
##########
@@ -31,6 +31,7 @@ dependencies {
   testImplementation('org.mockito:mockito-core')
   testImplementation(project(':geode-junit'))
 
+  integrationTestImplementation(project(':geode-membership'))

Review comment:
       What symbol does `geode-membership` bring that `geode-memcached` is consuming?




----------------------------------------------------------------
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



[GitHub] [geode] aaronlindsey commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
aaronlindsey commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500614767



##########
File path: geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
##########
@@ -349,9 +349,9 @@ public boolean join() throws MemberStartupException {
               && state.possibleCoordinator.equals(this.localAddress)) {
             // if we haven't contacted a member of a cluster maybe this node should
             // become the coordinator.
-            if (state.joinedMembersContacted <= 0 && (now >= locatorGiveUpTime) &&
-                (tries >= minimumRetriesBeforeBecomingCoordinator ||
-                    state.locatorsContacted >= locators.size())) {
+            if (state.joinedMembersContacted <= 0 && (now >= locatorGiveUpTime &&
+                tries >= minimumRetriesBeforeBecomingCoordinator) ||
+                state.locatorsContacted >= locators.size()) {

Review comment:
       The new logic in the latest commit makes sense to me.




----------------------------------------------------------------
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



[GitHub] [geode] upthewaterspout commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
upthewaterspout commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500577538



##########
File path: geode-memcached/build.gradle
##########
@@ -31,6 +31,7 @@ dependencies {
   testImplementation('org.mockito:mockito-core')
   testImplementation(project(':geode-junit'))
 
+  integrationTestImplementation(project(':geode-membership'))

Review comment:
       AvailablePort




----------------------------------------------------------------
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



[GitHub] [geode] aaronlindsey commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
aaronlindsey commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500581229



##########
File path: geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
##########
@@ -349,9 +349,9 @@ public boolean join() throws MemberStartupException {
               && state.possibleCoordinator.equals(this.localAddress)) {
             // if we haven't contacted a member of a cluster maybe this node should
             // become the coordinator.
-            if (state.joinedMembersContacted <= 0 && (now >= locatorGiveUpTime) &&
-                (tries >= minimumRetriesBeforeBecomingCoordinator ||
-                    state.locatorsContacted >= locators.size())) {
+            if (state.joinedMembersContacted <= 0 && (now >= locatorGiveUpTime &&
+                tries >= minimumRetriesBeforeBecomingCoordinator) ||
+                state.locatorsContacted >= locators.size()) {

Review comment:
       It looks like this evaluates to `true` any time we are able to contact all of the locators, even if one of those locators is part of an existing DS. In other words, if `joinedMembersContacted` is greater than zero but `locatorsContacted` is equal to `locators.size()` it tries to become the coordinator. Is that OK/can that even happen? I don't know enough about this code to say for sure.




----------------------------------------------------------------
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



[GitHub] [geode] Bill commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
Bill commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r502058030



##########
File path: geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipIntegrationTest.java
##########
@@ -272,6 +276,65 @@ public void secondMembershipPausesForLocatorWaitTime()
     stop(coordinatorLocator, lateJoiningLocator);
   }
 
+  @Test
+  public void locatorsStopWaitingForLocatorWaitTimeIfAllLocatorsContacted()
+      throws IOException, MemberStartupException, InterruptedException, TimeoutException,
+      ExecutionException {
+
+    final Supplier<ExecutorService> executorServiceSupplier =
+        () -> LoggingExecutors.newCachedThreadPool("membership", false);
+
+    int[] locatorPorts = AvailablePortHelper.getRandomAvailableTCPPorts(2);
+
+    int locatorWaitTime = (int) Duration.ofMinutes(5).getSeconds();
+    final MembershipConfig config =
+        createMembershipConfig(true, locatorWaitTime, locatorPorts[0], locatorPorts[1]);
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership0 =
+        launchLocator(executorServiceSupplier, locatorPorts[0], config);
+
+    // Assert that membership 0 is waiting for the other locator to start
+    Thread.sleep(5000);
+    assertThat(createMembership0.getNow(null)).isNull();
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership1 =
+        launchLocator(executorServiceSupplier, locatorPorts[1], config);
+
+    // Make sure the members are created in less than the locator-wait-time
+    Membership<MemberIdentifier> membership0 = createMembership0.get(2, TimeUnit.MINUTES);
+    Membership<MemberIdentifier> membership1 = createMembership1.get(2, TimeUnit.MINUTES);
+
+    // Make sure the members see each other in the view
+    assertThat(membership0.getView().getMembers()).hasSize(2);
+    assertThat(membership1.getView().getMembers()).hasSize(2);
+  }

Review comment:
       Here's that new ticket: https://issues.apache.org/jira/browse/GEODE-8589




----------------------------------------------------------------
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



[GitHub] [geode] upthewaterspout commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
upthewaterspout commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500594061



##########
File path: geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
##########
@@ -349,9 +349,9 @@ public boolean join() throws MemberStartupException {
               && state.possibleCoordinator.equals(this.localAddress)) {
             // if we haven't contacted a member of a cluster maybe this node should
             // become the coordinator.
-            if (state.joinedMembersContacted <= 0 && (now >= locatorGiveUpTime) &&
-                (tries >= minimumRetriesBeforeBecomingCoordinator ||
-                    state.locatorsContacted >= locators.size())) {
+            if (state.joinedMembersContacted <= 0 && (now >= locatorGiveUpTime &&
+                tries >= minimumRetriesBeforeBecomingCoordinator) ||
+                state.locatorsContacted >= locators.size()) {

Review comment:
       Gah! Good catch! Let me see if I have any more parenthesis lying around here. 




----------------------------------------------------------------
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



[GitHub] [geode] Bill commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
Bill commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500523949



##########
File path: geode-membership/src/main/java/org/apache/geode/internal/AvailablePort.java
##########
@@ -32,7 +32,7 @@
 import java.util.Random;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.membership.api.MembershipConfig;

Review comment:
       better (narrower) dependency!

##########
File path: geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/shell/StatusLocatorExitCodeAcceptanceTest.java
##########
@@ -57,7 +56,7 @@
   @BeforeClass
   public static void startLocator() throws IOException {
     rootPath = gfshRule.getTemporaryFolder().getRoot().toPath();
-    locatorPort = getRandomAvailablePort(SOCKET);
+    locatorPort = AvailablePortHelper.getRandomAvailableTCPPort();

Review comment:
       better!

##########
File path: geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipIntegrationTest.java
##########
@@ -272,6 +276,65 @@ public void secondMembershipPausesForLocatorWaitTime()
     stop(coordinatorLocator, lateJoiningLocator);
   }
 
+  @Test
+  public void locatorsStopWaitingForLocatorWaitTimeIfAllLocatorsContacted()
+      throws IOException, MemberStartupException, InterruptedException, TimeoutException,
+      ExecutionException {
+
+    final Supplier<ExecutorService> executorServiceSupplier =
+        () -> LoggingExecutors.newCachedThreadPool("membership", false);
+
+    int[] locatorPorts = AvailablePortHelper.getRandomAvailableTCPPorts(2);
+
+    int locatorWaitTime = (int) Duration.ofMinutes(5).getSeconds();
+    final MembershipConfig config =
+        createMembershipConfig(true, locatorWaitTime, locatorPorts[0], locatorPorts[1]);
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership0 =
+        launchLocator(executorServiceSupplier, locatorPorts[0], config);
+
+    // Assert that membership 0 is waiting for the other locator to start
+    Thread.sleep(5000);
+    assertThat(createMembership0.getNow(null)).isNull();
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership1 =
+        launchLocator(executorServiceSupplier, locatorPorts[1], config);
+
+    // Make sure the members are created in less than the locator-wait-time
+    Membership<MemberIdentifier> membership0 = createMembership0.get(2, TimeUnit.MINUTES);
+    Membership<MemberIdentifier> membership1 = createMembership1.get(2, TimeUnit.MINUTES);
+
+    // Make sure the members see each other in the view
+    assertThat(membership0.getView().getMembers()).hasSize(2);
+    assertThat(membership1.getView().getMembers()).hasSize(2);
+  }

Review comment:
       This is a good test and it's acceptable as-is. I wonder though, if you'd be willing to entertain reducing run-time and increasing determinism by by injecting the (millisecond) time keeper and sleeper into the locator, the way it's done for `PrimaryHandler`?
   
   Here is the PR from August that added that injection: https://github.com/apache/geode/pull/5422
   
   As of that PR (and now on `develop`) there are a couple functional interfaces defined in `PrimaryHander` that could be hoisted a little higher and used in `MembershipLocator` for your purposes, i.e. `Sleeper`, `MillisecondProvider`.
   
   With those injected, this test could control time similar to how `PrimaryHandlerTest` does.

##########
File path: geode-membership/src/main/java/org/apache/geode/internal/AvailablePort.java
##########
@@ -547,12 +548,7 @@ public static void main(String[] args) {
 
     InetAddress addr = null;
     if (addrString != null) {
-      try {
-        addr = InetAddress.getByName(addrString);
-      } catch (Exception e) {
-        e.printStackTrace();
-        ExitCode.FATAL.doSystemExit();
-      }
+      addr = InetAddress.getByName(addrString);

Review comment:
       verified when address cannot be resolved the exception causes exit code 1 (on macos) ✓




----------------------------------------------------------------
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



[GitHub] [geode] upthewaterspout commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
upthewaterspout commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500628520



##########
File path: geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipIntegrationTest.java
##########
@@ -272,6 +276,65 @@ public void secondMembershipPausesForLocatorWaitTime()
     stop(coordinatorLocator, lateJoiningLocator);
   }
 
+  @Test
+  public void locatorsStopWaitingForLocatorWaitTimeIfAllLocatorsContacted()
+      throws IOException, MemberStartupException, InterruptedException, TimeoutException,
+      ExecutionException {
+
+    final Supplier<ExecutorService> executorServiceSupplier =
+        () -> LoggingExecutors.newCachedThreadPool("membership", false);
+
+    int[] locatorPorts = AvailablePortHelper.getRandomAvailableTCPPorts(2);
+
+    int locatorWaitTime = (int) Duration.ofMinutes(5).getSeconds();
+    final MembershipConfig config =
+        createMembershipConfig(true, locatorWaitTime, locatorPorts[0], locatorPorts[1]);
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership0 =
+        launchLocator(executorServiceSupplier, locatorPorts[0], config);
+
+    // Assert that membership 0 is waiting for the other locator to start
+    Thread.sleep(5000);
+    assertThat(createMembership0.getNow(null)).isNull();
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership1 =
+        launchLocator(executorServiceSupplier, locatorPorts[1], config);
+
+    // Make sure the members are created in less than the locator-wait-time
+    Membership<MemberIdentifier> membership0 = createMembership0.get(2, TimeUnit.MINUTES);
+    Membership<MemberIdentifier> membership1 = createMembership1.get(2, TimeUnit.MINUTES);
+
+    // Make sure the members see each other in the view
+    assertThat(membership0.getView().getMembers()).hasSize(2);
+    assertThat(membership1.getView().getMembers()).hasSize(2);
+  }

Review comment:
       Based on your comment I started down this road. But this is a test of the whole membership system, so this will require injecting virtual time into a whole lot of classes, including classes that are doing things like `wait(sometimeout)` etc. I feel like this needs a little bit more time and careful development to get right, and more than I want to shoehorn into this PR. 




----------------------------------------------------------------
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



[GitHub] [geode] upthewaterspout merged pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
upthewaterspout merged pull request #5598:
URL: https://github.com/apache/geode/pull/5598


   


----------------------------------------------------------------
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



[GitHub] [geode] rhoughton-pivot commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
rhoughton-pivot commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r500585310



##########
File path: geode-memcached/build.gradle
##########
@@ -31,6 +31,7 @@ dependencies {
   testImplementation('org.mockito:mockito-core')
   testImplementation(project(':geode-junit'))
 
+  integrationTestImplementation(project(':geode-membership'))

Review comment:
       Wow, shame on me. I didn't catch that there was a file-move by looking at the change summary. #approved




----------------------------------------------------------------
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



[GitHub] [geode] Bill commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
Bill commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r502058030



##########
File path: geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipIntegrationTest.java
##########
@@ -272,6 +276,65 @@ public void secondMembershipPausesForLocatorWaitTime()
     stop(coordinatorLocator, lateJoiningLocator);
   }
 
+  @Test
+  public void locatorsStopWaitingForLocatorWaitTimeIfAllLocatorsContacted()
+      throws IOException, MemberStartupException, InterruptedException, TimeoutException,
+      ExecutionException {
+
+    final Supplier<ExecutorService> executorServiceSupplier =
+        () -> LoggingExecutors.newCachedThreadPool("membership", false);
+
+    int[] locatorPorts = AvailablePortHelper.getRandomAvailableTCPPorts(2);
+
+    int locatorWaitTime = (int) Duration.ofMinutes(5).getSeconds();
+    final MembershipConfig config =
+        createMembershipConfig(true, locatorWaitTime, locatorPorts[0], locatorPorts[1]);
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership0 =
+        launchLocator(executorServiceSupplier, locatorPorts[0], config);
+
+    // Assert that membership 0 is waiting for the other locator to start
+    Thread.sleep(5000);
+    assertThat(createMembership0.getNow(null)).isNull();
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership1 =
+        launchLocator(executorServiceSupplier, locatorPorts[1], config);
+
+    // Make sure the members are created in less than the locator-wait-time
+    Membership<MemberIdentifier> membership0 = createMembership0.get(2, TimeUnit.MINUTES);
+    Membership<MemberIdentifier> membership1 = createMembership1.get(2, TimeUnit.MINUTES);
+
+    // Make sure the members see each other in the view
+    assertThat(membership0.getView().getMembers()).hasSize(2);
+    assertThat(membership1.getView().getMembers()).hasSize(2);
+  }

Review comment:
       Here's that new ticket: https://issues.apache.org/jira/browse/GEODE-8589




----------------------------------------------------------------
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



[GitHub] [geode] Bill commented on a change in pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
Bill commented on a change in pull request #5598:
URL: https://github.com/apache/geode/pull/5598#discussion_r501145984



##########
File path: geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipIntegrationTest.java
##########
@@ -272,6 +276,65 @@ public void secondMembershipPausesForLocatorWaitTime()
     stop(coordinatorLocator, lateJoiningLocator);
   }
 
+  @Test
+  public void locatorsStopWaitingForLocatorWaitTimeIfAllLocatorsContacted()
+      throws IOException, MemberStartupException, InterruptedException, TimeoutException,
+      ExecutionException {
+
+    final Supplier<ExecutorService> executorServiceSupplier =
+        () -> LoggingExecutors.newCachedThreadPool("membership", false);
+
+    int[] locatorPorts = AvailablePortHelper.getRandomAvailableTCPPorts(2);
+
+    int locatorWaitTime = (int) Duration.ofMinutes(5).getSeconds();
+    final MembershipConfig config =
+        createMembershipConfig(true, locatorWaitTime, locatorPorts[0], locatorPorts[1]);
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership0 =
+        launchLocator(executorServiceSupplier, locatorPorts[0], config);
+
+    // Assert that membership 0 is waiting for the other locator to start
+    Thread.sleep(5000);
+    assertThat(createMembership0.getNow(null)).isNull();
+
+    CompletableFuture<Membership<MemberIdentifier>> createMembership1 =
+        launchLocator(executorServiceSupplier, locatorPorts[1], config);
+
+    // Make sure the members are created in less than the locator-wait-time
+    Membership<MemberIdentifier> membership0 = createMembership0.get(2, TimeUnit.MINUTES);
+    Membership<MemberIdentifier> membership1 = createMembership1.get(2, TimeUnit.MINUTES);
+
+    // Make sure the members see each other in the view
+    assertThat(membership0.getView().getMembers()).hasSize(2);
+    assertThat(membership1.getView().getMembers()).hasSize(2);
+  }

Review comment:
       Ok @upthewaterspout. After this PR merges I'll write a ticket to make this improvement. Thanks for trying it though!




----------------------------------------------------------------
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



[GitHub] [geode] upthewaterspout commented on pull request #5598: GEODE-8579: Stop waiting locator-wait-time if all locators are available

Posted by GitBox <gi...@apache.org>.
upthewaterspout commented on pull request #5598:
URL: https://github.com/apache/geode/pull/5598#issuecomment-704445463


   BTW, the actual product change is just shifting some parenthesis around in an if statement.
   
   Most of these changes have to do with moving AvailablePort so that I could write a good test. We need to be able to write a test at the membership level where two locators are started up that both know about each other (including their ports) at startup. The best way to do that is to use AvailablePort to get the ports before starting the locators.


----------------------------------------------------------------
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