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);
   }

Reply via email to