Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import io.druid.guice.LazySingleton;
import io.druid.guice.annotations.Json;
import io.druid.jackson.DefaultObjectMapper;

@LazySingleton
public class DefaultGenericQueryMetricsFactory implements GenericQueryMetricsFactory
{
private static final GenericQueryMetricsFactory INSTANCE =
Expand Down
38 changes: 0 additions & 38 deletions processing/src/main/java/io/druid/query/GenericQueryConfig.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,15 @@
* This factory is used for DI of custom {@link QueryMetrics} implementations for all query types, which don't (yet)
* need to emit custom dimensions and/or metrics, i. e. they are good with the generic {@link QueryMetrics} interface.
*
* Implementations could be injected using {@link GenericQueryConfig#queryMetricsFactory} option.
* Implementations could be injected using
*
* PolyBind
* .optionBinder(binder, Key.get(GenericQueryMetricsFactory.class))
* .addBinding("myCustomGenericQueryMetricsFactory")
* .to(MyCustomGenericQueryMetricsFactory.class);
*
* And then setting property:
* druid.query.generic.queryMetricsFactory=myCustomGenericQueryMetricsFactory
*/
public interface GenericQueryMetricsFactory
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import io.druid.guice.LazySingleton;
import io.druid.guice.annotations.Json;
import io.druid.jackson.DefaultObjectMapper;

@LazySingleton
public class DefaultGroupByQueryMetricsFactory implements GroupByQueryMetricsFactory
{
private static final GroupByQueryMetricsFactory INSTANCE =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,6 @@ public class GroupByQueryConfig
// Max on-disk temporary storage, per-query; when exceeded, the query fails
private long maxOnDiskStorage = 0L;

@JsonProperty
private Class<? extends GroupByQueryMetricsFactory> queryMetricsFactory;

public String getDefaultStrategy()
{
return defaultStrategy;
Expand Down Expand Up @@ -129,16 +126,6 @@ public long getMaxOnDiskStorage()
return maxOnDiskStorage;
}

public Class<? extends GroupByQueryMetricsFactory> getQueryMetricsFactory()
{
return queryMetricsFactory != null ? queryMetricsFactory : DefaultGroupByQueryMetricsFactory.class;
}

public void setQueryMetricsFactory(Class<? extends GroupByQueryMetricsFactory> queryMetricsFactory)
{
this.queryMetricsFactory = queryMetricsFactory;
}

public GroupByQueryConfig withOverrides(final GroupByQuery query)
{
final GroupByQueryConfig newConfig = new GroupByQueryConfig();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@
package io.druid.query.groupby;

/**
* Implementations of this interface could be injected using {@link GroupByQueryConfig#queryMetricsFactory} option.
* Implementations could be injected using
*
* PolyBind
* .optionBinder(binder, Key.get(GroupByQueryMetricsFactory.class))
* .addBinding("myCustomGroupByQueryMetricsFactory")
* .to(MyCustomGroupByQueryMetricsFactory.class);
*
* And then setting property:
* druid.query.groupBy.queryMetricsFactory=myCustomGroupByQueryMetricsFactory
*/
public interface GroupByQueryMetricsFactory
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import io.druid.guice.LazySingleton;
import io.druid.guice.annotations.Json;
import io.druid.jackson.DefaultObjectMapper;

@LazySingleton
public class DefaultTimeseriesQueryMetricsFactory implements TimeseriesQueryMetricsFactory
{
private static final TimeseriesQueryMetricsFactory INSTANCE =
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@
package io.druid.query.timeseries;

/**
* Implementations of this interface could be injected using {@link TimeseriesQueryConfig#queryMetricsFactory} option.
* Implementations could be injected using
*
* PolyBind
* .optionBinder(binder, Key.get(TimeseriesQueryMetricsFactory.class))
* .addBinding("myCustomTimeseriesQueryMetricsFactory")
* .to(MyCustomTimeseriesQueryMetricsFactory.class);
*
* And then setting property:
* druid.query.timeseries.queryMetricsFactory=myCustomTimeseriesQueryMetricsFactory
*/
public interface TimeseriesQueryMetricsFactory
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import io.druid.guice.LazySingleton;
import io.druid.guice.annotations.Json;
import io.druid.jackson.DefaultObjectMapper;

@LazySingleton
public class DefaultTopNQueryMetricsFactory implements TopNQueryMetricsFactory
{
private static final TopNQueryMetricsFactory INSTANCE = new DefaultTopNQueryMetricsFactory(new DefaultObjectMapper());
Expand Down
13 changes: 0 additions & 13 deletions processing/src/main/java/io/druid/query/topn/TopNQueryConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,8 @@ public class TopNQueryConfig
@Min(1)
private int minTopNThreshold = 1000;

@JsonProperty
private Class<? extends TopNQueryMetricsFactory> queryMetricsFactory;

public int getMinTopNThreshold()
{
return minTopNThreshold;
}

public Class<? extends TopNQueryMetricsFactory> getQueryMetricsFactory()
{
return queryMetricsFactory != null ? queryMetricsFactory : DefaultTopNQueryMetricsFactory.class;
}

public void setQueryMetricsFactory(Class<? extends TopNQueryMetricsFactory> queryMetricsFactory)
{
this.queryMetricsFactory = queryMetricsFactory;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@
package io.druid.query.topn;

/**
* Implementations of this interface could be injected using {@link TopNQueryConfig#queryMetricsFactory} option.
* Implementations could be injected using
*
* PolyBind
* .optionBinder(binder, Key.get(TopNQueryMetricsFactory.class))
* .addBinding("myCustomTopNQueryMetricsFactory")
* .to(MyCustomTopNQueryMetricsFactory.class);
*
* And then setting property:
* druid.query.topN.queryMetricsFactory=myCustomTopNQueryMetricsFactory
*/
public interface TopNQueryMetricsFactory
{
Expand Down
76 changes: 50 additions & 26 deletions server/src/main/java/io/druid/guice/QueryToolChestModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@

import com.google.common.collect.ImmutableMap;
import com.google.inject.Binder;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.Provides;
import com.google.inject.multibindings.MapBinder;
import io.druid.query.GenericQueryConfig;
import io.druid.query.DefaultGenericQueryMetricsFactory;
import io.druid.query.GenericQueryMetricsFactory;
import io.druid.query.MapQueryToolChestWarehouse;
import io.druid.query.Query;
import io.druid.query.QueryToolChest;
import io.druid.query.QueryToolChestWarehouse;
import io.druid.query.datasourcemetadata.DataSourceMetadataQuery;
import io.druid.query.datasourcemetadata.DataSourceQueryQueryToolChest;
import io.druid.query.groupby.DefaultGroupByQueryMetricsFactory;
import io.druid.query.groupby.GroupByQuery;
import io.druid.query.groupby.GroupByQueryConfig;
import io.druid.query.groupby.GroupByQueryMetricsFactory;
Expand All @@ -48,10 +48,11 @@
import io.druid.query.select.SelectQueryQueryToolChest;
import io.druid.query.timeboundary.TimeBoundaryQuery;
import io.druid.query.timeboundary.TimeBoundaryQueryQueryToolChest;
import io.druid.query.timeseries.DefaultTimeseriesQueryMetricsFactory;
import io.druid.query.timeseries.TimeseriesQuery;
import io.druid.query.timeseries.TimeseriesQueryConfig;
import io.druid.query.timeseries.TimeseriesQueryMetricsFactory;
import io.druid.query.timeseries.TimeseriesQueryQueryToolChest;
import io.druid.query.topn.DefaultTopNQueryMetricsFactory;
import io.druid.query.topn.TopNQuery;
import io.druid.query.topn.TopNQueryConfig;
import io.druid.query.topn.TopNQueryMetricsFactory;
Expand All @@ -63,6 +64,11 @@
*/
public class QueryToolChestModule implements Module
{
public static final String GENERIC_QUERY_METRICS_FACTORY_PROPERTY = "druid.query.generic.queryMetricsFactory";
public static final String GROUPBY_QUERY_METRICS_FACTORY_PROPERTY = "druid.query.groupBy.queryMetricsFactory";
public static final String TIMESERIES_QUERY_METRICS_FACTORY_PROPERTY = "druid.query.timeseries.queryMetricsFactory";
public static final String TOPN_QUERY_METRICS_FACTORY_PROPERTY = "druid.query.topN.queryMetricsFactory";

public final Map<Class<? extends Query>, Class<? extends QueryToolChest>> mappings =
ImmutableMap.<Class<? extends Query>, Class<? extends QueryToolChest>>builder()
.put(TimeseriesQuery.class, TimeseriesQueryQueryToolChest.class)
Expand All @@ -87,36 +93,54 @@ public void configure(Binder binder)

binder.bind(QueryToolChestWarehouse.class).to(MapQueryToolChestWarehouse.class);

JsonConfigProvider.bind(binder, "druid.query.generic", GenericQueryConfig.class);
JsonConfigProvider.bind(binder, "druid.query.groupBy", GroupByQueryConfig.class);
JsonConfigProvider.bind(binder, "druid.query.search", SearchQueryConfig.class);
JsonConfigProvider.bind(binder, "druid.query.timeseries", TimeseriesQueryConfig.class);
JsonConfigProvider.bind(binder, "druid.query.topN", TopNQueryConfig.class);
JsonConfigProvider.bind(binder, "druid.query.segmentMetadata", SegmentMetadataQueryConfig.class);
JsonConfigProvider.bind(binder, "druid.query.select", SelectQueryConfig.class);
}

@Provides
public GenericQueryMetricsFactory getGenericQueryMetricsFactory(Injector injector, GenericQueryConfig config)
{
return injector.getInstance(config.getQueryMetricsFactory());
}
PolyBind.createChoice(
binder,
GENERIC_QUERY_METRICS_FACTORY_PROPERTY,
Key.get(GenericQueryMetricsFactory.class),
Key.get(DefaultGenericQueryMetricsFactory.class)
);
PolyBind
.optionBinder(binder, Key.get(GenericQueryMetricsFactory.class))
.addBinding("default")
.to(DefaultGenericQueryMetricsFactory.class);

@Provides
public GroupByQueryMetricsFactory getGroupByQueryMetricsFactory(Injector injector, GroupByQueryConfig config)
{
return injector.getInstance(config.getQueryMetricsFactory());
}
PolyBind.createChoice(
binder,
GROUPBY_QUERY_METRICS_FACTORY_PROPERTY,
Key.get(GroupByQueryMetricsFactory.class),
Key.get(DefaultGroupByQueryMetricsFactory.class)
);
PolyBind
.optionBinder(binder, Key.get(GroupByQueryMetricsFactory.class))
.addBinding("default")
.to(DefaultGroupByQueryMetricsFactory.class);

@Provides
public TimeseriesQueryMetricsFactory getTimeseriesQueryMetricsFactory(Injector injector, TimeseriesQueryConfig config)
{
return injector.getInstance(config.getQueryMetricsFactory());
}
PolyBind.createChoice(
binder,
TIMESERIES_QUERY_METRICS_FACTORY_PROPERTY,
Key.get(TimeseriesQueryMetricsFactory.class),
Key.get(DefaultTimeseriesQueryMetricsFactory.class)
);
PolyBind
.optionBinder(binder, Key.get(TimeseriesQueryMetricsFactory.class))
.addBinding("default")
.to(DefaultTimeseriesQueryMetricsFactory.class);

@Provides
public TopNQueryMetricsFactory getTopNQueryMetricsFactory(Injector injector, TopNQueryConfig config)
{
return injector.getInstance(config.getQueryMetricsFactory());
PolyBind.createChoice(
binder,
TOPN_QUERY_METRICS_FACTORY_PROPERTY,
Key.get(TopNQueryMetricsFactory.class),
Key.get(DefaultTopNQueryMetricsFactory.class)
);
PolyBind
.optionBinder(binder, Key.get(TopNQueryMetricsFactory.class))
.addBinding("default")
.to(DefaultTopNQueryMetricsFactory.class);
}
}