[26/50] [abbrv] geode git commit: GEODE-2193 a member is kicked out immediately after joining
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 SchuchardtAuthored: 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
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 SchuchardtAuthored: 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);