You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Guozhang Wang (Jira)" <ji...@apache.org> on 2022/04/21 21:43:00 UTC

[jira] [Created] (KAFKA-13846) Add an overloaded metricOrElseCreate function in Metrics

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)