From 9fea34be4bcc1452703dd1cee7d493d70b54abf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Fri, 31 Oct 2014 09:59:34 -0700 Subject: [PATCH] simplify connectors even further --- .../mysql/MySQLMetadataStorageModule.java | 79 ++-------- .../PostgresMetadataStorageModule.java | 80 ++-------- .../DerbyMetadataStorageDruidModule.java | 93 ++---------- .../guice/SQLMetadataStorageDruidModule.java | 139 ++++++++++++++++++ 4 files changed, 174 insertions(+), 217 deletions(-) create mode 100644 server/src/main/java/io/druid/guice/SQLMetadataStorageDruidModule.java diff --git a/mysql-storage/src/main/java/io/druid/storage/mysql/MySQLMetadataStorageModule.java b/mysql-storage/src/main/java/io/druid/storage/mysql/MySQLMetadataStorageModule.java index 77189de09a2..a2c3c7bee08 100644 --- a/mysql-storage/src/main/java/io/druid/storage/mysql/MySQLMetadataStorageModule.java +++ b/mysql-storage/src/main/java/io/druid/storage/mysql/MySQLMetadataStorageModule.java @@ -23,38 +23,29 @@ import com.google.common.collect.ImmutableList; import com.google.inject.Binder; import com.google.inject.Key; import com.google.inject.Provides; -import io.druid.db.IndexerSQLMetadataStorageCoordinator; -import io.druid.db.MetadataRuleManager; -import io.druid.db.MetadataRuleManagerProvider; -import io.druid.db.MetadataSegmentManager; -import io.druid.db.MetadataSegmentManagerProvider; -import io.druid.db.MetadataSegmentPublisherProvider; import io.druid.db.MetadataStorageConnector; import io.druid.db.MetadataStorageConnectorConfig; import io.druid.db.MetadataStorageTablesConfig; import io.druid.db.SQLMetadataConnector; -import io.druid.db.SQLMetadataRuleManager; -import io.druid.db.SQLMetadataRuleManagerProvider; -import io.druid.db.SQLMetadataSegmentManager; -import io.druid.db.SQLMetadataSegmentManagerProvider; -import io.druid.db.SQLMetadataSegmentPublisher; -import io.druid.db.SQLMetadataSegmentPublisherProvider; -import io.druid.db.SQLMetadataStorageActionHandlerFactory; import io.druid.guice.JsonConfigProvider; import io.druid.guice.LazySingleton; import io.druid.guice.PolyBind; -import io.druid.indexer.MetadataStorageUpdaterJobHandler; -import io.druid.indexer.SQLMetadataStorageUpdaterJobHandler; -import io.druid.indexing.overlord.IndexerMetadataStorageCoordinator; -import io.druid.indexing.overlord.MetadataStorageActionHandlerFactory; +import io.druid.guice.SQLMetadataStorageDruidModule; import io.druid.initialization.DruidModule; -import io.druid.segment.realtime.SegmentPublisher; import org.skife.jdbi.v2.IDBI; import java.util.List; -public class MySQLMetadataStorageModule implements DruidModule +public class MySQLMetadataStorageModule extends SQLMetadataStorageDruidModule implements DruidModule { + + public static final String TYPE = "mysql"; + + public MySQLMetadataStorageModule() + { + super(TYPE); + } + @Override public List getJacksonModules() { @@ -64,6 +55,7 @@ public class MySQLMetadataStorageModule implements DruidModule @Override public void configure(Binder binder) { + super.configure(binder); bindMySQL(binder); JsonConfigProvider.bind(binder, "druid.db.tables", MetadataStorageTablesConfig.class); JsonConfigProvider.bind(binder, "druid.db.connector", MetadataStorageConnectorConfig.class); @@ -71,59 +63,14 @@ public class MySQLMetadataStorageModule implements DruidModule private void bindMySQL(Binder binder) { PolyBind.optionBinder(binder, Key.get(MetadataStorageConnector.class)) - .addBinding("mysql") + .addBinding(TYPE) .to(MySQLConnector.class) .in(LazySingleton.class); PolyBind.optionBinder(binder, Key.get(SQLMetadataConnector.class)) - .addBinding("mysql") + .addBinding(TYPE) .to(MySQLConnector.class) .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentManager.class)) - .addBinding("mysql") - .to(SQLMetadataSegmentManager.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentManagerProvider.class)) - .addBinding("mysql") - .to(SQLMetadataSegmentManagerProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataRuleManager.class)) - .addBinding("mysql") - .to(SQLMetadataRuleManager.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataRuleManagerProvider.class)) - .addBinding("mysql") - .to(SQLMetadataRuleManagerProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(SegmentPublisher.class)) - .addBinding("mysql") - .to(SQLMetadataSegmentPublisher.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentPublisherProvider.class)) - .addBinding("mysql") - .to(SQLMetadataSegmentPublisherProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataStorageActionHandlerFactory.class)) - .addBinding("mysql") - .to(SQLMetadataStorageActionHandlerFactory.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(IndexerMetadataStorageCoordinator.class)) - .addBinding("mysql") - .to(IndexerSQLMetadataStorageCoordinator.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataStorageUpdaterJobHandler.class)) - .addBinding("mysql") - .to(SQLMetadataStorageUpdaterJobHandler.class) - .in(LazySingleton.class); } @Provides diff --git a/postgres-storage/src/main/java/io/druid/storage/postgres/PostgresMetadataStorageModule.java b/postgres-storage/src/main/java/io/druid/storage/postgres/PostgresMetadataStorageModule.java index 60c59948255..d639f87f0a8 100644 --- a/postgres-storage/src/main/java/io/druid/storage/postgres/PostgresMetadataStorageModule.java +++ b/postgres-storage/src/main/java/io/druid/storage/postgres/PostgresMetadataStorageModule.java @@ -23,40 +23,29 @@ import com.google.common.collect.ImmutableList; import com.google.inject.Binder; import com.google.inject.Key; import com.google.inject.Provides; -import io.druid.db.IndexerSQLMetadataStorageCoordinator; -import io.druid.db.MetadataRuleManager; -import io.druid.db.MetadataRuleManagerProvider; -import io.druid.db.MetadataSegmentManager; -import io.druid.db.MetadataSegmentManagerProvider; -import io.druid.db.MetadataSegmentPublisherProvider; import io.druid.db.MetadataStorageConnector; import io.druid.db.MetadataStorageConnectorConfig; import io.druid.db.MetadataStorageTablesConfig; import io.druid.db.SQLMetadataConnector; -import io.druid.db.SQLMetadataRuleManager; -import io.druid.db.SQLMetadataRuleManagerProvider; -import io.druid.db.SQLMetadataSegmentManager; -import io.druid.db.SQLMetadataSegmentManagerProvider; -import io.druid.db.SQLMetadataSegmentPublisher; -import io.druid.db.SQLMetadataSegmentPublisherProvider; -import io.druid.db.SQLMetadataStorageActionHandler; -import io.druid.db.SQLMetadataStorageActionHandlerFactory; import io.druid.guice.JsonConfigProvider; import io.druid.guice.LazySingleton; import io.druid.guice.PolyBind; -import io.druid.indexer.MetadataStorageUpdaterJobHandler; -import io.druid.indexer.SQLMetadataStorageUpdaterJobHandler; -import io.druid.indexing.overlord.IndexerMetadataStorageCoordinator; -import io.druid.indexing.overlord.MetadataStorageActionHandler; -import io.druid.indexing.overlord.MetadataStorageActionHandlerFactory; +import io.druid.guice.SQLMetadataStorageDruidModule; import io.druid.initialization.DruidModule; -import io.druid.segment.realtime.SegmentPublisher; import org.skife.jdbi.v2.IDBI; import java.util.List; -public class PostgresMetadataStorageModule implements DruidModule +public class PostgresMetadataStorageModule extends SQLMetadataStorageDruidModule implements DruidModule { + + public static final String TYPE = "postgresql"; + + public PostgresMetadataStorageModule() + { + super(TYPE); + } + @Override public List getJacksonModules() { @@ -73,59 +62,14 @@ public class PostgresMetadataStorageModule implements DruidModule private void bindPostgres(Binder binder) { PolyBind.optionBinder(binder, Key.get(MetadataStorageConnector.class)) - .addBinding("postgresql") + .addBinding(TYPE) .to(PostgreSQLConnector.class) .in(LazySingleton.class); PolyBind.optionBinder(binder, Key.get(SQLMetadataConnector.class)) - .addBinding("postgresql") + .addBinding(TYPE) .to(PostgreSQLConnector.class) .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentManager.class)) - .addBinding("postgresql") - .to(SQLMetadataSegmentManager.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentManagerProvider.class)) - .addBinding("postgresql") - .to(SQLMetadataSegmentManagerProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataRuleManager.class)) - .addBinding("postgresql") - .to(SQLMetadataRuleManager.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataRuleManagerProvider.class)) - .addBinding("postgresql") - .to(SQLMetadataRuleManagerProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(SegmentPublisher.class)) - .addBinding("postgresql") - .to(SQLMetadataSegmentPublisher.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataStorageActionHandlerFactory.class)) - .addBinding("postgresql") - .to(SQLMetadataStorageActionHandlerFactory.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentPublisherProvider.class)) - .addBinding("postgresql") - .to(SQLMetadataSegmentPublisherProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataStorageUpdaterJobHandler.class)) - .addBinding("postgresql") - .to(SQLMetadataStorageUpdaterJobHandler.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(IndexerMetadataStorageCoordinator.class)) - .addBinding("postgresql") - .to(IndexerSQLMetadataStorageCoordinator.class) - .in(LazySingleton.class); } @Provides diff --git a/server/src/main/java/io/druid/guice/DerbyMetadataStorageDruidModule.java b/server/src/main/java/io/druid/guice/DerbyMetadataStorageDruidModule.java index eda6a667ba8..ec961550317 100644 --- a/server/src/main/java/io/druid/guice/DerbyMetadataStorageDruidModule.java +++ b/server/src/main/java/io/druid/guice/DerbyMetadataStorageDruidModule.java @@ -46,106 +46,33 @@ import io.druid.indexing.overlord.MetadataStorageActionHandlerFactory; import io.druid.segment.realtime.SegmentPublisher; import org.skife.jdbi.v2.IDBI; -public class DerbyMetadataStorageDruidModule implements Module +public class DerbyMetadataStorageDruidModule extends SQLMetadataStorageDruidModule { + public DerbyMetadataStorageDruidModule() + { + super(TYPE); + } + + public static final String TYPE = "derby"; @Override public void configure(Binder binder) { + super.configure(binder); bindDataBaseDerby(binder); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataStorageConnector.class), Key.get(DerbyConnector.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(SQLMetadataConnector.class), Key.get(DerbyConnector.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataSegmentManager.class), Key.get(SQLMetadataSegmentManager.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataSegmentManagerProvider.class), Key.get(SQLMetadataSegmentManagerProvider.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataRuleManager.class), Key.get(SQLMetadataRuleManager.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataRuleManagerProvider.class), Key.get(SQLMetadataRuleManagerProvider.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(SegmentPublisher.class), Key.get(SQLMetadataSegmentPublisher.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataSegmentPublisherProvider.class), Key.get(SQLMetadataSegmentPublisherProvider.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(IndexerMetadataStorageCoordinator.class), Key.get(IndexerSQLMetadataStorageCoordinator.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataStorageActionHandlerFactory.class), Key.get(SQLMetadataStorageActionHandlerFactory.class) - ); - PolyBind.createChoice( - binder, "druid.db.type", Key.get(MetadataStorageUpdaterJobHandler.class), Key.get(SQLMetadataStorageUpdaterJobHandler.class) - ); - } private static void bindDataBaseDerby(Binder binder) { PolyBind.optionBinder(binder, Key.get(MetadataStorageConnector.class)) - .addBinding("derby") + .addBinding(TYPE) .to(DerbyConnector.class) .in(LazySingleton.class); PolyBind.optionBinder(binder, Key.get(SQLMetadataConnector.class)) - .addBinding("derby") + .addBinding(TYPE) .to(DerbyConnector.class) .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentManager.class)) - .addBinding("derby") - .to(SQLMetadataSegmentManager.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentManagerProvider.class)) - .addBinding("derby") - .to(SQLMetadataSegmentManagerProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataRuleManager.class)) - .addBinding("derby") - .to(SQLMetadataRuleManager.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataRuleManagerProvider.class)) - .addBinding("derby") - .to(SQLMetadataRuleManagerProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(SegmentPublisher.class)) - .addBinding("derby") - .to(SQLMetadataSegmentPublisher.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataSegmentPublisherProvider.class)) - .addBinding("derby") - .to(SQLMetadataSegmentPublisherProvider.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(IndexerMetadataStorageCoordinator.class)) - .addBinding("derby") - .to(IndexerSQLMetadataStorageCoordinator.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataStorageActionHandlerFactory.class)) - .addBinding("derby") - .to(SQLMetadataStorageActionHandlerFactory.class) - .in(LazySingleton.class); - - PolyBind.optionBinder(binder, Key.get(MetadataStorageUpdaterJobHandler.class)) - .addBinding("derby") - .to(SQLMetadataStorageUpdaterJobHandler.class) - .in(LazySingleton.class); - } @Provides diff --git a/server/src/main/java/io/druid/guice/SQLMetadataStorageDruidModule.java b/server/src/main/java/io/druid/guice/SQLMetadataStorageDruidModule.java new file mode 100644 index 00000000000..2d0a41be215 --- /dev/null +++ b/server/src/main/java/io/druid/guice/SQLMetadataStorageDruidModule.java @@ -0,0 +1,139 @@ +/* + * Druid - a distributed column store. + * Copyright (C) 2014 Metamarkets Group Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package io.druid.guice; + +import com.google.inject.Binder; +import com.google.inject.Key; +import com.google.inject.Module; +import io.druid.db.DefaultSQLMetadataConnector; +import io.druid.db.DerbyConnector; +import io.druid.db.IndexerSQLMetadataStorageCoordinator; +import io.druid.db.MetadataRuleManager; +import io.druid.db.MetadataRuleManagerProvider; +import io.druid.db.MetadataSegmentManager; +import io.druid.db.MetadataSegmentManagerProvider; +import io.druid.db.MetadataSegmentPublisherProvider; +import io.druid.db.MetadataStorageConnector; +import io.druid.db.SQLMetadataConnector; +import io.druid.db.SQLMetadataRuleManager; +import io.druid.db.SQLMetadataRuleManagerProvider; +import io.druid.db.SQLMetadataSegmentManager; +import io.druid.db.SQLMetadataSegmentManagerProvider; +import io.druid.db.SQLMetadataSegmentPublisher; +import io.druid.db.SQLMetadataSegmentPublisherProvider; +import io.druid.db.SQLMetadataStorageActionHandlerFactory; +import io.druid.indexer.MetadataStorageUpdaterJobHandler; +import io.druid.indexer.SQLMetadataStorageUpdaterJobHandler; +import io.druid.indexing.overlord.IndexerMetadataStorageCoordinator; +import io.druid.indexing.overlord.MetadataStorageActionHandlerFactory; +import io.druid.segment.realtime.SegmentPublisher; + +public class SQLMetadataStorageDruidModule implements Module +{ + final String type; + + public SQLMetadataStorageDruidModule(String type) + { + this.type = type; + } + + @Override + public void configure(Binder binder) + { + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataStorageConnector.class), null + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(SQLMetadataConnector.class), null + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataSegmentManager.class), Key.get(SQLMetadataSegmentManager.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataSegmentManagerProvider.class), Key.get(SQLMetadataSegmentManagerProvider.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataRuleManager.class), Key.get(SQLMetadataRuleManager.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataRuleManagerProvider.class), Key.get(SQLMetadataRuleManagerProvider.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(SegmentPublisher.class), Key.get(SQLMetadataSegmentPublisher.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataSegmentPublisherProvider.class), Key.get(SQLMetadataSegmentPublisherProvider.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(IndexerMetadataStorageCoordinator.class), Key.get(IndexerSQLMetadataStorageCoordinator.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataStorageActionHandlerFactory.class), Key.get(SQLMetadataStorageActionHandlerFactory.class) + ); + PolyBind.createChoice( + binder, "druid.db.type", Key.get(MetadataStorageUpdaterJobHandler.class), Key.get(SQLMetadataStorageUpdaterJobHandler.class) + ); + + PolyBind.optionBinder(binder, Key.get(MetadataSegmentManager.class)) + .addBinding(type) + .to(SQLMetadataSegmentManager.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(MetadataSegmentManagerProvider.class)) + .addBinding(type) + .to(SQLMetadataSegmentManagerProvider.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(MetadataRuleManager.class)) + .addBinding(type) + .to(SQLMetadataRuleManager.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(MetadataRuleManagerProvider.class)) + .addBinding(type) + .to(SQLMetadataRuleManagerProvider.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(SegmentPublisher.class)) + .addBinding(type) + .to(SQLMetadataSegmentPublisher.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(MetadataSegmentPublisherProvider.class)) + .addBinding(type) + .to(SQLMetadataSegmentPublisherProvider.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(MetadataStorageActionHandlerFactory.class)) + .addBinding(type) + .to(SQLMetadataStorageActionHandlerFactory.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(IndexerMetadataStorageCoordinator.class)) + .addBinding(type) + .to(IndexerSQLMetadataStorageCoordinator.class) + .in(LazySingleton.class); + + PolyBind.optionBinder(binder, Key.get(MetadataStorageUpdaterJobHandler.class)) + .addBinding(type) + .to(SQLMetadataStorageUpdaterJobHandler.class) + .in(LazySingleton.class); + } +}