jeffkbkim commented on code in PR #14467: URL: https://github.com/apache/kafka/pull/14467#discussion_r1349382254
########## group-coordinator/src/main/java/org/apache/kafka/coordinator/group/OffsetMetadataManager.java: ########## @@ -544,6 +579,100 @@ public OffsetFetchResponseData.OffsetFetchResponseGroup fetchAllOffsets( .setTopics(topicResponses); } + /** + * Remove expired offsets for group. + * + * @param groupId The group id. + * @param records The list of records to populate with offset commit tombstone records. + * + * @return True if no offsets exist or if all offsets expired, false otherwise. + */ + public boolean cleanupExpiredOffsets(String groupId, List<Record> records) { + TimelineHashMap<String, TimelineHashMap<Integer, OffsetAndMetadata>> offsetsByTopic = offsetsByGroup.get(groupId); + if (offsetsByTopic == null) { + return true; + } + + // We expect the group to exist. + Group group = groupMetadataManager.group(groupId); + Set<TopicPartition> expiredPartitions = new HashSet<>(); + long currentTimestamp = time.milliseconds(); + Optional<OffsetExpirationCondition> offsetExpirationCondition = group.offsetExpirationCondition(); + + if (!offsetExpirationCondition.isPresent()) { + return false; + } + + AtomicBoolean hasAllOffsetsExpired = new AtomicBoolean(true); + OffsetExpirationCondition condition = offsetExpirationCondition.get(); + + offsetsByTopic.forEach((topic, partitions) -> { + if (!group.isSubscribedToTopic(topic, false)) { + partitions.forEach((partition, offsetAndMetadata) -> { + if (condition.isOffsetExpired(offsetAndMetadata, currentTimestamp, config.offsetsRetentionMs)) { + expiredPartitions.add(appendOffsetCommitTombstone(groupId, topic, partition, records)); + } else { + hasAllOffsetsExpired.set(false); + } + }); + } else { + hasAllOffsetsExpired.set(false); + } + }); + + log.debug("[GroupId {}] Expiring offsets: {}", groupId, expiredPartitions); Review Comment: changed to info and to only log when there are expired partitions. What do you mean by format, as in just log the size? -- 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