FrankYang0529 commented on code in PR #20781:
URL: https://github.com/apache/kafka/pull/20781#discussion_r2468365689
##########
group-coordinator/src/test/java/org/apache/kafka/coordinator/group/modern/consumer/CurrentAssignmentBuilderTest.java:
##########
@@ -498,6 +498,81 @@ public void
testUnrevokedPartitionsToUnreleasedPartitions() {
);
}
+ @Test
+ public void
testUnrevokedPartitionsToStableWithReturnedPartitionsPendingRevocation() {
+ String topic1 = "topic1";
+ String topic2 = "topic2";
+ Uuid topicId1 = Uuid.randomUuid();
+ Uuid topicId2 = Uuid.randomUuid();
+
+ CoordinatorMetadataImage metadataImage = new MetadataImageBuilder()
+ .addTopic(topicId1, topic1, 10)
+ .addTopic(topicId2, topic2, 10)
+ .buildCoordinatorMetadataImage();
+
+ ConsumerGroupMember member = new ConsumerGroupMember.Builder("member")
+ .setState(MemberState.UNREVOKED_PARTITIONS)
+ .setMemberEpoch(10)
+ .setPreviousMemberEpoch(10)
+ .setSubscribedTopicNames(List.of(topic1, topic2))
+ .setAssignedPartitions(mkAssignment(
+ mkTopicAssignment(topicId1, 2, 3),
+ mkTopicAssignment(topicId2, 5, 6)))
+ .setPartitionsPendingRevocation(mkAssignment(
+ // Partition 4 is pending revocation by the member but is back
in the latest target
+ // assignment.
+ mkTopicAssignment(topicId1, 4)))
+ .build();
+
+ ConsumerGroupMember updatedMember = new
CurrentAssignmentBuilder(member)
+ .withMetadataImage(metadataImage)
+ .withTargetAssignment(12, new Assignment(mkAssignment(
+ mkTopicAssignment(topicId1, 2, 3, 4),
+ mkTopicAssignment(topicId2, 5, 6, 7))))
+ .withCurrentPartitionEpoch((topicId, partitionId) -> {
+ if (topicId.equals(topicId1)) {
+ // Partitions 2 and 3 are in the member's current
assignment.
+ // Partition 4 is pending revocation by the member.
+ switch (partitionId) {
+ case 2:
+ case 3:
+ case 4:
+ return 10;
+ }
+ } else if (topicId.equals(topicId2)) {
+ // Partitions 5 and 6 are in the member's current
assignment.
+ switch (partitionId) {
+ case 5:
+ case 6:
+ return 10;
+ }
+ }
+ return -1;
+ })
+ .withOwnedTopicPartitions(Arrays.asList(
+ new ConsumerGroupHeartbeatRequestData.TopicPartitions()
+ .setTopicId(topicId1)
+ .setPartitions(Arrays.asList(2, 3)),
+ new ConsumerGroupHeartbeatRequestData.TopicPartitions()
+ .setTopicId(topicId2)
+ .setPartitions(Arrays.asList(5, 6))))
+ .build();
+
+ assertEquals(
+ new ConsumerGroupMember.Builder("member")
+ .setState(MemberState.STABLE)
+ .setMemberEpoch(12)
Review Comment:
I’m wondering if there’s any specific reason behind using 12 as the next
member epoch?
--
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]