File tree 2 files changed +29
-1
lines changed
main/java/org/apache/kafka/clients/consumer/internals
test/java/org/apache/kafka/clients/consumer/internals
2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -354,7 +354,13 @@ private boolean isNotInGroup() {
354
354
* @param listener Listener to invoke.
355
355
*/
356
356
public void registerStateListener (MemberStateListener listener ) {
357
- stateUpdatesListeners .add (Objects .requireNonNull (listener , "State updates listener cannot be null" ));
357
+ Objects .requireNonNull (listener , "State updates listener cannot be null" );
358
+ for (MemberStateListener registeredListener : stateUpdatesListeners ) {
359
+ if (registeredListener == listener ) {
360
+ throw new IllegalArgumentException ("Listener is already registered." );
361
+ }
362
+ }
363
+ stateUpdatesListeners .add (listener );
358
364
}
359
365
360
366
/**
Original file line number Diff line number Diff line change @@ -1458,6 +1458,28 @@ public void testMaybeRejoinStaleMember() {
1458
1458
assertEquals (StreamsGroupHeartbeatRequest .JOIN_GROUP_MEMBER_EPOCH , membershipManager .memberEpoch ());
1459
1459
}
1460
1460
1461
+ @ Test
1462
+ public void testForDuplicateRegistrationOfSameStateListener () {
1463
+ final MemberStateListener listener1 = new MemberStateListener () {
1464
+
1465
+ @ Override
1466
+ public void onMemberEpochUpdated (Optional <Integer > memberEpoch , String memberId ) {
1467
+ }
1468
+ };
1469
+ final MemberStateListener listener2 = new MemberStateListener () {
1470
+
1471
+ @ Override
1472
+ public void onMemberEpochUpdated (Optional <Integer > memberEpoch , String memberId ) {
1473
+ }
1474
+ };
1475
+
1476
+ membershipManager .registerStateListener (listener1 );
1477
+ membershipManager .registerStateListener (listener2 );
1478
+ final Exception exception =
1479
+ assertThrows (IllegalArgumentException .class , () -> membershipManager .registerStateListener (listener1 ));
1480
+ assertEquals ("Listener is already registered." , exception .getMessage ());
1481
+ }
1482
+
1461
1483
private void verifyThatNoTasksHaveBeenRevoked () {
1462
1484
verify (streamsRebalanceEventsProcessor , never ()).requestOnTasksRevokedCallbackInvocation (any ());
1463
1485
verify (subscriptionState , never ()).markPendingRevocation (any ());
You can’t perform that action at this time.
0 commit comments