Search in sources :

Example 6 with RemoveMemberMessage

use of org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage in project geode by apache.

the class GMSJoinLeaveJUnitTest method testNonMemberCantRemoveMember.

@Test
public void testNonMemberCantRemoveMember() throws Exception {
    String reason = "testing";
    initMocks();
    prepareAndInstallView(mockMembers[0], createMemberList(mockMembers[0], gmsJoinLeaveMemberId));
    // test that a non-member can't remove another member
    RemoveMemberMessage msg = new RemoveMemberMessage(mockMembers[0], mockMembers[1], reason);
    msg.setSender(new InternalDistributedMember("localhost", 9000));
    gmsJoinLeave.processMessage(msg);
    assertTrue("RemoveMemberMessage should not have been added to view requests", gmsJoinLeave.getViewRequests().size() == 0);
}
Also used : RemoveMemberMessage(org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage) InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) Test(org.junit.Test) MembershipTest(org.apache.geode.test.junit.categories.MembershipTest) IntegrationTest(org.apache.geode.test.junit.categories.IntegrationTest)

Example 7 with RemoveMemberMessage

use of org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage in project geode by apache.

the class GMSJoinLeave method installView.

public void installView(NetView newView) {
    synchronized (viewInstallationLock) {
        if (currentView != null && currentView.getViewId() >= newView.getViewId()) {
            // old view - ignore it
            return;
        }
        logger.info("received new view: {}\nold view is: {}", newView, currentView);
        if (currentView == null && !this.isJoined) {
            boolean found = false;
            for (InternalDistributedMember mbr : newView.getMembers()) {
                if (this.localAddress.equals(mbr)) {
                    found = true;
                    this.birthViewId = mbr.getVmViewId();
                    this.localAddress.setVmViewId(this.birthViewId);
                    GMSMember me = (GMSMember) this.localAddress.getNetMember();
                    me.setBirthViewId(birthViewId);
                    break;
                }
            }
            if (!found) {
                logger.info("rejecting view (not yet joined)");
                return;
            }
        }
        if (isJoined && isNetworkPartition(newView, true)) {
            if (quorumRequired) {
                Set<InternalDistributedMember> crashes = newView.getActualCrashedMembers(currentView);
                forceDisconnect(LocalizedStrings.Network_partition_detected.toLocalizedString(crashes.size(), crashes));
                return;
            }
        }
        previousView = currentView;
        currentView = newView;
        preparedView = null;
        lastConflictingView = null;
        services.installView(newView);
        if (!isJoined) {
            logger.debug("notifying join thread");
            isJoined = true;
            synchronized (joinResponse) {
                joinResponse.notifyAll();
            }
        }
        if (!newView.getCreator().equals(this.localAddress)) {
            if (newView.shouldBeCoordinator(this.localAddress)) {
                becomeCoordinator();
            } else if (this.isCoordinator) {
                // stop being coordinator
                stopCoordinatorServices();
                this.isCoordinator = false;
            }
        }
        if (!this.isCoordinator) {
            // resend these
            synchronized (viewRequests) {
                for (Iterator<DistributionMessage> it = viewRequests.iterator(); it.hasNext(); ) {
                    DistributionMessage m = it.next();
                    if (m instanceof JoinRequestMessage) {
                        if (currentView.contains(((JoinRequestMessage) m).getMemberID())) {
                            it.remove();
                        }
                    } else if (m instanceof LeaveRequestMessage) {
                        if (!currentView.contains(((LeaveRequestMessage) m).getMemberID())) {
                            it.remove();
                        }
                    } else if (m instanceof RemoveMemberMessage) {
                        if (!currentView.contains(((RemoveMemberMessage) m).getMemberID())) {
                            it.remove();
                        }
                    }
                }
            }
        }
    }
    synchronized (removedMembers) {
        removeMembersFromCollectionIfNotInView(removedMembers, currentView);
    }
    synchronized (leftMembers) {
        removeMembersFromCollectionIfNotInView(leftMembers, currentView);
    }
}
Also used : LeaveRequestMessage(org.apache.geode.distributed.internal.membership.gms.messages.LeaveRequestMessage) InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) RemoveMemberMessage(org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage) DistributionMessage(org.apache.geode.distributed.internal.DistributionMessage) GMSMember(org.apache.geode.distributed.internal.membership.gms.GMSMember) JoinRequestMessage(org.apache.geode.distributed.internal.membership.gms.messages.JoinRequestMessage)

Example 8 with RemoveMemberMessage

use of org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage in project geode by apache.

the class GMSJoinLeaveJUnitTest method testNetworkPartionMessage.

