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)