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)