Search in sources :

Example 6 with LazySingleton

use of org.apache.druid.guice.LazySingleton in project druid by druid-io.

the class CliCoordinator method getModules.

@Override
protected List<? extends Module> getModules() {
    List<Module> modules = new ArrayList<>();
    modules.add(JettyHttpClientModule.global());
    modules.add(new Module() {

        @Override
        public void configure(Binder binder) {
            binder.bindConstant().annotatedWith(Names.named("serviceName")).to(TieredBrokerConfig.DEFAULT_COORDINATOR_SERVICE_NAME);
            binder.bindConstant().annotatedWith(Names.named("servicePort")).to(8081);
            binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(8281);
            ConfigProvider.bind(binder, DruidCoordinatorConfig.class);
            binder.bind(MetadataStorage.class).toProvider(MetadataStorageProvider.class);
            JsonConfigProvider.bind(binder, "druid.manager.segments", SegmentsMetadataManagerConfig.class);
            JsonConfigProvider.bind(binder, "druid.manager.rules", MetadataRuleManagerConfig.class);
            JsonConfigProvider.bind(binder, "druid.manager.lookups", LookupCoordinatorManagerConfig.class);
            JsonConfigProvider.bind(binder, "druid.coordinator.balancer", BalancerStrategyFactory.class);
            JsonConfigProvider.bind(binder, "druid.coordinator.segment", CoordinatorSegmentWatcherConfig.class);
            JsonConfigProvider.bind(binder, "druid.coordinator.balancer.cachingCost", CachingCostBalancerStrategyConfig.class);
            binder.bind(RedirectFilter.class).in(LazySingleton.class);
            if (beOverlord) {
                binder.bind(RedirectInfo.class).to(CoordinatorOverlordRedirectInfo.class).in(LazySingleton.class);
            } else {
                binder.bind(RedirectInfo.class).to(CoordinatorRedirectInfo.class).in(LazySingleton.class);
            }
            binder.bind(SegmentsMetadataManager.class).toProvider(SegmentsMetadataManagerProvider.class).in(ManageLifecycle.class);
            binder.bind(MetadataRuleManager.class).toProvider(MetadataRuleManagerProvider.class).in(ManageLifecycle.class);
            binder.bind(AuditManager.class).toProvider(AuditManagerProvider.class).in(ManageLifecycle.class);
            binder.bind(IndexingServiceClient.class).to(HttpIndexingServiceClient.class).in(LazySingleton.class);
            binder.bind(LookupCoordinatorManager.class).in(LazySingleton.class);
            binder.bind(CoordinatorServerView.class);
            binder.bind(DruidCoordinator.class);
            LifecycleModule.register(binder, CoordinatorServerView.class);
            LifecycleModule.register(binder, MetadataStorage.class);
            LifecycleModule.register(binder, DruidCoordinator.class);
            binder.bind(JettyServerInitializer.class).to(CoordinatorJettyServerInitializer.class);
            Jerseys.addResource(binder, CoordinatorResource.class);
            Jerseys.addResource(binder, CompactionResource.class);
            Jerseys.addResource(binder, CoordinatorDynamicConfigsResource.class);
            Jerseys.addResource(binder, CoordinatorCompactionConfigsResource.class);
            Jerseys.addResource(binder, TiersResource.class);
            Jerseys.addResource(binder, RulesResource.class);
            Jerseys.addResource(binder, ServersResource.class);
            Jerseys.addResource(binder, DataSourcesResource.class);
            Jerseys.addResource(binder, MetadataResource.class);
            Jerseys.addResource(binder, IntervalsResource.class);
            Jerseys.addResource(binder, LookupCoordinatorResource.class);
            Jerseys.addResource(binder, ClusterResource.class);
            Jerseys.addResource(binder, HttpServerInventoryViewResource.class);
            LifecycleModule.register(binder, Server.class);
            LifecycleModule.register(binder, DataSourcesResource.class);
            // Binding for Set of indexing service coordinator Duty
            final ConditionalMultibind<CoordinatorDuty> conditionalIndexingServiceDutyMultibind = ConditionalMultibind.create(properties, binder, CoordinatorDuty.class, CoordinatorIndexingServiceDuty.class);
            if (conditionalIndexingServiceDutyMultibind.matchCondition("druid.coordinator.merge.on", Predicates.equalTo("true"))) {
                throw new UnsupportedOperationException("'druid.coordinator.merge.on' is not supported anymore. " + "Please consider using Coordinator's automatic compaction instead. " + "See https://druid.apache.org/docs/latest/operations/segment-optimization.html and " + "https://druid.apache.org/docs/latest/operations/api-reference.html#compaction-configuration " + "for more details about compaction.");
            }
            conditionalIndexingServiceDutyMultibind.addConditionBinding("druid.coordinator.kill.on", "true", Predicates.equalTo("true"), KillUnusedSegments.class);
            conditionalIndexingServiceDutyMultibind.addConditionBinding("druid.coordinator.kill.pendingSegments.on", "true", Predicates.equalTo("true"), KillStalePendingSegments.class);
            // Binding for Set of metadata store management coordinator Ddty
            final ConditionalMultibind<CoordinatorDuty> conditionalMetadataStoreManagementDutyMultibind = ConditionalMultibind.create(properties, binder, CoordinatorDuty.class, CoordinatorMetadataStoreManagementDuty.class);
            conditionalMetadataStoreManagementDutyMultibind.addConditionBinding("druid.coordinator.kill.supervisor.on", "true", Predicates.equalTo("true"), KillSupervisors.class);
            conditionalMetadataStoreManagementDutyMultibind.addConditionBinding("druid.coordinator.kill.audit.on", "true", Predicates.equalTo("true"), KillAuditLog.class);
            conditionalMetadataStoreManagementDutyMultibind.addConditionBinding("druid.coordinator.kill.rule.on", "true", Predicates.equalTo("true"), KillRules.class);
            conditionalMetadataStoreManagementDutyMultibind.addConditionBinding("druid.coordinator.kill.datasource.on", "true", Predicates.equalTo("true"), KillDatasourceMetadata.class);
            conditionalMetadataStoreManagementDutyMultibind.addConditionBinding("druid.coordinator.kill.compaction.on", Predicates.equalTo("true"), KillCompactionConfig.class);
            bindAnnouncer(binder, Coordinator.class, DiscoverySideEffectsProvider.create());
            Jerseys.addResource(binder, SelfDiscoveryResource.class);
            LifecycleModule.registerKey(binder, Key.get(SelfDiscoveryResource.class));
            if (!beOverlord) {
                // These are needed to deserialize SupervisorSpec for Supervisor Auto Cleanup
                binder.bind(TaskStorage.class).toProvider(Providers.of(null));
                binder.bind(TaskMaster.class).toProvider(Providers.of(null));
                binder.bind(RowIngestionMetersFactory.class).toProvider(Providers.of(null));
            }
            binder.bind(CoordinatorCustomDutyGroups.class).toProvider(new CoordinatorCustomDutyGroupsProvider()).in(LazySingleton.class);
        }

        @Provides
        @LazySingleton
        public LoadQueueTaskMaster getLoadQueueTaskMaster(Provider<CuratorFramework> curatorFrameworkProvider, ObjectMapper jsonMapper, ScheduledExecutorFactory factory, DruidCoordinatorConfig config, @EscalatedGlobal HttpClient httpClient, ZkPathsConfig zkPaths, Lifecycle lifecycle) {
            boolean useHttpLoadQueuePeon = "http".equalsIgnoreCase(config.getLoadQueuePeonType());
            ExecutorService callBackExec;
            if (useHttpLoadQueuePeon) {
                callBackExec = Execs.singleThreaded("LoadQueuePeon-callbackexec--%d");
            } else {
                callBackExec = Execs.multiThreaded(config.getNumCuratorCallBackThreads(), "LoadQueuePeon-callbackexec--%d");
            }
            ExecutorServices.manageLifecycle(lifecycle, callBackExec);
            return new LoadQueueTaskMaster(curatorFrameworkProvider, jsonMapper, factory.create(1, "Master-PeonExec--%d"), callBackExec, config, httpClient, zkPaths);
        }
    });
    if (beOverlord) {
        modules.addAll(new CliOverlord().getModules(false));
    } else {
        // Only add LookupSerdeModule if !beOverlord, since CliOverlord includes it, and having two copies causes
        // the injector to get confused due to having multiple bindings for the same classes.
        modules.add(new LookupSerdeModule());
    }
    return modules;
}
Also used : LookupSerdeModule(org.apache.druid.query.lookup.LookupSerdeModule) Server(org.eclipse.jetty.server.Server) ArrayList(java.util.ArrayList) LookupCoordinatorResource(org.apache.druid.server.http.LookupCoordinatorResource) CoordinatorResource(org.apache.druid.server.http.CoordinatorResource) ServersResource(org.apache.druid.server.http.ServersResource) LazySingleton(org.apache.druid.guice.LazySingleton) SegmentsMetadataManagerConfig(org.apache.druid.metadata.SegmentsMetadataManagerConfig) CuratorFramework(org.apache.curator.framework.CuratorFramework) CachingCostBalancerStrategyConfig(org.apache.druid.server.coordinator.CachingCostBalancerStrategyConfig) ZkPathsConfig(org.apache.druid.server.initialization.ZkPathsConfig) KillRules(org.apache.druid.server.coordinator.duty.KillRules) AuditManager(org.apache.druid.audit.AuditManager) DruidCoordinator(org.apache.druid.server.coordinator.DruidCoordinator) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) MetadataStorageProvider(org.apache.druid.metadata.MetadataStorageProvider) MetadataResource(org.apache.druid.server.http.MetadataResource) CoordinatorMetadataStoreManagementDuty(org.apache.druid.guice.annotations.CoordinatorMetadataStoreManagementDuty) IndexingServiceClient(org.apache.druid.client.indexing.IndexingServiceClient) HttpIndexingServiceClient(org.apache.druid.client.indexing.HttpIndexingServiceClient) KillCompactionConfig(org.apache.druid.server.coordinator.duty.KillCompactionConfig) ManageLifecycle(org.apache.druid.guice.ManageLifecycle) Lifecycle(org.apache.druid.java.util.common.lifecycle.Lifecycle) CoordinatorSegmentWatcherConfig(org.apache.druid.client.CoordinatorSegmentWatcherConfig) LookupCoordinatorResource(org.apache.druid.server.http.LookupCoordinatorResource) HttpServerInventoryViewResource(org.apache.druid.client.HttpServerInventoryViewResource) ScheduledExecutorFactory(org.apache.druid.java.util.common.concurrent.ScheduledExecutorFactory) MetadataStorage(org.apache.druid.metadata.MetadataStorage) RedirectInfo(org.apache.druid.server.http.RedirectInfo) CoordinatorRedirectInfo(org.apache.druid.server.http.CoordinatorRedirectInfo) LifecycleModule(org.apache.druid.guice.LifecycleModule) JettyHttpClientModule(org.apache.druid.guice.http.JettyHttpClientModule) Module(com.google.inject.Module) LookupSerdeModule(org.apache.druid.query.lookup.LookupSerdeModule) KillAuditLog(org.apache.druid.server.coordinator.duty.KillAuditLog) LoadQueueTaskMaster(org.apache.druid.server.coordinator.LoadQueueTaskMaster) SegmentsMetadataManager(org.apache.druid.metadata.SegmentsMetadataManager) MetadataRuleManager(org.apache.druid.metadata.MetadataRuleManager) KillStalePendingSegments(org.apache.druid.server.coordinator.KillStalePendingSegments) ClusterResource(org.apache.druid.server.http.ClusterResource) Binder(com.google.inject.Binder) TiersResource(org.apache.druid.server.http.TiersResource) CoordinatorDuty(org.apache.druid.server.coordinator.duty.CoordinatorDuty) KillUnusedSegments(org.apache.druid.server.coordinator.duty.KillUnusedSegments) DruidCoordinatorConfig(org.apache.druid.server.coordinator.DruidCoordinatorConfig) CoordinatorCompactionConfigsResource(org.apache.druid.server.http.CoordinatorCompactionConfigsResource) LookupCoordinatorManagerConfig(org.apache.druid.server.lookup.cache.LookupCoordinatorManagerConfig) CoordinatorCustomDutyGroups(org.apache.druid.server.coordinator.duty.CoordinatorCustomDutyGroups) KillDatasourceMetadata(org.apache.druid.server.coordinator.duty.KillDatasourceMetadata) RulesResource(org.apache.druid.server.http.RulesResource) CompactionResource(org.apache.druid.server.http.CompactionResource) CoordinatorIndexingServiceDuty(org.apache.druid.guice.annotations.CoordinatorIndexingServiceDuty) BalancerStrategyFactory(org.apache.druid.server.coordinator.BalancerStrategyFactory) SelfDiscoveryResource(org.apache.druid.server.http.SelfDiscoveryResource) ManageLifecycle(org.apache.druid.guice.ManageLifecycle) DruidCoordinator(org.apache.druid.server.coordinator.DruidCoordinator) Coordinator(org.apache.druid.client.coordinator.Coordinator) Provides(com.google.inject.Provides) CoordinatorDynamicConfigsResource(org.apache.druid.server.http.CoordinatorDynamicConfigsResource) IntervalsResource(org.apache.druid.server.http.IntervalsResource) MetadataRuleManagerConfig(org.apache.druid.metadata.MetadataRuleManagerConfig) HttpClient(org.apache.druid.java.util.http.client.HttpClient) ExecutorService(java.util.concurrent.ExecutorService) KillSupervisors(org.apache.druid.server.coordinator.duty.KillSupervisors) DataSourcesResource(org.apache.druid.server.http.DataSourcesResource) CoordinatorServerView(org.apache.druid.client.CoordinatorServerView) ConditionalMultibind(org.apache.druid.guice.ConditionalMultibind)

