This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-6423
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-6423 by this 
push:
     new 30334c2  fixing problems in auto-reconnect tests
30334c2 is described below

commit 30334c2a7cbc07df61b655171d7178e653adc0c5
Author: Bruce Schuchardt <bschucha...@pivotal.io>
AuthorDate: Thu Feb 21 14:03:12 2019 -0800

    fixing problems in auto-reconnect tests
    
    The longer period of time taken in final checks exposed more race
    conditions in auto-reconnect.  To avoid those race conditions I've
    modified JGroupsMessenger to force the JChannel to generate a new UUID
    that will be used in the DistributedMember ID of the reconnected cache.
---
 .../membership/gms/membership/GMSJoinLeave.java         |  1 +
 .../membership/gms/messenger/JGroupsMessenger.java      | 17 ++++++++++++-----
 .../geode/test/dunit/rules/ClusterStartupRule.java      |  2 +-
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
index 261bb70..c3e0f1d 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
@@ -1036,6 +1036,7 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
             this.preparedView.getCreator().equals(view.getCreator())) {
           // this can happen if we received two prepares during auto-reconnect
         } else {
+          // send the conflicting view to the creator of this new view
           services.getMessenger()
               .send(new ViewAckMessage(view.getViewId(), m.getSender(), 
this.preparedView));
         }
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
index 8475bcb..d365bb7 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
@@ -332,9 +332,16 @@ public class JGroupsMessenger implements Messenger {
         members.add(new UUID(0, 0));// TODO open a JGroups JIRA for GEODE-3034
         View jgv = new View(vid, members);
         this.myChannel.down(new Event(Event.VIEW_CHANGE, jgv));
-        UUID logicalAddress = (UUID) myChannel.getAddress();
-        if (logicalAddress instanceof JGAddress) {
-          ((JGAddress) logicalAddress).setVmViewId(-1);
+        // attempt to establish a new UUID in the jgroups channel so the 
member address will be
+        // different
+        try {
+          Method setAddressMethod = 
JChannel.class.getDeclaredMethod("setAddress");
+          setAddressMethod.setAccessible(true);
+          setAddressMethod.invoke(myChannel);
+        } catch (SecurityException | NoSuchMethodException e) {
+          logger.warn("Unable to establish a new JGroups address.  "
+              + "My address will be exactly the same as last time. 
Exception={}",
+              e.getMessage());
         }
         reconnecting = true;
       } else {
@@ -364,7 +371,7 @@ public class JGroupsMessenger implements Messenger {
       jgroupsReceiver = new JGroupsReceiver();
       myChannel.setReceiver(jgroupsReceiver);
       if (!reconnecting) {
-        myChannel.connect("AG"); // apache g***** (whatever we end up calling 
it)
+        myChannel.connect("AG"); // Apache Geode
       }
     } catch (Exception e) {
       myChannel.close();
@@ -556,7 +563,7 @@ public class JGroupsMessenger implements Messenger {
     gmsMember.setMemberWeight((byte) (services.getConfig().getMemberWeight() & 
0xff));
     gmsMember.setNetworkPartitionDetectionEnabled(
         
services.getConfig().getDistributionConfig().getEnableNetworkPartitionDetection());
-
+    logger.info("Established local address {}", localAddress);
     services.setLocalAddress(localAddress);
   }
 
diff --git 
a/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
 
b/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
index cd87286..3d329aa 100644
--- 
a/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
+++ 
b/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
@@ -250,7 +250,7 @@ public class ClusterStartupRule implements 
SerializableTestRule {
       SerializableFunction<ServerStarterRule> ruleOperator) {
     final String defaultName = "server-" + index;
     VM serverVM = getVM(index, version);
-    Server server = serverVM.invoke(() -> {
+    Server server = serverVM.invoke("startServerVM", () -> {
       memberStarter = new ServerStarterRule();
       ServerStarterRule serverStarter = (ServerStarterRule) memberStarter;
       if (logFile) {

Reply via email to