lianetm commented on code in PR #16200:
URL: https://github.com/apache/kafka/pull/16200#discussion_r1681564234
##########
clients/src/test/java/org/apache/kafka/clients/consumer/internals/HeartbeatRequestManagerTest.java:
##########
@@ -514,61 +536,76 @@ private void assertNextHeartbeatTiming(long
expectedTimeToNextHeartbeatMs) {
@Test
public void testHeartbeatState() {
+ CommitRequestManager commitRequestManager =
mock(CommitRequestManager.class);
+ mockJoiningMemberData(false);
+
+ heartbeatState = new HeartbeatState(
+ subscriptions,
+ membershipManager,
+ DEFAULT_MAX_POLL_INTERVAL_MS
+ );
+
+ createHeartbeatStateWithZeroHeartbeatInterval();
+
// The initial ConsumerGroupHeartbeatRequest sets most fields to their
initial empty values
ConsumerGroupHeartbeatRequestData data =
heartbeatState.buildRequestData();
- assertEquals(ConsumerTestBuilder.DEFAULT_GROUP_ID, data.groupId());
+ assertEquals(DEFAULT_GROUP_ID, data.groupId());
assertEquals("", data.memberId());
assertEquals(0, data.memberEpoch());
assertNull(data.instanceId());
- assertEquals(ConsumerTestBuilder.DEFAULT_MAX_POLL_INTERVAL_MS,
data.rebalanceTimeoutMs());
+ assertEquals(DEFAULT_MAX_POLL_INTERVAL_MS, data.rebalanceTimeoutMs());
assertEquals(Collections.emptyList(), data.subscribedTopicNames());
- assertEquals(ConsumerTestBuilder.DEFAULT_REMOTE_ASSIGNOR,
data.serverAssignor());
+ assertEquals(DEFAULT_REMOTE_ASSIGNOR, data.serverAssignor());
assertEquals(Collections.emptyList(), data.topicPartitions());
- membershipManager.onHeartbeatRequestSent();
assertEquals(MemberState.UNSUBSCRIBED, membershipManager.state());
// Mock a response from the group coordinator, that supplies the
member ID and a new epoch
- mockStableMember();
+ when(subscriptions.hasAutoAssignedPartitions()).thenReturn(true);
+ when(subscriptions.rebalanceListener()).thenReturn(Optional.empty());
+ ConsumerGroupHeartbeatResponse rs1 = new
ConsumerGroupHeartbeatResponse(new ConsumerGroupHeartbeatResponseData()
+ .setHeartbeatIntervalMs(DEFAULT_HEARTBEAT_INTERVAL_MS)
+ .setMemberId(DEFAULT_MEMBER_ID)
+ .setMemberEpoch(DEFAULT_MEMBER_EPOCH)
+ .setAssignment(new
ConsumerGroupHeartbeatResponseData.Assignment())
+ );
+
when(commitRequestManager.maybeAutoCommitSyncBeforeRevocation(anyLong())).thenReturn(CompletableFuture.completedFuture(null));
+ mockDefaultMemberData(false);
data = heartbeatState.buildRequestData();
- assertEquals(ConsumerTestBuilder.DEFAULT_GROUP_ID, data.groupId());
- assertEquals(memberId, data.memberId());
+ assertEquals(DEFAULT_GROUP_ID, data.groupId());
+ assertEquals(DEFAULT_MEMBER_ID, data.memberId());
assertEquals(1, data.memberEpoch());
assertNull(data.instanceId());
assertEquals(-1, data.rebalanceTimeoutMs());
assertNull(data.subscribedTopicNames());
assertNull(data.serverAssignor());
- assertEquals(data.topicPartitions(), Collections.emptyList());
- membershipManager.onHeartbeatRequestSent();
+ assertEquals(Collections.emptyList(), data.topicPartitions());
assertEquals(MemberState.STABLE, membershipManager.state());
// Join the group and subscribe to a topic, but the response has not
yet been received
String topic = "topic1";
subscriptions.subscribe(Collections.singleton(topic),
Optional.empty());
- membershipManager.onSubscriptionUpdated();
- membershipManager.transitionToFenced(); // And indirect way of moving
to JOINING state
+
when(subscriptions.subscription()).thenReturn(Collections.singleton(topic));
+ mockFencedToJoiningMemberData();
data = heartbeatState.buildRequestData();
- assertEquals(ConsumerTestBuilder.DEFAULT_GROUP_ID, data.groupId());
- assertEquals(memberId, data.memberId());
+ assertEquals(DEFAULT_GROUP_ID, data.groupId());
+ assertEquals(DEFAULT_MEMBER_ID, data.memberId());
assertEquals(0, data.memberEpoch());
assertNull(data.instanceId());
assertEquals(DEFAULT_MAX_POLL_INTERVAL_MS, data.rebalanceTimeoutMs());
assertEquals(Collections.singletonList(topic),
data.subscribedTopicNames());
- assertEquals(ConsumerTestBuilder.DEFAULT_REMOTE_ASSIGNOR,
data.serverAssignor());
+ assertEquals(DEFAULT_REMOTE_ASSIGNOR, data.serverAssignor());
assertEquals(Collections.emptyList(), data.topicPartitions());
- membershipManager.onHeartbeatRequestSent();
assertEquals(MemberState.JOINING, membershipManager.state());
Review Comment:
similar, no value anymore. We should remove this (and the expectation we set
with the value on `mockFencedToJoiningMemberData`)
##########
clients/src/test/java/org/apache/kafka/clients/consumer/internals/HeartbeatRequestManagerTest.java:
##########
@@ -514,61 +536,76 @@ private void assertNextHeartbeatTiming(long
expectedTimeToNextHeartbeatMs) {
@Test
public void testHeartbeatState() {
+ CommitRequestManager commitRequestManager =
mock(CommitRequestManager.class);
+ mockJoiningMemberData(false);
+
+ heartbeatState = new HeartbeatState(
+ subscriptions,
+ membershipManager,
+ DEFAULT_MAX_POLL_INTERVAL_MS
+ );
+
+ createHeartbeatStateWithZeroHeartbeatInterval();
+
// The initial ConsumerGroupHeartbeatRequest sets most fields to their
initial empty values
ConsumerGroupHeartbeatRequestData data =
heartbeatState.buildRequestData();
- assertEquals(ConsumerTestBuilder.DEFAULT_GROUP_ID, data.groupId());
+ assertEquals(DEFAULT_GROUP_ID, data.groupId());
assertEquals("", data.memberId());
assertEquals(0, data.memberEpoch());
assertNull(data.instanceId());
- assertEquals(ConsumerTestBuilder.DEFAULT_MAX_POLL_INTERVAL_MS,
data.rebalanceTimeoutMs());
+ assertEquals(DEFAULT_MAX_POLL_INTERVAL_MS, data.rebalanceTimeoutMs());
assertEquals(Collections.emptyList(), data.subscribedTopicNames());
- assertEquals(ConsumerTestBuilder.DEFAULT_REMOTE_ASSIGNOR,
data.serverAssignor());
+ assertEquals(DEFAULT_REMOTE_ASSIGNOR, data.serverAssignor());
assertEquals(Collections.emptyList(), data.topicPartitions());
- membershipManager.onHeartbeatRequestSent();
assertEquals(MemberState.UNSUBSCRIBED, membershipManager.state());
// Mock a response from the group coordinator, that supplies the
member ID and a new epoch
- mockStableMember();
+ when(subscriptions.hasAutoAssignedPartitions()).thenReturn(true);
+ when(subscriptions.rebalanceListener()).thenReturn(Optional.empty());
+ ConsumerGroupHeartbeatResponse rs1 = new
ConsumerGroupHeartbeatResponse(new ConsumerGroupHeartbeatResponseData()
+ .setHeartbeatIntervalMs(DEFAULT_HEARTBEAT_INTERVAL_MS)
+ .setMemberId(DEFAULT_MEMBER_ID)
+ .setMemberEpoch(DEFAULT_MEMBER_EPOCH)
+ .setAssignment(new
ConsumerGroupHeartbeatResponseData.Assignment())
+ );
+
when(commitRequestManager.maybeAutoCommitSyncBeforeRevocation(anyLong())).thenReturn(CompletableFuture.completedFuture(null));
+ mockDefaultMemberData(false);
data = heartbeatState.buildRequestData();
- assertEquals(ConsumerTestBuilder.DEFAULT_GROUP_ID, data.groupId());
- assertEquals(memberId, data.memberId());
+ assertEquals(DEFAULT_GROUP_ID, data.groupId());
+ assertEquals(DEFAULT_MEMBER_ID, data.memberId());
assertEquals(1, data.memberEpoch());
assertNull(data.instanceId());
assertEquals(-1, data.rebalanceTimeoutMs());
assertNull(data.subscribedTopicNames());
assertNull(data.serverAssignor());
- assertEquals(data.topicPartitions(), Collections.emptyList());
- membershipManager.onHeartbeatRequestSent();
+ assertEquals(Collections.emptyList(), data.topicPartitions());
assertEquals(MemberState.STABLE, membershipManager.state());
// Join the group and subscribe to a topic, but the response has not
yet been received
String topic = "topic1";
subscriptions.subscribe(Collections.singleton(topic),
Optional.empty());
- membershipManager.onSubscriptionUpdated();
- membershipManager.transitionToFenced(); // And indirect way of moving
to JOINING state
+
when(subscriptions.subscription()).thenReturn(Collections.singleton(topic));
+ mockFencedToJoiningMemberData();
data = heartbeatState.buildRequestData();
- assertEquals(ConsumerTestBuilder.DEFAULT_GROUP_ID, data.groupId());
- assertEquals(memberId, data.memberId());
+ assertEquals(DEFAULT_GROUP_ID, data.groupId());
+ assertEquals(DEFAULT_MEMBER_ID, data.memberId());
assertEquals(0, data.memberEpoch());
assertNull(data.instanceId());
assertEquals(DEFAULT_MAX_POLL_INTERVAL_MS, data.rebalanceTimeoutMs());
assertEquals(Collections.singletonList(topic),
data.subscribedTopicNames());
- assertEquals(ConsumerTestBuilder.DEFAULT_REMOTE_ASSIGNOR,
data.serverAssignor());
+ assertEquals(DEFAULT_REMOTE_ASSIGNOR, data.serverAssignor());
assertEquals(Collections.emptyList(), data.topicPartitions());
- membershipManager.onHeartbeatRequestSent();
assertEquals(MemberState.JOINING, membershipManager.state());
- membershipManager.transitionToFenced();
data = heartbeatState.buildRequestData();
- assertEquals(ConsumerTestBuilder.DEFAULT_GROUP_ID, data.groupId());
- assertEquals(memberId, data.memberId());
+ assertEquals(DEFAULT_GROUP_ID, data.groupId());
+ assertEquals(DEFAULT_MEMBER_ID, data.memberId());
assertEquals(0, data.memberEpoch());
assertNull(data.instanceId());
assertEquals(DEFAULT_MAX_POLL_INTERVAL_MS, data.rebalanceTimeoutMs());
assertEquals(Collections.singletonList(topic),
data.subscribedTopicNames());
- assertEquals(ConsumerTestBuilder.DEFAULT_REMOTE_ASSIGNOR,
data.serverAssignor());
+ assertEquals(DEFAULT_REMOTE_ASSIGNOR, data.serverAssignor());
assertEquals(Collections.emptyList(), data.topicPartitions());
- membershipManager.onHeartbeatRequestSent();
assertEquals(MemberState.JOINING, membershipManager.state());
Review Comment:
ditto
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]