[ https://issues.apache.org/jira/browse/KAFKA-13777?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Luke Chen resolved KAFKA-13777. ------------------------------- Resolution: Fixed > Fix FetchResponse#responseData: Assignment of lazy-initialized members should > be the last step with double-checked locking > -------------------------------------------------------------------------------------------------------------------------- > > Key: KAFKA-13777 > URL: https://issues.apache.org/jira/browse/KAFKA-13777 > Project: Kafka > Issue Type: Bug > Components: clients > Affects Versions: 3.0.1 > Reporter: YunKui Lu > Priority: Minor > Fix For: 3.3.0 > > > Assignment of lazy-initialized members should be the last step with > double-checked locking. > now: > > {code:java} > public LinkedHashMap<TopicPartition, FetchResponseData.PartitionData> > responseData(Map<Uuid, String> topicNames, short version) { > if (responseData == null) { > synchronized (this) { > if (responseData == null) { > responseData = new LinkedHashMap<>(); > data.responses().forEach(topicResponse -> { > String name; > if (version < 13) { > name = topicResponse.topic(); > } else { > name = topicNames.get(topicResponse.topicId()); > } > if (name != null) { > topicResponse.partitions().forEach(partition -> > responseData.put(new TopicPartition(name, > partition.partitionIndex()), partition)); > } > }); > } > } > } > return responseData; > } {code} > maybe should: > > > {code:java} > public LinkedHashMap<TopicPartition, FetchResponseData.PartitionData> > responseData(Map<Uuid, String> topicNames, short version) { > if (responseData == null) { > synchronized (this) { > if (responseData == null) { > // *** change 1 *** > final LinkedHashMap<TopicPartition, > FetchResponseData.PartitionData> responseDataTmp = new LinkedHashMap<>(); > data.responses().forEach(topicResponse -> { > String name; > if (version < 13) { > name = topicResponse.topic(); > } else { > name = topicNames.get(topicResponse.topicId()); > } > if (name != null) { > topicResponse.partitions().forEach(partition -> > // *** change 2 *** > responseDataTmp.put(new > TopicPartition(name, partition.partitionIndex()), partition)); > } > }); > // *** change 3 *** > responseData = responseDataTmp; > } > } > } > return responseData; > } {code} > > -- This message was sent by Atlassian Jira (v8.20.1#820001)