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

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

commit 6d82edf5901df9d6e57517cb04162e17ac268a78
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Mon Feb 10 09:23:21 2020 -0800

    GEODE-7760: fixing LocatorUDPSecurityDUnitTest.testCrashLocatorMultipleTimes
    
    This new test exposed a flaw in auto-reconnect where the quorum-checker
    buffers messages from other members but the new Membership messenger is
    unable to decrypt them when it starts up due to not having the old
    encryption keys.
    
    The encrypt/decrypt objects from the old Membership are now kept and
    provided to the new Messenger during auto-reconnect.
---
 .../distributed/LocatorUDPSecurityDUnitTest.java     |  1 +
 .../gms/messenger/GMSQuorumCheckerJUnitTest.java     | 20 ++++++++++----------
 .../gms/messenger/JGroupsMessengerJUnitTest.java     |  2 +-
 .../membership/gms/messenger/GMSQuorumChecker.java   |  8 ++++++--
 .../membership/gms/messenger/JGroupsMessenger.java   |  4 +++-
 .../gms/messenger/MembershipInformationImpl.java     | 10 +++++++++-
 6 files changed, 30 insertions(+), 15 deletions(-)

diff --git 
a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java
 
b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java
index ab778c2..474adc8 100644
--- 
a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java
+++ 
b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java
@@ -36,6 +36,7 @@ public class LocatorUDPSecurityDUnitTest extends 
LocatorDUnitTest {
     p.setProperty(SECURITY_UDP_DHALGO, "AES:128");
   }
 
+
   @Test
   public void testLocatorWithUDPSecurityButServer() {
     String locators = hostName + "[" + port1 + "]";
diff --git 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
index e7c2a5c..b514486 100644
--- 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
+++ 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumCheckerJUnitTest.java
@@ -76,7 +76,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertTrue(quorum);
@@ -96,7 +96,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertTrue(quorum);
@@ -111,7 +111,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertFalse(quorum);
@@ -125,7 +125,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertFalse(quorum);
@@ -152,7 +152,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertTrue(quorum);
@@ -182,7 +182,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertTrue(quorum);
@@ -215,7 +215,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertFalse(quorum);
@@ -246,7 +246,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertFalse(quorum);
@@ -270,7 +270,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertTrue(quorum);
@@ -295,7 +295,7 @@ public class GMSQuorumCheckerJUnitTest {
     PingMessageAnswer answerer = new PingMessageAnswer(channel, 
pongResponders);
     Mockito.doAnswer(answerer).when(channel).send(any(Message.class));
 
-    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel);
+    GMSQuorumChecker qc = new GMSQuorumChecker(view, 51, channel, null);
     qc.initialize();
     boolean quorum = qc.checkForQuorum(500);
     assertFalse(quorum);
diff --git 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
index dfec870..0e0748d 100755
--- 
a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
+++ 
b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
@@ -883,7 +883,7 @@ public class JGroupsMessengerJUnitTest {
     initMocks(false, true);
     ((TestMembershipConfig) membershipConfig).oldMembershipInfo =
         new MembershipInformationImpl(messenger.myChannel,
-            new ConcurrentLinkedQueue<>());
+            new ConcurrentLinkedQueue<>(), null);
     JGroupsMessenger newMessenger = new JGroupsMessenger();
     newMessenger.init(services);
     newMessenger.start();
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
index fc8a116..273caf1 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
@@ -45,6 +45,8 @@ import org.apache.geode.logging.internal.log4j.api.LogService;
  */
 public class GMSQuorumChecker<ID extends MemberIdentifier> implements 
QuorumChecker {
   private static final Logger logger = LogService.getLogger();
+
+  private final GMSEncrypt encrypt;
   private boolean isInfoEnabled = false;
   private Map<SocketAddress, ID> addressConversionMap;
   private GMSPingPonger pingPonger;
@@ -60,10 +62,12 @@ public class GMSQuorumChecker<ID extends MemberIdentifier> 
implements QuorumChec
   private final long partitionThreshold;
   private ConcurrentLinkedQueue<Message> messageQueue = new 
ConcurrentLinkedQueue<>();
 
-  public GMSQuorumChecker(GMSMembershipView<ID> jgView, int 
partitionThreshold, JChannel channel) {
+  public GMSQuorumChecker(GMSMembershipView<ID> jgView, int 
partitionThreshold, JChannel channel,
+      GMSEncrypt encrypt) {
     this.lastView = jgView;
     this.partitionThreshold = partitionThreshold;
     this.channel = channel;
+    this.encrypt = encrypt;
   }
 
   public void initialize() {
@@ -119,7 +123,7 @@ public class GMSQuorumChecker<ID extends MemberIdentifier> 
implements QuorumChec
 
   @Override
   public MembershipInformation getMembershipInfo() {
-    return new MembershipInformationImpl(channel, messageQueue);
+    return new MembershipInformationImpl(channel, messageQueue, encrypt);
   }
 
   private boolean calculateQuorum() {
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
index fb77d13..a3c9413 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
@@ -336,6 +336,7 @@ public class JGroupsMessenger<ID extends MemberIdentifier> 
implements Messenger<
         MembershipInformationImpl oldInfo = (MembershipInformationImpl) 
oldDSMembershipInfo;
         myChannel = oldInfo.getChannel();
         queuedMessagesFromReconnect = oldInfo.getQueuedMessages();
+        encrypt = oldInfo.getEncrypt();
 
         // scrub the old channel
         ViewId vid = new ViewId(new JGAddress(), 0);
@@ -1248,7 +1249,8 @@ public class JGroupsMessenger<ID extends 
MemberIdentifier> implements Messenger<
       }
     }
     GMSQuorumChecker<ID> qc =
-        new GMSQuorumChecker<>(view, services.getConfig().getLossThreshold(), 
this.myChannel);
+        new GMSQuorumChecker<>(view, services.getConfig().getLossThreshold(), 
this.myChannel,
+            encrypt);
     qc.initialize();
     return qc;
   }
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/MembershipInformationImpl.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/MembershipInformationImpl.java
index c46df62..aa10dcb 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/MembershipInformationImpl.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/MembershipInformationImpl.java
@@ -28,12 +28,20 @@ import 
org.apache.geode.distributed.internal.membership.api.MembershipInformatio
 public class MembershipInformationImpl implements MembershipInformation {
   private final JChannel channel;
   private final Queue<Message> queuedMessages;
+  private final GMSEncrypt encrypt;
 
   protected MembershipInformationImpl(JChannel channel,
-      Queue<Message> queuedMessages) {
+      Queue<Message> queuedMessages,
+      GMSEncrypt encrypt) {
 
     this.channel = channel;
     this.queuedMessages = queuedMessages;
+    this.encrypt = encrypt;
+  }
+
+
+  public GMSEncrypt getEncrypt() {
+    return encrypt;
   }
 
   public JChannel getChannel() {

Reply via email to