You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by wi...@apache.org on 2023/05/24 01:21:45 UTC

[ratis] branch snapshot-branch2 updated: pick user defined metric registries

This is an automated email from the ASF dual-hosted git repository.

williamsong pushed a commit to branch snapshot-branch2
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/snapshot-branch2 by this push:
     new 3f354a241 pick user defined metric registries
3f354a241 is described below

commit 3f354a2411d4d54aae63c338749f7c3f8b9b4ee7
Author: szywilliam <sz...@163.com>
AuthorDate: Wed May 24 09:21:35 2023 +0800

    pick user defined metric registries
---
 .../ratis/metrics/MetricRegistriesLoader.java      | 49 +++++++++++++++-------
 1 file changed, 35 insertions(+), 14 deletions(-)

diff --git a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java b/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java
index 0837b0bdd..ba5ee2cf5 100644
--- a/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java
+++ b/ratis-metrics/src/main/java/org/apache/ratis/metrics/MetricRegistriesLoader.java
@@ -19,15 +19,17 @@
 
 package org.apache.ratis.metrics;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ServiceLoader;
-
 import org.apache.ratis.thirdparty.com.google.common.annotations.VisibleForTesting;
 import org.apache.ratis.util.ReflectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.ServiceLoader;
+import java.util.function.Predicate;
+
 
 public final class MetricRegistriesLoader {
   private static final Logger LOG = LoggerFactory.getLogger(MetricRegistries.class);
@@ -70,18 +72,37 @@ public final class MetricRegistriesLoader {
         throw new RuntimeException(e);
       }
     } else {
-      // Tell the user they're doing something wrong, and choose the first impl.
-      StringBuilder sb = new StringBuilder();
-      for (MetricRegistries factory : availableImplementations) {
-        if (sb.length() > 0) {
-          sb.append(", ");
-        }
-        sb.append(factory.getClass());
+      return pickUserDefinedMetricRegistries(availableImplementations);
+    }
+  }
+
+  static MetricRegistries pickUserDefinedMetricRegistries(List<MetricRegistries> availableImplementations) {
+    MetricRegistries userDefined = null;
+    if (availableImplementations.size() == 2) {
+      final Predicate<MetricRegistries> nonDefault = m -> !m.getClass().getCanonicalName().equals(DEFAULT_CLASS);
+      Optional<MetricRegistries> potential =
+          availableImplementations.stream().
+          filter(nonDefault).findAny();
+      if (potential.isPresent()) {
+        userDefined = potential.get();
+        LOG.info("Found user-defined MetricRegistries Implementation: " + userDefined.getClass().getCanonicalName());
+      }
+    }
+    if (userDefined != null) {
+      return userDefined;
+    }
+
+    // Tell the user they're doing something wrong, and choose the first impl.
+    StringBuilder sb = new StringBuilder();
+    for (MetricRegistries factory : availableImplementations) {
+      if (sb.length() > 0) {
+        sb.append(", ");
       }
-      LOG.warn("Found multiple MetricRegistries implementations: " + sb
-          + ". Using first found implementation: " + availableImplementations.get(0));
-      return availableImplementations.get(0);
+      sb.append(factory.getClass());
     }
+    LOG.warn("Found multiple MetricRegistries implementations: " + sb
+        + ". Using first found implementation: " + availableImplementations.get(0));
+    return availableImplementations.get(0);
   }
 
   private static List<MetricRegistries> getDefinedImplementations() {