SOLR-14977: improved plugin configuration (#2099)

This commit is contained in:
Noble Paul 2020-12-15 14:18:09 +11:00 committed by GitHub
parent ecf152279b
commit 94c69f4385
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 17 deletions

View File

@ -34,6 +34,7 @@ import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.common.SolrException;
@ -64,7 +65,8 @@ import org.slf4j.LoggerFactory;
public class AnnotatedApi extends Api implements PermissionNameProvider , Closeable {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final ObjectMapper mapper = SolrJacksonAnnotationInspector.createObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.disable(MapperFeature.AUTO_DETECT_FIELDS);
public static final String ERR = "Error executing commands :";
private EndPoint endPoint;

View File

@ -24,16 +24,12 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Supplier;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.lucene.util.ResourceLoaderAware;
import org.apache.solr.client.solrj.SolrRequest;
@ -73,7 +69,8 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final ObjectMapper mapper = SolrJacksonAnnotationInspector.createObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.disable(MapperFeature.AUTO_DETECT_FIELDS);
private final List<PluginRegistryListener> listeners = new CopyOnWriteArrayList<>();
@ -390,9 +387,11 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
}
if (instance instanceof ConfigurablePlugin) {
Class<? extends MapWriter> c = getConfigClass((ConfigurablePlugin<? extends MapWriter>) instance);
if (c != null && holder.meta.config != null) {
MapWriter initVal = mapper.readValue(Utils.toJSON(holder.meta.config), c);
((ConfigurablePlugin) instance).configure(initVal);
if (c != null) {
Map<String, Object> original = (Map<String, Object>) holder.original.getOrDefault("config", Collections.emptyMap());
holder.meta.config = mapper.readValue(Utils.toJSON(original), c);
((ConfigurablePlugin) instance).configure(holder.meta.config);
}
}
if (instance instanceof ResourceLoaderAware) {
@ -437,10 +436,6 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
public ApiInfo createInfo(Map<String,Object> info, List<String> errs) throws IOException {
return new ApiInfo(new PluginMetaHolder(info), errs);
}
public ApiInfo createInfo(PluginMetaHolder info, List<String> errs) {
return new ApiInfo(info, errs);
}
public enum Diff {

View File

@ -17,8 +17,10 @@
package org.apache.solr.client.solrj.request.beans;
import java.io.IOException;
import java.util.Objects;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.annotation.JsonProperty;
import org.apache.solr.common.util.ReflectMapWriter;
@ -43,8 +45,8 @@ public class PluginMeta implements ReflectMapWriter {
public String pathPrefix;
/** Plugin configuration object, optional. */
@JsonProperty
public Object config;
public MapWriter config;
public PluginMeta copy() {
@ -56,6 +58,12 @@ public class PluginMeta implements ReflectMapWriter {
return result;
}
@Override
public void writeMap(EntryWriter ew) throws IOException {
ReflectMapWriter.super.writeMap(ew);
ew.putIfNotNull("config", config);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof PluginMeta) {
@ -63,6 +71,7 @@ public class PluginMeta implements ReflectMapWriter {
return Objects.equals(this.name, that.name) &&
Objects.equals(this.klass, that.klass) &&
Objects.equals(this.version, that.version) &&
Objects.equals(this.config, that.config);
}
return false;