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)

Reply via email to