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 2016/06/08 19:05:33 UTC

lucene-solr:branch_6x: SOLR-9198: config APIs unable to add multiple values with same name

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x ded16f8f1 -> 73b73f068


SOLR-9198: config APIs unable to add multiple values with same name


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/73b73f06
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/73b73f06
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/73b73f06

Branch: refs/heads/branch_6x
Commit: 73b73f068b1c513df6c87c41c12eece083c321e1
Parents: ded16f8
Author: Noble Paul <no...@apache.org>
Authored: Thu Jun 9 00:32:35 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Thu Jun 9 00:35:12 2016 +0530

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  2 ++
 .../java/org/apache/solr/core/PluginInfo.java   | 16 +++++++++++--
 .../apache/solr/core/TestSolrConfigHandler.java | 24 ++++++++++++++++++++
 3 files changed, 40 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73b73f06/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 5acf1ef..4f35d8b 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -227,6 +227,8 @@ Bug Fixes
 
 * SOLR-8676: keep LOG4J_CONFIG in solr.cmd (Kristine Jetzke via Mikhail Khludnev)
 
+* SOLR-9198: config APIs unable to add multiple values with same name (noble)
+
 Optimizations
 ----------------------
 * SOLR-8722: Don't force a full ZkStateReader refresh on every Overseer operation.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73b73f06/solr/core/src/java/org/apache/solr/core/PluginInfo.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/PluginInfo.java b/solr/core/src/java/org/apache/solr/core/PluginInfo.java
index c6fe42c..832c8c2 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginInfo.java
+++ b/solr/core/src/java/org/apache/solr/core/PluginInfo.java
@@ -67,8 +67,20 @@ public class PluginInfo implements MapSerializable{
     for (Map.Entry<String, Object> entry : map.entrySet()) {
       if (NAME.equals(entry.getKey()) || CLASS_NAME.equals(entry.getKey())) continue;
       Object value = entry.getValue();
-      if (value instanceof Map) value = new NamedList((Map) value);
-      initArgs.add(entry.getKey(), value);
+      if (value instanceof List) {
+        List list = (List) value;
+        if (!list.isEmpty() && list.get(0) instanceof Map) {//this is a subcomponent
+          for (Object o : list) {
+            if (o instanceof Map) o = new NamedList<>((Map) o);
+            initArgs.add(entry.getKey(), o);
+          }
+        } else {
+          initArgs.add(entry.getKey(), value);
+        }
+      } else {
+        if (value instanceof Map) value = new NamedList((Map) value);
+        initArgs.add(entry.getKey(), value);
+      }
     }
     this.type = type;
     this.name = (String) m.get(NAME);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73b73f06/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java b/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
index 2d4a42a..250ccf0 100644
--- a/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
+++ b/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
@@ -426,6 +426,30 @@ public class TestSolrConfigHandler extends RestTestBase {
         Arrays.asList("config", "searchComponent","myspellcheck", "spellchecker", "class"),
         "solr.DirectSolrSpellChecker",
         10);
+
+    payload = "{\n" +
+        "    'add-requesthandler': {\n" +
+        "        name : '/dump100',\n" +
+        "        class : 'org.apache.solr.handler.DumpRequestHandler'," +
+        "        suggester: [{name: s1,lookupImpl: FuzzyLookupFactory, dictionaryImpl : DocumentDictionaryFactory}," +
+        "                    {name: s2,lookupImpl: FuzzyLookupFactory , dictionaryImpl : DocumentExpressionDictionaryFactory}]" +
+        "    }\n" +
+        "}";
+    runConfigCommand(writeHarness, "/config?wt=json", payload);
+    map = testForResponseElement(writeHarness,
+        testServerBaseUrl,
+        "/config?wt=json",
+        cloudSolrClient,
+        Arrays.asList("config", "requestHandler","/dump100", "class"),
+        "org.apache.solr.handler.DumpRequestHandler",
+        10);
+
+    map = getRespMap("/dump100?wt=json&json.nl=arrmap&initArgs=true", writeHarness);
+    List initArgs = (List) map.get("initArgs");
+    assertEquals(2, initArgs.size());
+    assertTrue(((Map)initArgs.get(0)).containsKey("suggester"));
+    assertTrue(((Map)initArgs.get(1)).containsKey("suggester"));
+    System.out.println(map);
   }
 
   public static Map testForResponseElement(RestTestHarness harness,