You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by ca...@apache.org on 2023/12/20 08:23:00 UTC
(kafka) branch trunk updated: MINOR: Client state machine fix for transition to stable on initial empty assignment (#15033)
This is an automated email from the ASF dual-hosted git repository.
cadonna pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new db8af514264 MINOR: Client state machine fix for transition to stable on initial empty assignment (#15033)
db8af514264 is described below
commit db8af514264491e52d737300bf703d473e3c676a
Author: Lianet Magrans <98...@users.noreply.github.com>
AuthorDate: Wed Dec 20 03:22:54 2023 -0500
MINOR: Client state machine fix for transition to stable on initial empty assignment (#15033)
This includes a fix for ensuring that a member transitions to STABLE when joining a group, in the case where it receives an initial empty assignment.
Reviewer: Bruno Cadonna <ca...@apache.org>
---
.../kafka/clients/consumer/internals/MembershipManagerImpl.java | 6 ++----
.../clients/consumer/internals/MembershipManagerImplTest.java | 8 ++++++++
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImpl.java b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImpl.java
index 62fe07fd32c..2de533eaa2a 100644
--- a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImpl.java
+++ b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImpl.java
@@ -405,10 +405,8 @@ public class MembershipManagerImpl implements MembershipManager, ClusterResource
assignmentUnresolved, currentAssignment);
// Make sure we transition the member back to STABLE if it was RECONCILING (ex.
// member was RECONCILING unresolved assignments that were just removed by the
- // broker).
- if (state == MemberState.RECONCILING) {
- // This is the case where a member was RECONCILING an unresolved
- // assignment that was removed by the broker in a following assignment.
+ // broker), or JOINING (member joining received empty assignment).
+ if (state == MemberState.RECONCILING || state == MemberState.JOINING) {
transitionTo(MemberState.STABLE);
}
}
diff --git a/clients/src/test/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImplTest.java b/clients/src/test/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImplTest.java
index a75b613a17a..f299e4ebe34 100644
--- a/clients/src/test/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImplTest.java
+++ b/clients/src/test/java/org/apache/kafka/clients/consumer/internals/MembershipManagerImplTest.java
@@ -1403,6 +1403,14 @@ public class MembershipManagerImplTest {
assertEquals(MemberState.JOINING, membershipManager.state());
}
+ @Test
+ public void testMemberJoiningTransitionsToStableWhenReceivingEmptyAssignment() {
+ MembershipManagerImpl membershipManager = createMembershipManagerJoiningGroup(null);
+ assertEquals(MemberState.JOINING, membershipManager.state());
+ receiveEmptyAssignment(membershipManager);
+ assertEquals(MemberState.STABLE, membershipManager.state());
+ }
+
private void dropAssignedPartitions() {
SortedSet<TopicPartition> droppedPartitions = new TreeSet<>(MembershipManagerImpl.TOPIC_PARTITION_COMPARATOR);
droppedPartitions.addAll(subscriptionState.assignedPartitions());