timsants commented on a change in pull request #7551:
URL: https://github.com/apache/pinot/pull/7551#discussion_r726783256



##########
File path: 
pinot-common/src/main/java/org/apache/pinot/common/metrics/PinotMetricUtils.java
##########
@@ -54,35 +57,49 @@ private PinotMetricUtils() {
 
   private static PinotMetricsFactory _pinotMetricsFactory = null;
 
-  public static void init(PinotConfiguration metricsConfiguration) {
+  public static void init(PinotConfiguration metricsConfiguration, @Nullable 
String metricsFactoryClassName) {
     // Initializes PinotMetricsFactory.
-    initializePinotMetricsFactory(metricsConfiguration);
+    initializePinotMetricsFactory(metricsConfiguration, 
metricsFactoryClassName);
 
     // Initializes metrics using the metrics configuration.
     initializeMetrics(metricsConfiguration);
     registerMetricsRegistry(getPinotMetricsRegistry());
   }
 
+  public static void init(PinotConfiguration metricsConfiguration) {
+    init(metricsConfiguration, null);
+  }
+
   /**
    * Initializes PinotMetricsFactory with metrics configurations.
    * @param metricsConfiguration The subset of the configuration containing 
the metrics-related keys
+   * @param configuredMetricsFactoryClassName The configuration value for the 
desired metrics factory class. Will
+   *                                          default to Yammer if not 
provided.
    */
-  private static void initializePinotMetricsFactory(PinotConfiguration 
metricsConfiguration) {
+  private static void initializePinotMetricsFactory(PinotConfiguration 
metricsConfiguration,
+      @Nullable String configuredMetricsFactoryClassName) {
     Set<Class<?>> classes = getPinotMetricsFactoryClasses();
     if (classes.size() > 1) {
-      LOGGER.warn("More than one PinotMetricsFactory is initialized: {}", 
classes);
+      LOGGER.warn("More than one PinotMetricsFactory was found: {}", classes);
     }
+
+    String metricsFactoryClassName = configuredMetricsFactoryClassName == null
+        ? DEFAULT_METRICS_FACTORY_CLASS_NAME : 
configuredMetricsFactoryClassName;
+
     for (Class<?> clazz : classes) {
-      MetricsFactory annotation = clazz.getAnnotation(MetricsFactory.class);
-      LOGGER.info("Trying to init PinotMetricsFactory: {} and MetricsFactory: 
{}", clazz, annotation);
-      if (annotation.enabled()) {
-        try {
-          PinotMetricsFactory pinotMetricsFactory = (PinotMetricsFactory) 
clazz.newInstance();
-          pinotMetricsFactory.init(metricsConfiguration);
-          registerMetricsFactory(pinotMetricsFactory);
-        } catch (Exception e) {
-          LOGGER.error("Caught exception while initializing pinot metrics 
registry: {}, skipping it", clazz, e);
+      if (clazz.getName().equals(metricsFactoryClassName)) {

Review comment:
       What do you think about using this functional style to find it?
   ```
       Optional<Class<?>> maybeClazz = classes.stream().filter(c -> 
c.getName().equals(metricsFactoryClassName))
           .findFirst();
   
       maybeClazz.ifPresent(clazz -> {
             MetricsFactory annotation = 
clazz.getAnnotation(MetricsFactory.class);
             LOGGER.info("Trying to init PinotMetricsFactory: {} and 
MetricsFactory: {}", clazz, annotation);
             if (annotation.enabled()) {
               try {
                 PinotMetricsFactory pinotMetricsFactory = 
(PinotMetricsFactory) clazz.newInstance();
                 pinotMetricsFactory.init(metricsConfiguration);
                 registerMetricsFactory(pinotMetricsFactory);
               } catch (Exception e) {
                 LOGGER.error("Caught exception while initializing pinot 
metrics registry: {}, skipping it", clazz, e);
               }
             }
           }
       );
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to