Guozhang Wang created KAFKA-13846: ------------------------------------- Summary: 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
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.7#820007)