[26/50] [abbrv] geode git commit: GEODE-2193 a member is kicked out immediately after joining

2016-12-14 Thread klund
GEODE-2193 a member is kicked out immediately after joining

The problem is happening because we send a shutdown message, initiating
election of a new coordinator, but the old ViewCreator is allowed to
send out a view announcing a new member.  The new coordinator manages
to send out a new view before the old ViewCreator sends out the new
member's view.  Other members ignore the old ViewCreator's view
because its view ID is old.  Then the reject the new member because
it has an old view ID and it isn't in their membership view.

initial view ID is x

new coordinator prepares view x+10
old coordinator prepares view x+1
other members install x+10, reject view x+1
new member joins in view x+1 when it receives view-prepare message
new member is rejected by other members because x+1 < x+10


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/ef86239f
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/ef86239f
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/ef86239f

Branch: refs/heads/feature/GEODE-1930
Commit: ef86239f872c12c0aad38d5ae3044e22fd5e87af
Parents: ac3a822
Author: Bruce Schuchardt 
Authored: Fri Dec 9 14:01:46 2016 -0800
Committer: Bruce Schuchardt 
Committed: Fri Dec 9 14:01:46 2016 -0800

--
 .../membership/gms/membership/GMSJoinLeave.java | 86 
 .../gms/messages/JoinResponseMessage.java   |  7 ++
 .../geode/distributed/LocatorJUnitTest.java |  3 +
 .../gms/membership/GMSJoinLeaveJUnitTest.java   | 67 +--
 4 files changed, 119 insertions(+), 44 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/geode/blob/ef86239f/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
--
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 6d782b1..4ee3011 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
@@ -803,13 +803,6 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 return newView;
   }
 
-  private void sendJoinResponses(NetView newView, 
List newMbrs) {
-for (InternalDistributedMember mbr : newMbrs) {
-  JoinResponseMessage response = new JoinResponseMessage(mbr, newView, 0);
-  services.getMessenger().send(response);
-}
-  }
-
   private void sendRemoveMessages(List removals, 
List reasons,
   Set oldIds) {
 Iterator reason = reasons.iterator();
@@ -826,11 +819,19 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 
   boolean prepareView(NetView view, List newMembers)
   throws InterruptedException {
+if (services.getCancelCriterion().isCancelInProgress()
+|| services.getManager().shutdownInProgress()) {
+  throw new InterruptedException("shutting down");
+}
 return sendView(view, true, this.prepareProcessor);
   }
 
   void sendView(NetView view, List newMembers)
   throws InterruptedException {
+if (services.getCancelCriterion().isCancelInProgress()
+|| services.getManager().shutdownInProgress()) {
+  throw new InterruptedException("shutting down");
+}
 sendView(view, false, this.viewProcessor);
   }
 
@@ -1401,7 +1402,9 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
   for (Iterator it = viewRequests.iterator(); 
it.hasNext();) {
 DistributionMessage m = it.next();
 if (m instanceof JoinRequestMessage) {
-  it.remove();
+  if (currentView.contains(((JoinRequestMessage) 
m).getMemberID())) {
+it.remove();
+  }
 } else if (m instanceof LeaveRequestMessage) {
   if (!currentView.contains(((LeaveRequestMessage) 
m).getMemberID())) {
 it.remove();
@@ -1500,6 +1503,11 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 if (viewCreator != null && !viewCreator.isShutdown()) {
   logger.debug("Shutting down ViewCreator");
   viewCreator.shutdown();
+  try {
+viewCreator.join(1000);
+  } catch (InterruptedException e) {
+Thread.currentThread().interrupt();
+  }
 }
   }
 
@@ -1641,8 +1649,6 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 services.getMessenger().addHandler(ViewAckMessage.class, this);
 services.getMessenger().addHandler(LeaveRequestMessage.class, this);
 

geode git commit: GEODE-2193 a member is kicked out immediately after joining

2016-12-09 Thread bschuchardt
Repository: geode
Updated Branches:
  refs/heads/develop ac3a82241 -> ef86239f8


GEODE-2193 a member is kicked out immediately after joining

The problem is happening because we send a shutdown message, initiating
election of a new coordinator, but the old ViewCreator is allowed to
send out a view announcing a new member.  The new coordinator manages
to send out a new view before the old ViewCreator sends out the new
member's view.  Other members ignore the old ViewCreator's view
because its view ID is old.  Then the reject the new member because
it has an old view ID and it isn't in their membership view.

initial view ID is x

new coordinator prepares view x+10
old coordinator prepares view x+1
other members install x+10, reject view x+1
new member joins in view x+1 when it receives view-prepare message
new member is rejected by other members because x+1 < x+10


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/ef86239f
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/ef86239f
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/ef86239f

Branch: refs/heads/develop
Commit: ef86239f872c12c0aad38d5ae3044e22fd5e87af
Parents: ac3a822
Author: Bruce Schuchardt 
Authored: Fri Dec 9 14:01:46 2016 -0800
Committer: Bruce Schuchardt 
Committed: Fri Dec 9 14:01:46 2016 -0800

--
 .../membership/gms/membership/GMSJoinLeave.java | 86 
 .../gms/messages/JoinResponseMessage.java   |  7 ++
 .../geode/distributed/LocatorJUnitTest.java |  3 +
 .../gms/membership/GMSJoinLeaveJUnitTest.java   | 67 +--
 4 files changed, 119 insertions(+), 44 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/geode/blob/ef86239f/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
--
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 6d782b1..4ee3011 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
@@ -803,13 +803,6 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 return newView;
   }
 
-  private void sendJoinResponses(NetView newView, 
List newMbrs) {
-for (InternalDistributedMember mbr : newMbrs) {
-  JoinResponseMessage response = new JoinResponseMessage(mbr, newView, 0);
-  services.getMessenger().send(response);
-}
-  }
-
   private void sendRemoveMessages(List removals, 
List reasons,
   Set oldIds) {
 Iterator reason = reasons.iterator();
@@ -826,11 +819,19 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 
   boolean prepareView(NetView view, List newMembers)
   throws InterruptedException {
+if (services.getCancelCriterion().isCancelInProgress()
+|| services.getManager().shutdownInProgress()) {
+  throw new InterruptedException("shutting down");
+}
 return sendView(view, true, this.prepareProcessor);
   }
 
   void sendView(NetView view, List newMembers)
   throws InterruptedException {
+if (services.getCancelCriterion().isCancelInProgress()
+|| services.getManager().shutdownInProgress()) {
+  throw new InterruptedException("shutting down");
+}
 sendView(view, false, this.viewProcessor);
   }
 
@@ -1401,7 +1402,9 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
   for (Iterator it = viewRequests.iterator(); 
it.hasNext();) {
 DistributionMessage m = it.next();
 if (m instanceof JoinRequestMessage) {
-  it.remove();
+  if (currentView.contains(((JoinRequestMessage) 
m).getMemberID())) {
+it.remove();
+  }
 } else if (m instanceof LeaveRequestMessage) {
   if (!currentView.contains(((LeaveRequestMessage) 
m).getMemberID())) {
 it.remove();
@@ -1500,6 +1503,11 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 if (viewCreator != null && !viewCreator.isShutdown()) {
   logger.debug("Shutting down ViewCreator");
   viewCreator.shutdown();
+  try {
+viewCreator.join(1000);
+  } catch (InterruptedException e) {
+Thread.currentThread().interrupt();
+  }
 }
   }
 
@@ -1641,8 +1649,6 @@ public class GMSJoinLeave implements JoinLeave, 
MessageHandler {
 services.getMessenger().addHandler(ViewAckMessage.class, this);