Search in sources :

Example 16 with JoinGroupRequest

use of org.apache.kafka.common.requests.JoinGroupRequest in project kafka by apache.

the class AbstractCoordinatorTest method testJoinGroupRequestWithMemberIdRequired.

@Test
public void testJoinGroupRequestWithMemberIdRequired() {
    setupCoordinator();
    mockClient.prepareResponse(groupCoordinatorResponse(node, Errors.NONE));
    coordinator.ensureCoordinatorReady(mockTime.timer(0));
    mockClient.prepareResponse(joinGroupFollowerResponse(defaultGeneration, memberId, JoinGroupRequest.UNKNOWN_MEMBER_ID, Errors.MEMBER_ID_REQUIRED));
    mockClient.prepareResponse(body -> {
        if (!(body instanceof JoinGroupRequest)) {
            return false;
        }
        JoinGroupRequest joinGroupRequest = (JoinGroupRequest) body;
        return joinGroupRequest.data().memberId().equals(memberId);
    }, joinGroupResponse(Errors.UNKNOWN_MEMBER_ID));
    RequestFuture<ByteBuffer> future = coordinator.sendJoinGroupRequest();
    assertTrue(consumerClient.poll(future, mockTime.timer(REQUEST_TIMEOUT_MS)));
    assertEquals(Errors.MEMBER_ID_REQUIRED.message(), future.exception().getMessage());
    assertTrue(coordinator.rejoinNeededOrPending());
    assertTrue(coordinator.hasValidMemberId());
    assertTrue(coordinator.hasMatchingGenerationId(defaultGeneration));
    future = coordinator.sendJoinGroupRequest();
    assertTrue(consumerClient.poll(future, mockTime.timer(REBALANCE_TIMEOUT_MS)));
}
Also used : JoinGroupRequest(org.apache.kafka.common.requests.JoinGroupRequest) ByteBuffer(java.nio.ByteBuffer) Test(org.junit.jupiter.api.Test)

Example 17 with JoinGroupRequest

use of org.apache.kafka.common.requests.JoinGroupRequest in project kafka by apache.

the class AbstractCoordinatorTest method joinGroupWithProtocolTypeAndName.

private boolean joinGroupWithProtocolTypeAndName(String joinGroupResponseProtocolType, String syncGroupResponseProtocolType, String syncGroupResponseProtocolName) {
    setupCoordinator();
    mockClient.reset();
    mockClient.prepareResponse(groupCoordinatorResponse(node, Errors.NONE));
    coordinator.ensureCoordinatorReady(mockTime.timer(0));
    mockClient.prepareResponse(body -> {
        if (!(body instanceof JoinGroupRequest)) {
            return false;
        }
        JoinGroupRequest joinGroupRequest = (JoinGroupRequest) body;
        return joinGroupRequest.data().protocolType().equals(PROTOCOL_TYPE);
    }, joinGroupFollowerResponse(defaultGeneration, memberId, "memberid", Errors.NONE, joinGroupResponseProtocolType));
    mockClient.prepareResponse(body -> {
        if (!(body instanceof SyncGroupRequest)) {
            return false;
        }
        SyncGroupRequest syncGroupRequest = (SyncGroupRequest) body;
        return syncGroupRequest.data().protocolType().equals(PROTOCOL_TYPE) && syncGroupRequest.data().protocolName().equals(PROTOCOL_NAME);
    }, syncGroupResponse(Errors.NONE, syncGroupResponseProtocolType, syncGroupResponseProtocolName));
    return coordinator.joinGroupIfNeeded(mockTime.timer(5000L));
}
Also used : JoinGroupRequest(org.apache.kafka.common.requests.JoinGroupRequest) SyncGroupRequest(org.apache.kafka.common.requests.SyncGroupRequest)

Example 18 with JoinGroupRequest

use of org.apache.kafka.common.requests.JoinGroupRequest in project kafka by apache.

the class AbstractCoordinatorTest method testWakeupAfterJoinGroupSentExternalCompletion.

