This commit is contained in:
Zoltan Haindrich 2024-05-15 11:57:13 +00:00
parent 73011267af
commit d4b052a579
5 changed files with 165 additions and 24 deletions

View File

@ -24,15 +24,22 @@ import com.google.common.base.Supplier;
import com.google.common.base.Suppliers; import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.inject.AbstractModule;
import com.google.inject.Binder; import com.google.inject.Binder;
import com.google.inject.Guice; import com.google.inject.Guice;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Provides; import com.google.inject.Provides;
import com.google.inject.TypeLiteral; import com.google.inject.TypeLiteral;
import com.google.inject.name.Names; import com.google.inject.name.Names;
import com.google.inject.util.Modules; import com.google.inject.util.Modules;
import org.apache.calcite.avatica.server.AbstractAvaticaHandler; import org.apache.calcite.avatica.server.AbstractAvaticaHandler;
import org.apache.druid.cli.CliBroker; import org.apache.druid.cli.CliBroker;
import org.apache.druid.discovery.DiscoveryDruidNode;
import org.apache.druid.discovery.DruidNodeDiscovery;
import org.apache.druid.discovery.DruidNodeDiscoveryProvider;
import org.apache.druid.discovery.NodeRole;
import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.DruidInjectorBuilder;
import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.LazySingleton;
import org.apache.druid.guice.StartupInjectorBuilder; import org.apache.druid.guice.StartupInjectorBuilder;
@ -90,10 +97,14 @@ import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.Set;
import java.util.function.BooleanSupplier;
public class Launcher public class Launcher
{ {
@ -389,18 +400,125 @@ public class Launcher
Launcher.main1(null); Launcher.main1(null);
} }
private static Module propOverrideModuel()
{
Properties localProps = new Properties();
localProps.put("druid.enableTlsPort", "false");
localProps.put("druid.zk.service.enabled", "false");
localProps.put("druid.plaintextPort","12345");
Module m = binder -> binder.bind(Properties.class).toInstance(localProps);
return m;
}
public static class DiscovertModule extends AbstractModule {
DiscovertModule() {
}
@Override
protected void configure()
{
}
@Provides
DruidNodeDiscoveryProvider getProvider() {
final DruidNode coordinatorNode = new DruidNode("test-coordinator", "dummy", false, 8081, null, true, false);
FakeDruidNodeDiscoveryProvider provider = new FakeDruidNodeDiscoveryProvider(
ImmutableMap.of(
NodeRole.COORDINATOR, new FakeDruidNodeDiscovery(ImmutableMap.of(NodeRole.COORDINATOR, coordinatorNode))
)
);
return provider;
}
/**
* A fake {@link DruidNodeDiscoveryProvider} for {@link #createMockSystemSchema}.
*/
private static class FakeDruidNodeDiscoveryProvider extends DruidNodeDiscoveryProvider
{
private final Map<NodeRole, FakeDruidNodeDiscovery> nodeDiscoveries;
public FakeDruidNodeDiscoveryProvider(Map<NodeRole, FakeDruidNodeDiscovery> nodeDiscoveries)
{
this.nodeDiscoveries = nodeDiscoveries;
}
@Override
public BooleanSupplier getForNode(DruidNode node, NodeRole nodeRole)
{
boolean get = nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery())
.getAllNodes()
.stream()
.anyMatch(x -> x.getDruidNode().equals(node));
return () -> get;
}
@Override
public DruidNodeDiscovery getForNodeRole(NodeRole nodeRole)
{
return nodeDiscoveries.getOrDefault(nodeRole, new FakeDruidNodeDiscovery());
}
}
private static class FakeDruidNodeDiscovery implements DruidNodeDiscovery
{
private final Set<DiscoveryDruidNode> nodes;
FakeDruidNodeDiscovery()
{
this.nodes = new HashSet<>();
}
FakeDruidNodeDiscovery(Map<NodeRole, DruidNode> nodes)
{
this.nodes = Sets.newHashSetWithExpectedSize(nodes.size());
nodes.forEach((k, v) -> {
addNode(v, k);
});
}
@Override
public Collection<DiscoveryDruidNode> getAllNodes()
{
return nodes;
}
void addNode(DruidNode node, NodeRole role)
{
final DiscoveryDruidNode discoveryNode = new DiscoveryDruidNode(node, role, ImmutableMap.of());
this.nodes.add(discoveryNode);
}
@Override
public void registerListener(Listener listener)
{
}
}
}
private static Module discoverModule()
{
// DruidNodeDiscoveryProvider instance = ;
// Module m = binder -> binder.bind(DruidNodeDiscoveryProvider.class).toInstance(instance);
return new DiscovertModule();
}
static class CustomStartupInjectorBuilder extends StartupInjectorBuilder { static class CustomStartupInjectorBuilder extends StartupInjectorBuilder {
private List<com.google.inject.Module> overrideModules =new ArrayList<>(); private List<com.google.inject.Module> overrideModules =new ArrayList<>();
public CustomStartupInjectorBuilder() public CustomStartupInjectorBuilder()
{ {
Properties localProps = new Properties(); Module m = propOverrideModuel();
localProps.put("druid.enableTlsPort", "false"); addOverride(m);
localProps.put("druid.plaintextPort","12345");
addOverride(binder -> binder.bind(Properties.class).toInstance(localProps));
// addOverride(binder -> { // addOverride(binder -> {
// binder.bind(SSLClientConfig.class).toProvider(Providers.of(null)); // binder.bind(SSLClientConfig.class).toProvider(Providers.of(null));
// binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null)); // binder.bind(SSLClientConfig.class).annotatedWith(Global.class).toProvider(Providers.of(null));
@ -431,19 +549,27 @@ public class Launcher
} }
private static void main1(Object object) private static void main1(Object object) throws Exception
{ {
final Injector injector = new CustomStartupInjectorBuilder() final Injector injector = new CustomStartupInjectorBuilder()
.forTests() .forTests()
.build(); .build();
SqlTestFramework framework = getCI().extracted(
propOverrideModuel(),
discoverModule()
)
;
// SSLContextProvider u = injector.getInstance(SSLContextProvider.class); // SSLContextProvider u = injector.getInstance(SSLContextProvider.class);
// System.out.println(u); // System.out.println(u);
CliBroker c = new CliBroker(); CliBroker c = new CliBroker();
injector.injectMembers(c); framework.injector().injectMembers(c);
// c.configure(new Properties()); // c.configure(new Properties());
c.run(); c.run();

View File

@ -83,6 +83,9 @@ import java.util.function.Function;
*/ */
public class DiscoveryModule implements Module public class DiscoveryModule implements Module
{ {
public DiscoveryModule(){
super();
}
private static final String NAME = "DiscoveryModule:internal"; private static final String NAME = "DiscoveryModule:internal";
private static final String INTERNAL_DISCOVERY_PROP = "druid.discovery.type"; private static final String INTERNAL_DISCOVERY_PROP = "druid.discovery.type";

View File

@ -20,11 +20,7 @@
package org.apache.druid.initialization; package org.apache.druid.initialization;
import com.google.inject.Injector; import com.google.inject.Injector;
import org.apache.druid.curator.CuratorModule;
import org.apache.druid.curator.discovery.DiscoveryModule;
import org.apache.druid.discovery.NodeRole; import org.apache.druid.discovery.NodeRole;
import org.apache.druid.guice.AnnouncerModule;
import org.apache.druid.guice.CoordinatorDiscoveryModule;
import org.apache.druid.guice.DruidInjectorBuilder; import org.apache.druid.guice.DruidInjectorBuilder;
import org.apache.druid.guice.DruidSecondaryModule; import org.apache.druid.guice.DruidSecondaryModule;
import org.apache.druid.guice.ExpressionModule; import org.apache.druid.guice.ExpressionModule;
@ -106,8 +102,8 @@ public class CoreInjectorBuilder extends DruidInjectorBuilder
HttpClientModule.escalatedGlobal(), HttpClientModule.escalatedGlobal(),
new HttpClientModule("druid.broker.http", Client.class, true), new HttpClientModule("druid.broker.http", Client.class, true),
new HttpClientModule("druid.broker.http", EscalatedClient.class, true), new HttpClientModule("druid.broker.http", EscalatedClient.class, true),
new CuratorModule(), // new CuratorModule(),
new AnnouncerModule(), // new AnnouncerModule(),
new MetricsModule(), new MetricsModule(),
new SegmentWriteOutMediumModule(), new SegmentWriteOutMediumModule(),
new ServerModule(), new ServerModule(),
@ -115,12 +111,12 @@ public class CoreInjectorBuilder extends DruidInjectorBuilder
new JettyServerModule(), new JettyServerModule(),
new ExpressionModule(), new ExpressionModule(),
new NestedDataModule(), new NestedDataModule(),
new DiscoveryModule(), // new DiscoveryModule(),
new ServerViewModule(), new ServerViewModule(),
new MetadataConfigModule(), new MetadataConfigModule(),
new DerbyMetadataStorageDruidModule(), new DerbyMetadataStorageDruidModule(),
new JacksonConfigManagerModule(), new JacksonConfigManagerModule(),
new CoordinatorDiscoveryModule(), // new CoordinatorDiscoveryModule(),
new LocalDataStorageDruidModule(), new LocalDataStorageDruidModule(),
new TombstoneDataStorageModule(), new TombstoneDataStorageModule(),
new FirehoseModule(), new FirehoseModule(),

View File

@ -47,7 +47,6 @@ import org.apache.druid.guice.JsonConfigProvider;
import org.apache.druid.guice.LazySingleton; import org.apache.druid.guice.LazySingleton;
import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule; import org.apache.druid.guice.LegacyBrokerParallelMergeConfigModule;
import org.apache.druid.guice.LifecycleModule; import org.apache.druid.guice.LifecycleModule;
import org.apache.druid.guice.ManageLifecycle;
import org.apache.druid.guice.QueryRunnerFactoryModule; import org.apache.druid.guice.QueryRunnerFactoryModule;
import org.apache.druid.guice.QueryableModule; import org.apache.druid.guice.QueryableModule;
import org.apache.druid.guice.SegmentWranglerModule; import org.apache.druid.guice.SegmentWranglerModule;
@ -164,7 +163,7 @@ public class CliBroker extends ServerRunnable
LifecycleModule.register(binder, Server.class); LifecycleModule.register(binder, Server.class);
binder.bind(SegmentManager.class).in(LazySingleton.class); binder.bind(SegmentManager.class).in(LazySingleton.class);
binder.bind(ZkCoordinator.class).in(ManageLifecycle.class); // binder.bind(ZkCoordinator.class).in(ManageLifecycle.class);
binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER)); binder.bind(ServerTypeConfig.class).toInstance(new ServerTypeConfig(ServerType.BROKER));
Jerseys.addResource(binder, HistoricalResource.class); Jerseys.addResource(binder, HistoricalResource.class);
Jerseys.addResource(binder, SegmentListerResource.class); Jerseys.addResource(binder, SegmentListerResource.class);

View File

@ -26,6 +26,7 @@ import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.inject.Module;
import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.IAE;
import org.apache.druid.java.util.common.StringUtils; import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.query.topn.TopNQueryConfig; import org.apache.druid.query.topn.TopNQueryConfig;
@ -335,8 +336,19 @@ public class SqlTestFrameworkConfig
public static class ConfigurationInstance public static class ConfigurationInstance
{ {
public SqlTestFramework framework; public SqlTestFramework framework;
private SqlTestFrameworkConfig config;
private QueryComponentSupplier testHost;
ConfigurationInstance(SqlTestFrameworkConfig config, QueryComponentSupplier testHost) ConfigurationInstance(SqlTestFrameworkConfig config, QueryComponentSupplier testHost)
{
this.config = config;
this.testHost = testHost;
SqlTestFramework framework1 = extracted();
framework=framework1;
}
//FIXME remove
public SqlTestFramework extracted(Module ...modules)
{ {
SqlTestFramework.Builder builder = new SqlTestFramework.Builder(testHost) SqlTestFramework.Builder builder = new SqlTestFramework.Builder(testHost)
.withConfig(config) .withConfig(config)
@ -344,7 +356,12 @@ public class SqlTestFrameworkConfig
.minTopNThreshold(config.minTopNThreshold) .minTopNThreshold(config.minTopNThreshold)
.mergeBufferCount(config.numMergeBuffers) .mergeBufferCount(config.numMergeBuffers)
.withOverrideModule(config.resultCache.makeModule()); .withOverrideModule(config.resultCache.makeModule());
framework = builder.build(); for (Module m : modules) {
builder.withOverrideModule(m);
}
SqlTestFramework framework1 = builder.build();
return framework1;
} }
public ConfigurationInstance( public ConfigurationInstance(