[ https://issues.apache.org/jira/browse/KAFKA-13846?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17566989#comment-17566989 ]
Guozhang Wang commented on KAFKA-13846: --------------------------------------- Hi Jose the PR has been merged actually so we should close this ticket. I will go ahead and do it. > Add an overloaded metricOrElseCreate function in Metrics > -------------------------------------------------------- > > Key: KAFKA-13846 > URL: https://issues.apache.org/jira/browse/KAFKA-13846 > Project: Kafka > Issue Type: Improvement > Components: metrics > Reporter: Guozhang Wang > Assignee: Sagar Rao > Priority: Major > Labels: newbie > > The `Metrics` registry is often used by concurrent threads, however it's > get/create APIs are not well suited for it. A common pattern from the user > today is: > {code} > metric = metrics.metric(metricName); > if (metric == null) { > try { > metrics.createMetric(..) > } catch (IllegalArgumentException e){ > // another thread may create the metric at the mean time > } > } > {code} > Otherwise the caller would need to synchronize the whole block trying to get > the metric. However, the `createMetric` function call itself indeed > synchronize internally on updating the metric map. > So we could consider adding a metricOrElseCreate function which is similar to > createMetric, but instead of throwing an illegal argument exception within > the internal synchronization block, it would just return the already existing > metric. -- This message was sent by Atlassian Jira (v8.20.10#820010)