@Test
public void testWakeupAfterJoinGroupSentExternalCompletion() throws Exception {
    setupCoordinator();
    mockClient.prepareResponse(groupCoordinatorResponse(node, Errors.NONE));
    mockClient.prepareResponse(new MockClient.RequestMatcher() {

        private int invocations = 0;

        @Override
        public boolean matches(AbstractRequest body) {
            invocations++;
            boolean isJoinGroupRequest = body instanceof JoinGroupRequest;
            if (isJoinGroupRequest && invocations == 1)
                // simulate wakeup before the request returns
                throw new WakeupException();
            return isJoinGroupRequest;
        }
    }, joinGroupFollowerResponse(1, memberId, leaderId, Errors.NONE));
    mockClient.prepareResponse(syncGroupResponse(Errors.NONE));
    AtomicBoolean heartbeatReceived = prepareFirstHeartbeat();
    try {
        coordinator.ensureActiveGroup();
        fail("Should have woken up from ensureActiveGroup()");
    } catch (WakeupException ignored) {
    }
    assertEquals(1, coordinator.onJoinPrepareInvokes);
    assertEquals(0, coordinator.onJoinCompleteInvokes);
    assertFalse(heartbeatReceived.get());
    // the join group completes in this poll()
    consumerClient.poll(mockTime.timer(0));
    coordinator.ensureActiveGroup();
    assertEquals(1, coordinator.onJoinPrepareInvokes);
    assertEquals(1, coordinator.onJoinCompleteInvokes);
    awaitFirstHeartbeat(heartbeatReceived);
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) JoinGroupRequest(org.apache.kafka.common.requests.JoinGroupRequest) AbstractRequest(org.apache.kafka.common.requests.AbstractRequest) WakeupException(org.apache.kafka.common.errors.WakeupException) MockClient(org.apache.kafka.clients.MockClient) Test(org.junit.jupiter.api.Test)

Example 19 with JoinGroupRequest

use of org.apache.kafka.common.requests.JoinGroupRequest in project kafka by apache.

the class AbstractCoordinatorTest method testWakeupAfterJoinGroupReceived.

@Test
public void testWakeupAfterJoinGroupReceived() throws Exception {
    setupCoordinator();
    mockClient.prepareResponse(groupCoordinatorResponse(node, Errors.NONE));
    mockClient.prepareResponse(body -> {
        boolean isJoinGroupRequest = body instanceof JoinGroupRequest;
        if (isJoinGroupRequest)
            // wakeup after the request returns
            consumerClient.wakeup();
        return isJoinGroupRequest;
    }, joinGroupFollowerResponse(1, memberId, leaderId, Errors.NONE));
    mockClient.prepareResponse(syncGroupResponse(Errors.NONE));
    AtomicBoolean heartbeatReceived = prepareFirstHeartbeat();
    try {
        coordinator.ensureActiveGroup();
        fail("Should have woken up from ensureActiveGroup()");
    } catch (WakeupException ignored) {
    }
    assertEquals(1, coordinator.onJoinPrepareInvokes);
    assertEquals(0, coordinator.onJoinCompleteInvokes);
    assertFalse(heartbeatReceived.get());
    coordinator.ensureActiveGroup();
    assertEquals(1, coordinator.onJoinPrepareInvokes);
    assertEquals(1, coordinator.onJoinCompleteInvokes);
    awaitFirstHeartbeat(heartbeatReceived);
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) JoinGroupRequest(org.apache.kafka.common.requests.JoinGroupRequest) WakeupException(org.apache.kafka.common.errors.WakeupException) Test(org.junit.jupiter.api.Test)

Aggregations

JoinGroupRequest (org.apache.kafka.common.requests.JoinGroupRequest)19 Test (org.junit.jupiter.api.Test)10 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)8 MockClient (org.apache.kafka.clients.MockClient)8 WakeupException (org.apache.kafka.common.errors.WakeupException)8 AbstractRequest (org.apache.kafka.common.requests.AbstractRequest)8 Test (org.junit.Test)4 ByteBuffer (java.nio.ByteBuffer)3 Node (org.apache.kafka.common.Node)3 ArrayList (java.util.ArrayList)2 Collections.emptyList (java.util.Collections.emptyList)2 Collections.singletonList (java.util.Collections.singletonList)2 HashSet (java.util.HashSet)2 List (java.util.List)2 TopicPartition (org.apache.kafka.common.TopicPartition)2 JoinGroupRequestData (org.apache.kafka.common.message.JoinGroupRequestData)2 SyncGroupRequest (org.apache.kafka.common.requests.SyncGroupRequest)2 HashMap (java.util.HashMap)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 ConsumerPartitionAssignor (org.apache.kafka.clients.consumer.ConsumerPartitionAssignor)1