Skip to content

Commit

Permalink
apache#3318 Fix config query
Browse files Browse the repository at this point in the history
  • Loading branch information
navis committed Aug 13, 2020
1 parent 66be888 commit 50cac88
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 17 deletions.
13 changes: 8 additions & 5 deletions common/src/main/java/io/druid/guice/JsonConfigProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ public static <T> void bind(
Key<Supplier<T>> supplierKey
)
{
binder.bind(supplierKey).toProvider((Provider) of(propertyBase, clazz, defaultValue)).in(LazySingleton.class);
binder.bind(supplierKey).toProvider(of(propertyBase, clazz, defaultValue)).in(LazySingleton.class);
binder.bind(instanceKey).toProvider(new SupplierProvider<T>(supplierKey));
BASE_TO_CLASS.put(propertyBase, supplierKey);
}
Expand Down Expand Up @@ -252,7 +252,8 @@ public static <T> JsonConfigProvider<T> of(String propertyBase, Class<T> classTo
private Properties props;
private JsonConfigurator configurator;

private Supplier<T> retVal = null;
private Map<String, String> overrides = Maps.newHashMap();
private Supplier<T> retVal;

public JsonConfigProvider(
String propertyBase,
Expand Down Expand Up @@ -283,7 +284,7 @@ public Supplier<T> get()
}

try {
final T config = configurator.configurate(props, propertyBase, classToProvide, defaultValue, null);
final T config = configurator.configurate(props, propertyBase, classToProvide, defaultValue, overrides);
retVal = Suppliers.ofInstance(config);
}
catch (RuntimeException e) {
Expand All @@ -299,9 +300,11 @@ public Supplier<T> get()

private void configure(Map<String, String> properties)
{
Supplier<T> supplier = get();
Map<String, String> overriding = Maps.newHashMap(overrides);
overriding.putAll(properties);
retVal = Suppliers.ofInstance(
configurator.configurate(props, propertyBase, classToProvide, supplier.get(), properties)
configurator.configurate(props, propertyBase, classToProvide, defaultValue, overriding)
);
overrides = overriding;
}
}
3 changes: 2 additions & 1 deletion common/src/main/java/io/druid/guice/JsonConfigurator.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import com.google.inject.Inject;
import com.google.inject.ProvisionException;
import com.google.inject.spi.Message;
import io.druid.common.guava.GuavaUtils;
import io.druid.java.util.common.logger.Logger;

import javax.validation.ConstraintViolation;
Expand Down Expand Up @@ -129,7 +130,7 @@ public <T> T configurate(
values.put(prop.substring(propertyBase.length()), value);
}
}
if (override != null) {
if (!GuavaUtils.isNullOrEmpty(override)) {
values.putAll(override);
}

Expand Down
7 changes: 7 additions & 0 deletions server/src/main/java/io/druid/query/config/ConfigQuery.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Ordering;
import io.druid.client.DruidServer;
import io.druid.query.BaseQuery;
import io.druid.query.DataSource;
Expand Down Expand Up @@ -114,6 +115,12 @@ public Map<String, Map<String, String>> getConfig()
return config;
}

@Override
public Ordering<Map<String, Object>> getMergeOrdering()
{
return null;
}

@Override
public List<DruidServer> filter(List<DruidServer> servers)
{
Expand Down
38 changes: 27 additions & 11 deletions server/src/main/java/io/druid/server/http/AdminResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,14 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.google.common.base.Supplier;
import com.google.common.base.Throwables;
import com.google.common.collect.Maps;
import com.google.inject.Injector;
import io.druid.common.guava.GuavaUtils;
import io.druid.common.utils.StringUtils;
import io.druid.common.utils.VMUtils;
import io.druid.guice.JsonConfigProvider;
import io.druid.guice.annotations.Json;
import io.druid.guice.annotations.Self;
import io.druid.java.util.common.IAE;
Expand Down Expand Up @@ -78,17 +81,20 @@ public class AdminResource
private final DruidNode node;
private final Shutdown.Proc shutdown;
private final ObjectMapper objectMapper;
private final Injector injector;

@Inject
public AdminResource(
@Self DruidNode node,
@Shutdown Shutdown.Proc shutdown,
@Json ObjectMapper objectMapper
@Json ObjectMapper objectMapper,
Injector injector
)
{
this.node = node;
this.shutdown = shutdown;
this.objectMapper = objectMapper;
this.injector = injector;
}

@GET
Expand Down Expand Up @@ -116,6 +122,16 @@ public Response jmx(@QueryParam("pretty") String pretty)
return Response.ok(result).build();
}

@GET
@Path("/config/{configKey}")
@Produces(MediaType.TEXT_PLAIN)
public Response getConfig(@PathParam("configKey") String configKey) throws JsonProcessingException
{
final Object value = JsonConfigProvider.get(injector, configKey);
final Object entity = value instanceof Supplier ? ((Supplier) value).get() : value;
return Response.ok(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(entity)).build();
}

@GET
@Path("/stack")
@Produces(MediaType.TEXT_PLAIN)
Expand Down Expand Up @@ -173,6 +189,16 @@ public Response setLogLevel(@PathParam("name") String name, @PathParam("level")
return handleLogLevel(name, level);
}

private Response handleLogLevel(String name, Level level)
{
LoggerContext context = (LoggerContext) LogManager.getContext(false);
Logger logger = "root".equalsIgnoreCase(name) ? context.getRootLogger() : context.getLogger(name);
if (level != null) {
logger.setLevel(level);
}
return Response.ok(String.format("%s --> %s", name, logger.getLevel())).build();
}

@GET
@Path("/jcmd/help")
@Produces(MediaType.APPLICATION_JSON)
Expand Down Expand Up @@ -210,16 +236,6 @@ public Response jcmd(
return Response.ok(VMUtils.jcmd(command, params)).build();
}

private Response handleLogLevel(String name, Level level)
{
LoggerContext context = (LoggerContext) LogManager.getContext(false);
Logger logger = "root".equalsIgnoreCase(name) ? context.getRootLogger() : context.getLogger(name);
if (level != null) {
logger.setLevel(level);
}
return Response.ok(String.format("%s --> %s", name, logger.getLevel())).build();
}

private static final int DEFAULT_LOG_QUEUE_SIZE = 1024;
private static final int DEFAULT_LOG_POLLING_SEC = 300; // 5 min

Expand Down

0 comments on commit 50cac88

Please sign in to comment.