jeffkbkim commented on code in PR #13870: URL: https://github.com/apache/kafka/pull/13870#discussion_r1258999406
########## group-coordinator/src/main/java/org/apache/kafka/coordinator/group/GroupMetadataManager.java: ########## @@ -1043,4 +1221,1331 @@ public void onNewMetadataImage(MetadataImage newImage, MetadataDelta delta) { } }); } + + /** + * Replays GroupMetadataKey/Value to update the soft state of + * the generic group. + * + * @param key A GroupMetadataKey key. + * @param value A GroupMetadataValue record. + */ + public void replay( + GroupMetadataKey key, + GroupMetadataValue value + ) { + String groupId = key.group(); + + if (value == null) { + // Tombstone. Group should be removed. + groups.remove(groupId); + } else { + List<GenericGroupMember> loadedMembers = new ArrayList<>(); + for (GroupMetadataValue.MemberMetadata member : value.members()) { + int rebalanceTimeout = member.rebalanceTimeout() == -1 ? + member.sessionTimeout() : member.rebalanceTimeout(); + + JoinGroupRequestProtocolCollection supportedProtocols = new JoinGroupRequestProtocolCollection(); + supportedProtocols.add(new JoinGroupRequestProtocol() + .setName(value.protocol()) + .setMetadata(member.subscription())); + + GenericGroupMember loadedMember = new GenericGroupMember( + member.memberId(), + Optional.ofNullable(member.groupInstanceId()), + member.clientId(), + member.clientHost(), + rebalanceTimeout, + member.sessionTimeout(), + value.protocolType(), + supportedProtocols, + member.assignment() + ); + + loadedMembers.add(loadedMember); + } + + String protocolType = value.protocolType(); + + GenericGroup genericGroup = new GenericGroup( + this.logContext, + groupId, + loadedMembers.isEmpty() ? EMPTY : STABLE, + time, + value.generation(), + protocolType == null || protocolType.isEmpty() ? Optional.empty() : Optional.of(protocolType), + Optional.ofNullable(value.protocol()), + Optional.ofNullable(value.leader()), + value.currentStateTimestamp() == -1 ? Optional.empty() : Optional.of(value.currentStateTimestamp()) + ); + + loadedMembers.forEach(member -> { + genericGroup.add(member, null); + log.info("Loaded member {} in group {} with generation {}.", Review Comment: is your suggestion to iterate through all groups & members and log each member after loading a partition is complete? -- 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: jira-unsubscr...@kafka.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org