Aggregations

Provides (com.google.inject.Provides)6 LazySingleton (org.apache.druid.guice.LazySingleton)6 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 Binder (com.google.inject.Binder)2 Module (com.google.inject.Module)2 RetryPolicy (org.apache.curator.RetryPolicy)2 CuratorFramework (org.apache.curator.framework.CuratorFramework)2 BoundedExponentialBackoffRetry (org.apache.curator.retry.BoundedExponentialBackoffRetry)2 Lifecycle (org.apache.druid.java.util.common.lifecycle.Lifecycle)2 Module (com.fasterxml.jackson.databind.Module)1 SmileFactory (com.fasterxml.jackson.dataformat.smile.SmileFactory)1 Injector (com.google.inject.Injector)1 SuppressForbidden (io.netty.util.SuppressForbidden)1 ArrayList (java.util.ArrayList)1 ExecutorService (java.util.concurrent.ExecutorService)1 DefaultExhibitorRestClient (org.apache.curator.ensemble.exhibitor.DefaultExhibitorRestClient)1 ExhibitorEnsembleProvider (org.apache.curator.ensemble.exhibitor.ExhibitorEnsembleProvider)1 Exhibitors (org.apache.curator.ensemble.exhibitor.Exhibitors)1 FixedEnsembleProvider (org.apache.curator.ensemble.fixed.FixedEnsembleProvider)1 CuratorFrameworkFactory (org.apache.curator.framework.CuratorFrameworkFactory)1