wilmerdooley opened a new pull request, #22610:
URL: https://github.com/apache/kafka/pull/22610

   ## Description
   
   `MirrorCheckpointTask` previously treated the absence of a consumer group 
from `idleConsumerGroupsOffset` as evidence that the group was new on the 
target cluster and unconditionally synced the converted upstream offsets for 
it. In practice this also covered groups that were actively being consumed on 
the target (e.g. `STABLE`) but were momentarily not present in the snapshot 
because the group transitioned out of `EMPTY` between 
`refreshIdleConsumerGroupOffset` calls. The result was that active consumers 
could be rewound, or, when the older offset was no longer retained, reset to 
`earliest`/`latest` and either re-read or skip messages.
   
   This change tracks the last observed `GroupState` of each target consumer 
group alongside the existing offset snapshot, and `syncGroupOffset` now only 
syncs offsets for groups reported as `DEAD` (new on the target) or `EMPTY` (and 
only when an offset snapshot for them is available). Active groups are skipped, 
and the maps are reset at the start of every refresh and in a `finally` block 
after syncing so a stale snapshot cannot be applied if the group has since 
become active. A transient failure to refresh a group's state or offsets (e.g. 
a `listConsumerGroupOffsets` timeout) now leaves the group absent from both 
maps, so it is also skipped rather than synced based on stale information. The 
diff also adds a `DEAD`-state test and updates the existing tests to populate 
the new state map.
   
   Delete this text and replace it with a detailed description of your change. 
The
   PR title and body will become the squashed commit message.
   
   If you would like to tag individuals, add some commentary, upload images, or
   include other supplemental information that should not be part of the 
eventual
   commit message, please use a separate comment.
   
   If applicable, please include a summary of the testing strategy (including
   rationale) for the proposed change. Unit and/or integration tests are 
expected
   for any behavior change and system tests should be considered for larger
   changes.
   
   ### Testing strategy
   
   Unit tests in `MirrorCheckpointTaskTest` are updated to populate the new
   `targetConsumerGroupStates` map for the existing `testSyncOffset` and
   `testSyncOffsetForTargetGroupWithNullOffsetAndMetadata` cases, and a new
   `testSyncOffsetForNewGroupOnTarget` test exercises the `DEAD` path that 
creates
   a group on the target by syncing the converted upstream offsets.
   
   - [ ] Tests added or updated that fail before the change and pass after.
   - [x] Tests added or updated for the new `GroupState`-based gating logic and
         the snapshot reset in `refreshIdleConsumerGroupOffset` /
         `syncGroupOffset`.
   - [ ] Integration/system tests added or updated.
   - [ ] Documentation updated.
   - [ ] Compatibility considerations noted (no public API changes; a new 
package-private constructor was added for testing).
   
   JIRA: https://issues.apache.org/jira/browse/KAFKA-19794


-- 
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]

Reply via email to