This is an automated email from the ASF dual-hosted git repository. forwardxu pushed a commit to branch release-0.12.1 in repository https://gitbox.apache.org/repos/asf/hudi.git
commit 8d692f38c14f8d6e6fcb2f5fa1b159d0e5ade678 Author: Bingeng Huang <304979...@qq.com> AuthorDate: Thu Oct 20 01:32:45 2022 +0800 [HUDI-5041] Fix lock metric register confict error (#6968) Co-authored-by: hbg <bingeng.hu...@shopee.com> (cherry picked from commit e6eb4e6f683ca9f66cdcca2d63eeb5a1a8d81241) --- .../transaction/lock/metrics/HoodieLockMetrics.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/transaction/lock/metrics/HoodieLockMetrics.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/transaction/lock/metrics/HoodieLockMetrics.java index 6ea7a1ae14..c33a86bfbe 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/transaction/lock/metrics/HoodieLockMetrics.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/transaction/lock/metrics/HoodieLockMetrics.java @@ -18,15 +18,15 @@ package org.apache.hudi.client.transaction.lock.metrics; -import org.apache.hudi.common.util.HoodieTimer; -import org.apache.hudi.config.HoodieWriteConfig; -import org.apache.hudi.metrics.Metrics; - import com.codahale.metrics.Counter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.SlidingWindowReservoir; import com.codahale.metrics.Timer; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.config.HoodieWriteConfig; +import org.apache.hudi.metrics.Metrics; + import java.util.concurrent.TimeUnit; public class HoodieLockMetrics { @@ -46,6 +46,7 @@ public class HoodieLockMetrics { private transient Counter failedLockAttempts; private transient Timer lockDuration; private transient Timer lockApiRequestDuration; + private static final Object REGISTRY_LOCK = new Object(); public HoodieLockMetrics(HoodieWriteConfig writeConfig) { this.isMetricsEnabled = writeConfig.isLockingMetricsEnabled(); @@ -69,10 +70,12 @@ public class HoodieLockMetrics { private Timer createTimerForMetrics(MetricRegistry registry, String metric) { String metricName = getMetricsName(metric); - if (registry.getMetrics().get(metricName) == null) { - lockDuration = new Timer(new SlidingWindowReservoir(keepLastNtimes)); - registry.register(metricName, lockDuration); - return lockDuration; + synchronized (REGISTRY_LOCK) { + if (registry.getMetrics().get(metricName) == null) { + lockDuration = new Timer(new SlidingWindowReservoir(keepLastNtimes)); + registry.register(metricName, lockDuration); + return lockDuration; + } } return (Timer) registry.getMetrics().get(metricName); }