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

rohangarg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 6ccf31490e Allow injection of node-role set to all non base modules 
(#13371)
6ccf31490e is described below

commit 6ccf31490e5b08a2b9333f54df370eb5e841c708
Author: Rohan Garg <[email protected]>
AuthorDate: Fri Nov 18 12:12:03 2022 +0530

    Allow injection of node-role set to all non base modules (#13371)
---
 .../druid/msq/guice/MSQDurableStorageModule.java   | 51 ++++++----------------
 .../apache/druid/msq/guice/MSQIndexingModule.java  | 28 +-----------
 .../org/apache/druid/msq/test/MSQTestBase.java     | 11 ++++-
 .../indexer/HadoopDruidIndexerConfigTest.java      | 23 ++++++++++
 .../druid/indexing/common/task/HadoopTask.java     |  7 ++-
 integration-tests/pom.xml                          |  4 ++
 .../druid/testing/guice/DruidTestModule.java       |  9 +---
 .../initialization/ServerInjectorBuilder.java      | 12 ++---
 .../apache/druid/server/metrics/MetricsModule.java | 45 +++++--------------
 .../initialization/ServerInjectorBuilderTest.java  | 33 ++++++++++++++
 .../druid/server/metrics/MetricsModuleTest.java    | 44 ++++++-------------
 11 files changed, 124 insertions(+), 143 deletions(-)

diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQDurableStorageModule.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQDurableStorageModule.java
index 368144091f..1df95c3f09 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQDurableStorageModule.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQDurableStorageModule.java
@@ -23,9 +23,7 @@ import com.fasterxml.jackson.databind.Module;
 import com.google.common.collect.ImmutableList;
 import com.google.inject.Binder;
 import com.google.inject.Inject;
-import com.google.inject.Injector;
 import com.google.inject.Key;
-import com.google.inject.TypeLiteral;
 import com.google.inject.multibindings.Multibinder;
 import org.apache.druid.discovery.NodeRole;
 import org.apache.druid.guice.JsonConfigProvider;
@@ -38,7 +36,6 @@ import 
org.apache.druid.msq.indexing.DurableStorageCleanerConfig;
 import org.apache.druid.storage.StorageConnector;
 import org.apache.druid.storage.StorageConnectorProvider;
 
-import javax.annotation.Nullable;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -55,7 +52,19 @@ public class MSQDurableStorageModule implements DruidModule
       String.join(".", MSQ_INTERMEDIATE_STORAGE_PREFIX, "enable");
 
   private Properties properties;
-  private Injector injector;
+  private Set<NodeRole> nodeRoles;
+
+  @Inject
+  public void setProperties(Properties properties)
+  {
+    this.properties = properties;
+  }
+
+  @Inject
+  public void setNodeRoles(@Self Set<NodeRole> nodeRoles)
+  {
+    this.nodeRoles = nodeRoles;
+  }
 
   @Override
   public List<? extends Module> getJacksonModules()
@@ -78,8 +87,7 @@ public class MSQDurableStorageModule implements DruidModule
             .toProvider(Key.get(StorageConnectorProvider.class, 
MultiStageQuery.class))
             .in(LazySingleton.class);
 
-      Set<NodeRole> nodeRoles = getNodeRoles(injector);
-      if (nodeRoles != null && nodeRoles.contains(NodeRole.OVERLORD)) {
+      if (nodeRoles.contains(NodeRole.OVERLORD)) {
         JsonConfigProvider.bind(
             binder,
             String.join(".", MSQ_INTERMEDIATE_STORAGE_PREFIX, "cleaner"),
@@ -93,37 +101,6 @@ public class MSQDurableStorageModule implements DruidModule
     }
   }
 
-  @Inject
-  public void setProperties(Properties properties)
-  {
-    this.properties = properties;
-  }
-
-  @Inject
-  public void setInjector(Injector injector)
-  {
-    this.injector = injector;
-  }
-
-
-  @Nullable
-  private static Set<NodeRole> getNodeRoles(Injector injector)
-  {
-    try {
-      return injector.getInstance(
-          Key.get(
-              new TypeLiteral<Set<NodeRole>>()
-              {
-              },
-              Self.class
-          )
-      );
-    }
-    catch (Exception e) {
-      return null;
-    }
-  }
-
   private boolean isDurableShuffleStorageEnabled()
   {
     return Boolean.parseBoolean((String) 
properties.getOrDefault(MSQ_INTERMEDIATE_STORAGE_ENABLED, "false"));
diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
index 6b47bdb3da..09728edc0d 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
@@ -23,10 +23,7 @@ import com.fasterxml.jackson.databind.Module;
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.google.common.collect.ImmutableList;
 import com.google.inject.Binder;
-import com.google.inject.Injector;
-import com.google.inject.Key;
 import com.google.inject.Provides;
-import com.google.inject.TypeLiteral;
 import org.apache.druid.discovery.NodeRole;
 import org.apache.druid.frame.processor.Bouncer;
 import org.apache.druid.guice.LazySingleton;
@@ -86,8 +83,6 @@ import 
org.apache.druid.msq.querykit.scan.ScanQueryFrameProcessorFactory;
 import org.apache.druid.msq.util.PassthroughAggregatorFactory;
 import org.apache.druid.query.DruidProcessingConfig;
 
-import javax.annotation.Nullable;
-
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -195,10 +190,9 @@ public class MSQIndexingModule implements DruidModule
 
   @Provides
   @LazySingleton
-  public Bouncer makeBouncer(final DruidProcessingConfig processingConfig, 
Injector injector)
+  public Bouncer makeBouncer(final DruidProcessingConfig processingConfig, 
@Self Set<NodeRole> nodeRoles)
   {
-    Set<NodeRole> nodeRoles = getNodeRoles(injector);
-    if (null == nodeRoles || (nodeRoles.contains(NodeRole.PEON) && 
!nodeRoles.contains(NodeRole.INDEXER))) {
+    if (nodeRoles.contains(NodeRole.PEON) && 
!nodeRoles.contains(NodeRole.INDEXER)) {
       // CliPeon -> use only one thread regardless of configured # of 
processing threads. This matches the expected
       // resource usage pattern for CliPeon-based tasks (one task / one 
working thread per JVM).
       return new Bouncer(1);
@@ -206,22 +200,4 @@ public class MSQIndexingModule implements DruidModule
       return new Bouncer(processingConfig.getNumThreads());
     }
   }
-
-  @Nullable
-  private static Set<NodeRole> getNodeRoles(Injector injector)
-  {
-    try {
-      return injector.getInstance(
-          Key.get(
-              new TypeLiteral<Set<NodeRole>>()
-              {
-              },
-              Self.class
-          )
-      );
-    }
-    catch (Exception e) {
-      return null;
-    }
-  }
 }
diff --git 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
index 35e57b9f2f..096d2cba1c 100644
--- 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
+++ 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
@@ -31,6 +31,7 @@ import com.google.common.collect.Iterables;
 import com.google.common.io.ByteStreams;
 import com.google.inject.Injector;
 import com.google.inject.Key;
+import com.google.inject.Module;
 import com.google.inject.TypeLiteral;
 import com.google.inject.util.Modules;
 import com.google.inject.util.Providers;
@@ -45,6 +46,7 @@ import org.apache.druid.guice.GuiceInjectors;
 import org.apache.druid.guice.IndexingServiceTuningConfigModule;
 import org.apache.druid.guice.JoinableFactoryModule;
 import org.apache.druid.guice.JsonConfigProvider;
+import org.apache.druid.guice.StartupInjectorBuilder;
 import org.apache.druid.guice.annotations.EscalatedGlobal;
 import org.apache.druid.guice.annotations.MSQ;
 import org.apache.druid.guice.annotations.Self;
@@ -53,6 +55,7 @@ import 
org.apache.druid.indexing.common.SegmentCacheManagerFactory;
 import org.apache.druid.indexing.common.task.CompactionTask;
 import org.apache.druid.indexing.common.task.IndexTask;
 import 
org.apache.druid.indexing.common.task.batch.parallel.ParallelIndexTuningConfig;
+import org.apache.druid.initialization.CoreInjectorBuilder;
 import org.apache.druid.java.util.common.IOE;
 import org.apache.druid.java.util.common.ISE;
 import org.apache.druid.java.util.common.Pair;
@@ -278,7 +281,7 @@ public class MSQTestBase extends BaseCalciteQueryTest
 
     segmentManager = new MSQTestSegmentManager(segmentCacheManager, indexIO);
 
-    Injector injector = 
GuiceInjectors.makeStartupInjectorWithModules(ImmutableList.of(
+    List<Module> modules = ImmutableList.of(
         binder -> {
           DruidProcessingConfig druidProcessingConfig = new 
DruidProcessingConfig()
           {
@@ -377,7 +380,11 @@ public class MSQTestBase extends BaseCalciteQueryTest
             }
         ),
         new MSQExternalDataSourceModule()
-    ));
+    );
+    // adding node role injection to the modules, since CliPeon would also do 
that through run method
+    Injector injector = new CoreInjectorBuilder(new 
StartupInjectorBuilder().build(), ImmutableSet.of(NodeRole.PEON))
+        .addAll(modules)
+        .build();
 
     objectMapper = setupObjectMapper(injector);
     objectMapper.registerModules(sqlModule.getJacksonModules());
diff --git 
a/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerConfigTest.java
 
b/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerConfigTest.java
index aec198a33e..f1352cece9 100644
--- 
a/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerConfigTest.java
+++ 
b/indexing-hadoop/src/test/java/org/apache/druid/indexer/HadoopDruidIndexerConfigTest.java
@@ -23,11 +23,16 @@ import com.fasterxml.jackson.databind.InjectableValues;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.inject.Binder;
+import com.google.inject.Inject;
 import org.apache.druid.data.input.MapBasedInputRow;
+import org.apache.druid.discovery.NodeRole;
+import org.apache.druid.guice.annotations.Self;
 import org.apache.druid.indexer.partitions.DimensionBasedPartitionsSpec;
 import org.apache.druid.indexer.partitions.HashedPartitionsSpec;
 import org.apache.druid.indexer.partitions.PartitionsSpec;
 import org.apache.druid.indexer.partitions.SingleDimensionPartitionsSpec;
+import org.apache.druid.initialization.DruidModule;
 import org.apache.druid.jackson.DefaultObjectMapper;
 import org.apache.druid.java.util.common.DateTimes;
 import org.apache.druid.java.util.common.Intervals;
@@ -47,14 +52,32 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public class HadoopDruidIndexerConfigTest
 {
   private static final ObjectMapper JSON_MAPPER;
+  // testing member to verify that DruidModule gets node-roles set supplied 
through the static initialization of
+  // HadoopDruidIndexerConfig class.
+  private static final DruidModule MY_MODULE;
 
   static {
     JSON_MAPPER = new DefaultObjectMapper();
     JSON_MAPPER.setInjectableValues(new 
InjectableValues.Std().addValue(ObjectMapper.class, JSON_MAPPER));
+    MY_MODULE = new DruidModule()
+    {
+      @Inject
+      public void setNodeRoles(@Self Set<NodeRole> nodeRoles)
+      {
+        Assert.assertTrue(nodeRoles.isEmpty());
+      }
+
+      @Override
+      public void configure(Binder binder)
+      {
+
+      }
+    };
   }
 
   @Test
diff --git 
a/indexing-service/src/main/java/org/apache/druid/indexing/common/task/HadoopTask.java
 
b/indexing-service/src/main/java/org/apache/druid/indexing/common/task/HadoopTask.java
index 300ec5bac2..201024540e 100644
--- 
a/indexing-service/src/main/java/org/apache/druid/indexing/common/task/HadoopTask.java
+++ 
b/indexing-service/src/main/java/org/apache/druid/indexing/common/task/HadoopTask.java
@@ -22,12 +22,14 @@ package org.apache.druid.indexing.common.task;
 import com.google.common.base.Joiner;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.inject.Injector;
 import org.apache.druid.guice.ExtensionsConfig;
 import org.apache.druid.guice.ExtensionsLoader;
 import org.apache.druid.guice.StartupInjectorBuilder;
 import org.apache.druid.indexing.common.TaskToolbox;
+import org.apache.druid.initialization.ServerInjectorBuilder;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.utils.JvmUtils;
 
@@ -50,7 +52,10 @@ public abstract class HadoopTask extends 
AbstractBatchIndexTask
 {
   private static final Logger log = new Logger(HadoopTask.class);
 
-  static final Injector INJECTOR = new 
StartupInjectorBuilder().forServer().build();
+  static final Injector INJECTOR = new StartupInjectorBuilder()
+      .forServer()
+      .add(ServerInjectorBuilder.registerNodeRoleModule(ImmutableSet.of()))
+      .build();
   private static final ExtensionsLoader EXTENSIONS_LOADER = 
ExtensionsLoader.instance(INJECTOR);
 
   private final List<String> hadoopDependencyCoordinates;
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 5ee56c51f8..4dc88f517f 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -270,6 +270,10 @@
             <groupId>com.google.inject</groupId>
             <artifactId>guice</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.google.inject.extensions</groupId>
+            <artifactId>guice-multibindings</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
diff --git 
a/integration-tests/src/main/java/org/apache/druid/testing/guice/DruidTestModule.java
 
b/integration-tests/src/main/java/org/apache/druid/testing/guice/DruidTestModule.java
index cef449c782..be80a5ddc5 100644
--- 
a/integration-tests/src/main/java/org/apache/druid/testing/guice/DruidTestModule.java
+++ 
b/integration-tests/src/main/java/org/apache/druid/testing/guice/DruidTestModule.java
@@ -21,11 +21,10 @@ package org.apache.druid.testing.guice;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableSet;
 import com.google.inject.Binder;
 import com.google.inject.Module;
 import com.google.inject.Provides;
-import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.Multibinder;
 import org.apache.druid.curator.CuratorConfig;
 import org.apache.druid.discovery.NodeRole;
 import org.apache.druid.guice.JsonConfigProvider;
@@ -44,8 +43,6 @@ import org.apache.druid.testing.IntegrationTestingConfig;
 import org.apache.druid.testing.IntegrationTestingConfigProvider;
 import org.apache.druid.testing.IntegrationTestingCuratorConfig;
 
-import java.util.Set;
-
 /**
  */
 public class DruidTestModule implements Module
@@ -66,9 +63,7 @@ public class DruidTestModule implements Module
     );
 
     // Required for MSQIndexingModule
-    binder.bind(new TypeLiteral<Set<NodeRole>>()
-    {
-    }).annotatedWith(Self.class).toInstance(ImmutableSet.of(NodeRole.PEON));
+    Multibinder.newSetBinder(binder, NodeRole.class, 
Self.class).addBinding().toInstance(NodeRole.PEON);
   }
 
   @Provides
diff --git 
a/server/src/main/java/org/apache/druid/initialization/ServerInjectorBuilder.java
 
b/server/src/main/java/org/apache/druid/initialization/ServerInjectorBuilder.java
index 55fba0b08c..f9b421ec5e 100644
--- 
a/server/src/main/java/org/apache/druid/initialization/ServerInjectorBuilder.java
+++ 
b/server/src/main/java/org/apache/druid/initialization/ServerInjectorBuilder.java
@@ -20,7 +20,9 @@
 package org.apache.druid.initialization;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.inject.Injector;
 import com.google.inject.Module;
@@ -45,7 +47,7 @@ import java.util.Set;
  */
 public class ServerInjectorBuilder
 {
-  private Injector baseInjector;
+  private final Injector baseInjector;
   private Set<NodeRole> nodeRoles;
   private Iterable<? extends Module> modules;
 
@@ -78,7 +80,7 @@ public class ServerInjectorBuilder
 
   public ServerInjectorBuilder nodeRoles(final Set<NodeRole> nodeRoles)
   {
-    this.nodeRoles = nodeRoles;
+    this.nodeRoles = nodeRoles == null ? ImmutableSet.of() : nodeRoles;
     return this;
   }
 
@@ -90,6 +92,9 @@ public class ServerInjectorBuilder
 
   public Injector build()
   {
+    Preconditions.checkNotNull(baseInjector);
+    Preconditions.checkNotNull(nodeRoles);
+
     Module registerNodeRoleModule = registerNodeRoleModule(nodeRoles);
 
     // Child injector, with the registered node roles
@@ -115,9 +120,6 @@ public class ServerInjectorBuilder
 
   public static Module registerNodeRoleModule(Set<NodeRole> nodeRoles)
   {
-    if (nodeRoles.isEmpty()) {
-      return binder -> {};
-    }
     return binder -> {
       Multibinder<NodeRole> selfBinder = Multibinder.newSetBinder(binder, 
NodeRole.class, Self.class);
       nodeRoles.forEach(nodeRole -> 
selfBinder.addBinding().toInstance(nodeRole));
diff --git 
a/server/src/main/java/org/apache/druid/server/metrics/MetricsModule.java 
b/server/src/main/java/org/apache/druid/server/metrics/MetricsModule.java
index b4a0df6cd9..f060ec5179 100644
--- a/server/src/main/java/org/apache/druid/server/metrics/MetricsModule.java
+++ b/server/src/main/java/org/apache/druid/server/metrics/MetricsModule.java
@@ -22,11 +22,11 @@ package org.apache.druid.server.metrics;
 import com.google.common.base.Supplier;
 import com.google.common.collect.Iterables;
 import com.google.inject.Binder;
+import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.Module;
 import com.google.inject.Provides;
-import com.google.inject.TypeLiteral;
 import com.google.inject.name.Names;
 import io.timeandspace.cronscheduler.CronScheduler;
 import org.apache.druid.discovery.NodeRole;
@@ -50,7 +50,6 @@ import org.apache.druid.java.util.metrics.NoopSysMonitor;
 import org.apache.druid.java.util.metrics.SysMonitor;
 import org.apache.druid.query.ExecutorServiceMonitor;
 
-import javax.annotation.Nullable;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.List;
@@ -66,6 +65,13 @@ public class MetricsModule implements Module
 {
   static final String MONITORING_PROPERTY_PREFIX = "druid.monitoring";
   private static final Logger log = new Logger(MetricsModule.class);
+  private Set<NodeRole> nodeRoles;
+
+  @Inject
+  public void setNodeRoles(@Self Set<NodeRole> nodeRoles)
+  {
+    this.nodeRoles = nodeRoles;
+  }
 
   public static void register(Binder binder, Class<? extends Monitor> 
monitorClazz)
   {
@@ -174,14 +180,9 @@ public class MetricsModule implements Module
 
   @Provides
   @ManageLifecycle
-  public SysMonitor getSysMonitor(
-      DataSourceTaskIdHolder dataSourceTaskIdHolder,
-      Injector injector
-  )
+  public SysMonitor getSysMonitor(DataSourceTaskIdHolder 
dataSourceTaskIdHolder, @Self Set<NodeRole> nodeRoles)
   {
-    final Set<NodeRole> nodeRoles = getNodeRoles(injector);
-
-    if (isPeonRole(nodeRoles)) {
+    if (nodeRoles.contains(NodeRole.PEON)) {
       return new NoopSysMonitor();
     } else {
       Map<String, String[]> dimensions = 
MonitorsConfig.mapOfDatasourceAndTaskID(
@@ -191,30 +192,4 @@ public class MetricsModule implements Module
       return new SysMonitor(dimensions);
     }
   }
-
-  @Nullable
-  private static Set<NodeRole> getNodeRoles(Injector injector)
-  {
-    try {
-      return injector.getInstance(
-          Key.get(
-              new TypeLiteral<Set<NodeRole>>()
-              {
-              },
-              Self.class
-          )
-      );
-    }
-    catch (Exception e) {
-      return null;
-    }
-  }
-
-  private static boolean isPeonRole(Set<NodeRole> nodeRoles)
-  {
-    if (nodeRoles == null) {
-      return false;
-    }
-    return nodeRoles.contains(NodeRole.PEON);
-  }
 }
diff --git 
a/server/src/test/java/org/apache/druid/initialization/ServerInjectorBuilderTest.java
 
b/server/src/test/java/org/apache/druid/initialization/ServerInjectorBuilderTest.java
index 736d0604a6..b45424b075 100644
--- 
a/server/src/test/java/org/apache/druid/initialization/ServerInjectorBuilderTest.java
+++ 
b/server/src/test/java/org/apache/druid/initialization/ServerInjectorBuilderTest.java
@@ -154,6 +154,39 @@ public class ServerInjectorBuilderTest
     Assert.assertEquals(expected, 
injector.getInstance(Key.get(DruidNode.class, Self.class)));
   }
 
+  @Test
+  public void testCreateInjectorWithEmptyNodeRolesAndRoleInjection()
+  {
+    final DruidNode expected = new DruidNode("test-inject", null, false, null, 
null, true, false);
+    Injector startupInjector = startupInjector();
+    Injector injector = ServerInjectorBuilder.makeServerInjector(
+        startupInjector,
+        ImmutableSet.of(),
+        ImmutableList.of(
+            (com.google.inject.Module) new DruidModule()
+            {
+              @Inject
+              public void setNodeRoles(@Self Set<NodeRole> nodeRoles)
+              {
+                Assert.assertTrue(nodeRoles.isEmpty());
+              }
+
+              @Override
+              public void configure(Binder binder)
+              {
+
+              }
+            },
+            binder -> JsonConfigProvider.bindInstance(
+                binder,
+                Key.get(DruidNode.class, Self.class),
+                expected
+            )
+        )
+    );
+    Assert.assertNotNull(injector);
+  }
+
   @Test
   public void testCreateInjectorWithNodeRoleFilter_moduleNotLoaded()
   {
diff --git 
a/server/src/test/java/org/apache/druid/server/metrics/MetricsModuleTest.java 
b/server/src/test/java/org/apache/druid/server/metrics/MetricsModuleTest.java
index 26d1ecb54a..473b549b51 100644
--- 
a/server/src/test/java/org/apache/druid/server/metrics/MetricsModuleTest.java
+++ 
b/server/src/test/java/org/apache/druid/server/metrics/MetricsModuleTest.java
@@ -28,7 +28,6 @@ import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.Module;
 import com.google.inject.Scopes;
-import com.google.inject.TypeLiteral;
 import com.google.inject.name.Names;
 import org.apache.druid.discovery.NodeRole;
 import org.apache.druid.guice.GuiceInjectors;
@@ -37,6 +36,7 @@ import org.apache.druid.guice.LazySingleton;
 import org.apache.druid.guice.LifecycleModule;
 import org.apache.druid.guice.annotations.Self;
 import org.apache.druid.initialization.Initialization;
+import org.apache.druid.initialization.ServerInjectorBuilder;
 import org.apache.druid.jackson.JacksonModule;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.emitter.service.ServiceEmitter;
@@ -59,7 +59,6 @@ import org.mockito.Mockito;
 import javax.validation.Validation;
 import javax.validation.Validator;
 import java.util.Properties;
-import java.util.Set;
 
 public class MetricsModuleTest
 {
@@ -125,7 +124,8 @@ public class MetricsModuleTest
   @Test
   public void testGetBasicMonitorSchedulerByDefault()
   {
-    final MonitorScheduler monitorScheduler = createInjector(new 
Properties()).getInstance(MonitorScheduler.class);
+    final MonitorScheduler monitorScheduler =
+        createInjector(new Properties(), 
ImmutableSet.of()).getInstance(MonitorScheduler.class);
     Assert.assertSame(BasicMonitorScheduler.class, 
monitorScheduler.getClass());
   }
 
@@ -137,7 +137,8 @@ public class MetricsModuleTest
         StringUtils.format("%s.schedulerClassName", 
MetricsModule.MONITORING_PROPERTY_PREFIX),
         ClockDriftSafeMonitorScheduler.class.getName()
     );
-    final MonitorScheduler monitorScheduler = 
createInjector(properties).getInstance(MonitorScheduler.class);
+    final MonitorScheduler monitorScheduler =
+        createInjector(properties, 
ImmutableSet.of()).getInstance(MonitorScheduler.class);
     Assert.assertSame(ClockDriftSafeMonitorScheduler.class, 
monitorScheduler.getClass());
   }
 
@@ -149,7 +150,8 @@ public class MetricsModuleTest
         StringUtils.format("%s.schedulerClassName", 
MetricsModule.MONITORING_PROPERTY_PREFIX),
         BasicMonitorScheduler.class.getName()
     );
-    final MonitorScheduler monitorScheduler = 
createInjector(properties).getInstance(MonitorScheduler.class);
+    final MonitorScheduler monitorScheduler =
+        createInjector(properties, 
ImmutableSet.of()).getInstance(MonitorScheduler.class);
     Assert.assertSame(BasicMonitorScheduler.class, 
monitorScheduler.getClass());
   }
 
@@ -164,7 +166,7 @@ public class MetricsModuleTest
     expectedException.expect(CreationException.class);
     
expectedException.expectCause(CoreMatchers.instanceOf(IllegalArgumentException.class));
     expectedException.expectMessage("Unknown monitor 
scheduler[UnknownScheduler]");
-    createInjector(properties).getInstance(MonitorScheduler.class);
+    createInjector(properties, 
ImmutableSet.of()).getInstance(MonitorScheduler.class);
   }
 
   @Test
@@ -173,24 +175,8 @@ public class MetricsModuleTest
     // Do not run the tests on ARM64. Sigar library has no binaries for ARM64
     Assume.assumeFalse("aarch64".equals(CPU_ARCH));
 
-    final NodeRole nodeRole = NodeRole.PEON;
-    final Injector injector = Guice.createInjector(
-        new JacksonModule(),
-        new LifecycleModule(),
-        binder -> {
-          binder.bindScope(LazySingleton.class, Scopes.SINGLETON);
-        },
-        binder -> {
-          binder.bind(
-              new TypeLiteral<Set<NodeRole>>()
-              {
-              
}).annotatedWith(Self.class).toInstance(ImmutableSet.of(nodeRole));
-        }
-    );
-    final DataSourceTaskIdHolder dimensionIdHolder = new 
DataSourceTaskIdHolder();
-    injector.injectMembers(dimensionIdHolder);
-    final MetricsModule metricsModule = new MetricsModule();
-    final SysMonitor sysMonitor = 
metricsModule.getSysMonitor(dimensionIdHolder, injector);
+    final Injector injector = createInjector(new Properties(), 
ImmutableSet.of(NodeRole.PEON));
+    final SysMonitor sysMonitor = injector.getInstance(SysMonitor.class);
     final ServiceEmitter emitter = Mockito.mock(ServiceEmitter.class);
     sysMonitor.doMonitor(emitter);
 
@@ -204,11 +190,8 @@ public class MetricsModuleTest
     // Do not run the tests on ARM64. Sigar library has no binaries for ARM64
     Assume.assumeFalse("aarch64".equals(CPU_ARCH));
 
-    final Injector injector = createInjector(new Properties());
-    final DataSourceTaskIdHolder dimensionIdHolder = new 
DataSourceTaskIdHolder();
-    injector.injectMembers(dimensionIdHolder);
-    final MetricsModule metricsModule = new MetricsModule();
-    final SysMonitor sysMonitor = 
metricsModule.getSysMonitor(dimensionIdHolder, injector);
+    Injector injector = createInjector(new Properties(), ImmutableSet.of());
+    final SysMonitor sysMonitor = injector.getInstance(SysMonitor.class);
     final ServiceEmitter emitter = Mockito.mock(ServiceEmitter.class);
     sysMonitor.doMonitor(emitter);
 
@@ -216,7 +199,7 @@ public class MetricsModuleTest
     Mockito.verify(emitter, 
Mockito.atLeastOnce()).emit(ArgumentMatchers.any(ServiceEventBuilder.class));
   }
 
-  private static Injector createInjector(Properties properties)
+  private static Injector createInjector(Properties properties, 
ImmutableSet<NodeRole> nodeRoles)
   {
     return Guice.createInjector(
         new JacksonModule(),
@@ -227,6 +210,7 @@ public class MetricsModuleTest
           binder.bind(ServiceEmitter.class).toInstance(new 
NoopServiceEmitter());
           binder.bind(Properties.class).toInstance(properties);
         },
+        ServerInjectorBuilder.registerNodeRoleModule(nodeRoles),
         new MetricsModule()
     );
   }


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

Reply via email to