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;