You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2020/12/15 03:18:28 UTC
[lucene-solr] branch master updated: SOLR-14977: improved plugin
configuration (#2099)
This is an automated email from the ASF dual-hosted git repository.
noble pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new 94c69f4 SOLR-14977: improved plugin configuration (#2099)
94c69f4 is described below
commit 94c69f43851e284804849b0d7a38d18427386114
Author: Noble Paul <no...@users.noreply.github.com>
AuthorDate: Tue Dec 15 14:18:09 2020 +1100
SOLR-14977: improved plugin configuration (#2099)
---
.../src/java/org/apache/solr/api/AnnotatedApi.java | 4 +++-
.../apache/solr/api/ContainerPluginsRegistry.java | 23 +++++++++-------------
.../client/solrj/request/beans/PluginMeta.java | 13 ++++++++++--
3 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java b/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
index 9ec86ce..7b57069 100644
--- a/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
+++ b/solr/core/src/java/org/apache/solr/api/AnnotatedApi.java
@@ -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;
diff --git a/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java b/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
index 9fa0261..8f1d386 100644
--- a/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
+++ b/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
@@ -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) {
@@ -438,10 +437,6 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
return new ApiInfo(new PluginMetaHolder(info), errs);
}
- public ApiInfo createInfo(PluginMetaHolder info, List<String> errs) {
- return new ApiInfo(info, errs);
-
- }
public enum Diff {
ADDED, REMOVED, UNCHANGED, UPDATED
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java
index bab68b2..5aa8532 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java
@@ -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() {
@@ -57,12 +59,19 @@ public class PluginMeta implements ReflectMapWriter {
}
@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;