// With the removal of the JoinResponse message from GMSJoinLeave.processJoinRequest (GEODE-870)
// This test now seems to be invalid
// @Test
// public void testJoinResponseMsgWithBecomeCoordinator() throws Exception {
// initMocks(false);
// gmsJoinLeaveMemberId.getNetMember().setPreferredForCoordinator(false);
// JoinRequestMessage reqMsg = new JoinRequestMessage(gmsJoinLeaveMemberId, mockMembers[0], null,
// 56734);
// InternalDistributedMember ids = new InternalDistributedMember("localhost", 97898);
// ids.getNetMember().setPreferredForCoordinator(true);
// gmsJoinLeave.processMessage(reqMsg);
// ArgumentCaptor<JoinResponseMessage> ac = ArgumentCaptor.forClass(JoinResponseMessage.class);
// verify(messenger).send(ac.capture());
//
// assertTrue("Should have asked for becoming a coordinator",
// ac.getValue().getBecomeCoordinator());
// }
@Test
public void testNetworkPartionMessage() throws Exception {
    try {
        initMocks(true);
        System.setProperty(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY, "true");
        gmsJoinLeave.join();
        installView(1, gmsJoinLeaveMemberId, createMemberList(mockMembers[0], mockMembers[1], mockMembers[2], gmsJoinLeaveMemberId, mockMembers[3]));
        for (int i = 1; i < 4; i++) {
            RemoveMemberMessage msg = new RemoveMemberMessage(gmsJoinLeaveMemberId, mockMembers[i], "crashed");
            msg.setSender(gmsJoinLeaveMemberId);
            gmsJoinLeave.processMessage(msg);
        }
        Timeout to = new Timeout(3 * ServiceConfig.MEMBER_REQUEST_COLLECTION_INTERVAL, new Times(1));
        verify(messenger, to).send(isA(NetworkPartitionMessage.class));
    } finally {
        System.getProperties().remove(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY);
    }
}
Also used : NetworkPartitionMessage(org.apache.geode.distributed.internal.membership.gms.messages.NetworkPartitionMessage) RemoveMemberMessage(org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage) Timeout(org.mockito.verification.Timeout) Times(org.mockito.internal.verification.Times) Test(org.junit.Test) MembershipTest(org.apache.geode.test.junit.categories.MembershipTest) IntegrationTest(org.apache.geode.test.junit.categories.IntegrationTest)

Example 9 with RemoveMemberMessage

use of org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage in project geode by apache.

the class GMSJoinLeaveJUnitTest method testBecomeCoordinatorThroughRemove.

@Test
public void testBecomeCoordinatorThroughRemove() throws Exception {
    String reason = "testing";
    initMocks();
    prepareAndInstallView(mockMembers[0], createMemberList(mockMembers[0], gmsJoinLeaveMemberId));
    NetView view = gmsJoinLeave.getView();
    view.add(gmsJoinLeaveMemberId);
    InternalDistributedMember creator = view.getCreator();
    RemoveMemberMessage msg = new RemoveMemberMessage(creator, creator, reason);
    msg.setSender(creator);
    gmsJoinLeave.processMessage(msg);
    assertTrue("Expected becomeCoordinator to be invoked", gmsJoinLeave.isCoordinator());
}
Also used : InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) RemoveMemberMessage(org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage) NetView(org.apache.geode.distributed.internal.membership.NetView) Test(org.junit.Test) MembershipTest(org.apache.geode.test.junit.categories.MembershipTest) IntegrationTest(org.apache.geode.test.junit.categories.IntegrationTest)

Example 10 with RemoveMemberMessage

use of org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage in project geode by apache.

the class GMSJoinLeaveJUnitTest method testViewIgnoredAfterShutdown.

@Test
public void testViewIgnoredAfterShutdown() throws Exception {
    try {
        initMocks(true);
        System.setProperty(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY, "true");
        gmsJoinLeave.join();
        installView(1, gmsJoinLeaveMemberId, createMemberList(mockMembers[0], mockMembers[1], mockMembers[2], gmsJoinLeaveMemberId, mockMembers[3]));
        gmsJoinLeave.stop();
        for (int i = 1; i < 4; i++) {
            RemoveMemberMessage msg = new RemoveMemberMessage(gmsJoinLeaveMemberId, mockMembers[i], "crashed");
            msg.setSender(gmsJoinLeaveMemberId);
            gmsJoinLeave.processMessage(msg);
        }
        Timeout to = new Timeout(2 * ServiceConfig.MEMBER_REQUEST_COLLECTION_INTERVAL, never());
        verify(messenger, to).send(isA(NetworkPartitionMessage.class));
    } finally {
        System.getProperties().remove(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY);
    }
}
Also used : NetworkPartitionMessage(org.apache.geode.distributed.internal.membership.gms.messages.NetworkPartitionMessage) RemoveMemberMessage(org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage) Timeout(org.mockito.verification.Timeout) Test(org.junit.Test) MembershipTest(org.apache.geode.test.junit.categories.MembershipTest) IntegrationTest(org.apache.geode.test.junit.categories.IntegrationTest)

Aggregations

RemoveMemberMessage (org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage)11 IntegrationTest (org.apache.geode.test.junit.categories.IntegrationTest)7 MembershipTest (org.apache.geode.test.junit.categories.MembershipTest)7 Test (org.junit.Test)7 InternalDistributedMember (org.apache.geode.distributed.internal.membership.InternalDistributedMember)5 NetView (org.apache.geode.distributed.internal.membership.NetView)3 NetworkPartitionMessage (org.apache.geode.distributed.internal.membership.gms.messages.NetworkPartitionMessage)2 Timeout (org.mockito.verification.Timeout)2 HashSet (java.util.HashSet)1 DistributionMessage (org.apache.geode.distributed.internal.DistributionMessage)1 GMSMember (org.apache.geode.distributed.internal.membership.gms.GMSMember)1 JoinRequestMessage (org.apache.geode.distributed.internal.membership.gms.messages.JoinRequestMessage)1 LeaveRequestMessage (org.apache.geode.distributed.internal.membership.gms.messages.LeaveRequestMessage)1 Times (org.mockito.internal.verification.Times)1