This is an automated email from the ASF dual-hosted git repository.
georgew5656 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 ebf216829dc #16717 defer provider instantiation in Kubernetes Module
(#16726)
ebf216829dc is described below
commit ebf216829dc07c96401b817fa879364c9b8d7772
Author: trompa <[email protected]>
AuthorDate: Tue Jul 16 22:05:28 2024 +0200
#16717 defer provider instantiation in Kubernetes Module (#16726)
* #16717 defer provider instatiation
* add license header
* fix style, ignore new class in jacoco as it is still initialization code
---------
Co-authored-by: Alberto Lago Alvarado <[email protected]>
---
extensions-core/kubernetes-extensions/pom.xml | 2 +
.../druid/k8s/discovery/K8sDiscoveryModule.java | 58 +------------
.../discovery/K8sDruidLeaderSelectorProvider.java | 97 ++++++++++++++++++++++
3 files changed, 101 insertions(+), 56 deletions(-)
diff --git a/extensions-core/kubernetes-extensions/pom.xml
b/extensions-core/kubernetes-extensions/pom.xml
index 613dfd756ed..e51d1218464 100644
--- a/extensions-core/kubernetes-extensions/pom.xml
+++ b/extensions-core/kubernetes-extensions/pom.xml
@@ -158,10 +158,12 @@
<excludes>
<!-- Initialization code -->
<exclude>org/apache/druid/k8s/discovery/K8sDiscoveryModule*</exclude>
+
<exclude>org/apache/druid/k8s/discovery/K8sDruidLeaderSelectorProvider*</exclude>
<!-- K8S Api Glue, not unit testable -->
<exclude>org/apache/druid/k8s/discovery/DefaultK8sApiClient*</exclude>
<exclude>org/apache/druid/k8s/discovery/DefaultK8sLeaderElectorFactory*</exclude>
+
</excludes>
</configuration>
</plugin>
diff --git
a/extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDiscoveryModule.java
b/extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDiscoveryModule.java
index 6da6819ff4b..b18f03d7f5b 100644
---
a/extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDiscoveryModule.java
+++
b/extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDiscoveryModule.java
@@ -21,9 +21,7 @@ package org.apache.druid.k8s.discovery;
import com.fasterxml.jackson.databind.Module;
import com.google.inject.Binder;
-import com.google.inject.Inject;
import com.google.inject.Key;
-import com.google.inject.Provider;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.util.Config;
import org.apache.druid.client.coordinator.Coordinator;
@@ -34,9 +32,7 @@ import org.apache.druid.discovery.DruidNodeDiscoveryProvider;
import org.apache.druid.guice.JsonConfigProvider;
import org.apache.druid.guice.LazySingleton;
import org.apache.druid.guice.PolyBind;
-import org.apache.druid.guice.annotations.Self;
import org.apache.druid.initialization.DruidModule;
-import org.apache.druid.server.DruidNode;
import java.io.IOException;
import java.util.Collections;
@@ -88,65 +84,15 @@ public class K8sDiscoveryModule implements DruidModule
PolyBind.optionBinder(binder, Key.get(DruidLeaderSelector.class,
Coordinator.class))
.addBinding(K8S_KEY)
.toProvider(
- new DruidLeaderSelectorProvider(true)
+
K8sDruidLeaderSelectorProvider.K8sCoordinatorDruidLeaderSelectorProvider.class
)
.in(LazySingleton.class);
PolyBind.optionBinder(binder, Key.get(DruidLeaderSelector.class,
IndexingService.class))
.addBinding(K8S_KEY)
.toProvider(
- new DruidLeaderSelectorProvider(false)
+
K8sDruidLeaderSelectorProvider.K8sIndexingServiceDruidLeaderSelectorProvider.class
)
.in(LazySingleton.class);
}
-
- private static class DruidLeaderSelectorProvider implements
Provider<DruidLeaderSelector>
- {
- @Inject
- @Self
- private DruidNode druidNode;
-
- @Inject
- private PodInfo podInfo;
-
- @Inject
- private K8sDiscoveryConfig discoveryConfig;
-
- @Inject
- private Provider<ApiClient> k8sApiClientProvider;
-
- private boolean isCoordinator;
-
- DruidLeaderSelectorProvider(boolean isCoordinator)
- {
- this.isCoordinator = isCoordinator;
- }
-
- @Override
- public DruidLeaderSelector get()
- {
- // Note: these can not be setup in the constructor because injected
K8sDiscoveryConfig and PodInfo
- // are not available at that time.
- String lockResourceName;
- String lockResourceNamespace;
-
- if (isCoordinator) {
- lockResourceName = discoveryConfig.getClusterIdentifier() +
"-leaderelection-coordinator";
- lockResourceNamespace =
discoveryConfig.getCoordinatorLeaderElectionConfigMapNamespace() == null ?
- podInfo.getPodNamespace() :
discoveryConfig.getCoordinatorLeaderElectionConfigMapNamespace();
- } else {
- lockResourceName = discoveryConfig.getClusterIdentifier() +
"-leaderelection-overlord";
- lockResourceNamespace =
discoveryConfig.getOverlordLeaderElectionConfigMapNamespace() == null ?
- podInfo.getPodNamespace() :
discoveryConfig.getOverlordLeaderElectionConfigMapNamespace();
- }
-
- return new K8sDruidLeaderSelector(
- druidNode,
- lockResourceName,
- lockResourceNamespace,
- discoveryConfig,
- new DefaultK8sLeaderElectorFactory(k8sApiClientProvider.get(),
discoveryConfig)
- );
- }
- }
}
diff --git
a/extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDruidLeaderSelectorProvider.java
b/extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDruidLeaderSelectorProvider.java
new file mode 100644
index 00000000000..cff6a8bdf46
--- /dev/null
+++
b/extensions-core/kubernetes-extensions/src/main/java/org/apache/druid/k8s/discovery/K8sDruidLeaderSelectorProvider.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.k8s.discovery;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import io.kubernetes.client.openapi.ApiClient;
+import org.apache.druid.discovery.DruidLeaderSelector;
+import org.apache.druid.guice.annotations.Self;
+import org.apache.druid.server.DruidNode;
+
+public abstract class K8sDruidLeaderSelectorProvider implements
Provider<DruidLeaderSelector>
+{
+ @Inject
+ @Self
+ private DruidNode druidNode;
+
+ @Inject
+ private PodInfo podInfo;
+
+ @Inject
+ private K8sDiscoveryConfig discoveryConfig;
+
+ @Inject
+ private Provider<ApiClient> k8sApiClientProvider;
+
+ private boolean isCoordinator;
+
+ K8sDruidLeaderSelectorProvider(boolean isCoordinator)
+ {
+ this.isCoordinator = isCoordinator;
+ }
+
+ @Override
+ public DruidLeaderSelector get()
+ {
+ // Note: these can not be setup in the constructor because injected
K8sDiscoveryConfig and PodInfo
+ // are not available at that time.
+ String lockResourceName;
+ String lockResourceNamespace;
+
+ if (isCoordinator) {
+ lockResourceName = discoveryConfig.getClusterIdentifier() +
"-leaderelection-coordinator";
+ lockResourceNamespace =
discoveryConfig.getCoordinatorLeaderElectionConfigMapNamespace() == null
+ ?
+ podInfo.getPodNamespace()
+ :
discoveryConfig.getCoordinatorLeaderElectionConfigMapNamespace();
+ } else {
+ lockResourceName = discoveryConfig.getClusterIdentifier() +
"-leaderelection-overlord";
+ lockResourceNamespace =
discoveryConfig.getOverlordLeaderElectionConfigMapNamespace() == null ?
+ podInfo.getPodNamespace() :
discoveryConfig.getOverlordLeaderElectionConfigMapNamespace();
+ }
+
+ return new K8sDruidLeaderSelector(
+ druidNode,
+ lockResourceName,
+ lockResourceNamespace,
+ discoveryConfig,
+ new DefaultK8sLeaderElectorFactory(k8sApiClientProvider.get(),
discoveryConfig)
+ );
+ }
+
+ static class K8sCoordinatorDruidLeaderSelectorProvider extends
K8sDruidLeaderSelectorProvider
+ {
+ @Inject
+ public K8sCoordinatorDruidLeaderSelectorProvider()
+ {
+ super(true);
+ }
+ }
+
+ static class K8sIndexingServiceDruidLeaderSelectorProvider extends
K8sDruidLeaderSelectorProvider
+ {
+ @Inject
+ public K8sIndexingServiceDruidLeaderSelectorProvider()
+ {
+ super(false);
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]