lucasbru commented on code in PR #22245:
URL: https://github.com/apache/kafka/pull/22245#discussion_r3273195286
##########
group-coordinator/src/main/java/org/apache/kafka/coordinator/group/GroupMetadataManager.java:
##########
@@ -2148,20 +2234,28 @@ private CoordinatorResult<StreamsGroupHeartbeatResult,
CoordinatorRecord> stream
// The assignment is only provided in the following cases:
// 1. The member is joining.
// 2. The member's assignment has been updated.
- if (memberEpoch == 0 || hasAssignedTasksChanged(member,
updatedMember)) {
+ boolean newlyJoinOrAssignmentChanged = memberEpoch == 0 ||
hasAssignedTasksChanged(member, updatedMember);
+ boolean hasReplacedStaticMember = maybeOldMember != null &&
!maybeOldMember.memberId().equals(updatedMember.memberId());
+ boolean userEndpointChanged = hasUserEndpointChanged(maybeOldMember,
updatedMember);
+ if (newlyJoinOrAssignmentChanged) {
response.setActiveTasks(createStreamsGroupHeartbeatResponseTaskIdsFromEpochs(updatedMember.assignedTasks().activeTasksWithEpochs()));
response.setStandbyTasks(createStreamsGroupHeartbeatResponseTaskIds(updatedMember.assignedTasks().standbyTasks()));
response.setWarmupTasks(createStreamsGroupHeartbeatResponseTaskIds(updatedMember.assignedTasks().warmupTasks()));
+ }
+
+ if (newlyJoinOrAssignmentChanged || hasReplacedStaticMember ||
userEndpointChanged) {
group.invalidateCachedEndpointToPartitions(updatedMember.memberId());
- if (updatedMember.userEndpoint().isPresent()) {
- // If no user endpoint is defined, there is no change in the
endpoint information.
- // Otherwise, bump the endpoint information epoch
-
group.setEndpointInformationEpoch(group.endpointInformationEpoch() + 1);
+ if (hasReplacedStaticMember) {
+
group.invalidateCachedEndpointToPartitions(maybeOldMember.memberId());
}
}
+ if (userEndpointChanged || (hasAssignedTasksChanged(member,
updatedMember) && updatedMember.userEndpoint().isPresent())) {
+ group.setEndpointInformationEpoch(group.endpointInformationEpoch()
+ 1);
+ }
Review Comment:
this whole block is a bit hard to follow with three intermediate booleans
whose names read like jargon. Folding in the related suggestions (`isJoining`
reuse, cache `hasAssignedTasksChanged`, drop
`hasReplacedStaticMember`/`maybeOldMember` in favor of a nullable
`replacedStaticMember`), it could be:
```java
boolean assignedTasksChanged = hasAssignedTasksChanged(member,
updatedMember);
boolean endpointChanged = hasUserEndpointChanged(member, updatedMember);
// Echo the assignment back when joining or the assignment changed.
if (isJoining || assignedTasksChanged) {
response.setActiveTasks(...);
response.setStandbyTasks(...);
response.setWarmupTasks(...);
}
// Drop stale per-member endpoint mappings.
if (isJoining || assignedTasksChanged || endpointChanged ||
replacedStaticMember != null) {
group.invalidateCachedEndpointToPartitions(updatedMember.memberId());
if (replacedStaticMember != null) {
group.invalidateCachedEndpointToPartitions(replacedStaticMember.memberId());
}
}
// Bump the group's endpoint epoch so peers refetch endpoint-to-partition
mappings.
if (endpointChanged || (assignedTasksChanged &&
updatedMember.userEndpoint().isPresent())) {
group.setEndpointInformationEpoch(group.endpointInformationEpoch() + 1);
}
```
block-leading comments do the work the named booleans were doing, two cached
expressions instead of three booleans, trivial conditions inlined.
--
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]