Skip to content

Commit

Permalink
SOLR-14977: improved plugin configuration (apache#2099)
Browse files Browse the repository at this point in the history
  • Loading branch information
noblepaul authored and epugh@opensourceconnections.com committed Jan 15, 2021
1 parent cb494a6 commit 7d19c90
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 17 deletions.
4 changes: 3 additions & 1 deletion solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
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;
Expand Down Expand Up @@ -64,7 +65,8 @@
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,12 @@
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;
Expand Down Expand Up @@ -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<>();

Expand Down Expand Up @@ -390,9 +387,11 @@ public void init() throws Exception {
}
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) {
Expand Down Expand Up @@ -437,10 +436,6 @@ public static Class getConfigClass(ConfigurablePlugin<?> o) {
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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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() {
Expand All @@ -56,13 +58,20 @@ public PluginMeta copy() {
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) {
PluginMeta that = (PluginMeta) obj;
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;
Expand Down

0 comments on commit 7d19c90

Please sign in to comment.