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 2015/01/29 08:40:32 UTC
svn commit: r1655541 - in /lucene/dev/trunk/solr:
core/src/java/org/apache/solr/core/ core/src/test/org/apache/solr/core/
core/src/test/org/apache/solr/handler/
solrj/src/java/org/apache/solr/common/params/
Author: noble
Date: Thu Jan 29 07:40:32 2015
New Revision: 1655541
URL: http://svn.apache.org/r1655541
Log:
SOLR-7059: Using paramset with multi-valued keys leads to a 500. SolrParams need an aray instead of a list
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestParams.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java
lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/MapSolrParams.java
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestParams.java?rev=1655541&r1=1655540&r2=1655541&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestParams.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/RequestParams.java Thu Jan 29 07:40:32 2015
@@ -23,6 +23,7 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import org.apache.solr.cloud.ZkSolrResourceLoader;
@@ -58,7 +59,7 @@ public class RequestParams implements Ma
Map.Entry e = (Map.Entry) o;
if (e.getValue() instanceof Map) {
Map value = (Map) e.getValue();
- Map copy = new LinkedHashMap<>(value);
+ Map copy = getMapCopy(value);
Map meta = (Map) copy.remove("");
this.paramsets.put((String) e.getKey(), new VersionedParams(Collections.unmodifiableMap(copy) ,meta));
}
@@ -67,6 +68,32 @@ public class RequestParams implements Ma
this.znodeVersion = znodeVersion;
}
+ private static Map getMapCopy(Map value) {
+ Map copy = new LinkedHashMap<>();
+ for (Object o1 : value.entrySet()) {
+ Map.Entry entry = (Map.Entry) o1;
+ if("".equals( entry.getKey())){
+ copy.put(entry.getKey(),entry.getValue());
+ continue;
+ }
+ if (entry.getValue() != null) {
+ if (entry.getValue() instanceof List) {
+ List l = (List) entry.getValue();
+ String[] sarr = new String[l.size()];
+ for (int i = 0; i < l.size(); i++) {
+ if( l.get(i) != null) sarr[i]= String.valueOf(l.get(i));
+ }
+ copy.put(entry.getKey(), sarr);
+ } else {
+ copy.put(entry.getKey(), String.valueOf(entry.getValue()));
+ }
+ } else {
+ copy.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return copy;
+ }
+
public VersionedParams getParams(String name){
return paramsets.get(name);
}
@@ -77,7 +104,7 @@ public class RequestParams implements Ma
@Override
public Map<String, Object> toMap() {
- return getMapWithVersion(data,znodeVersion);
+ return getMapWithVersion(data, znodeVersion);
}
public static Map<String, Object> getMapWithVersion(Map<String, Object> data, int znodeVersion) {
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java?rev=1655541&r1=1655540&r2=1655541&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java Thu Jan 29 07:40:32 2015
@@ -22,6 +22,7 @@ import com.google.common.collect.Immutab
import org.apache.commons.io.FileUtils;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.handler.TestSolrConfigHandlerCloud;
import org.apache.solr.handler.TestSolrConfigHandlerConcurrent;
import org.apache.solr.util.RestTestBase;
import org.apache.solr.util.RestTestHarness;
@@ -47,8 +48,10 @@ import java.util.SortedMap;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
+import static java.util.Arrays.asList;
import static org.apache.solr.core.ConfigOverlay.getObjectByPath;
import static org.apache.solr.handler.TestBlobHandler.getAsString;
+import static org.apache.solr.handler.TestSolrConfigHandlerCloud.compareValues;
public class TestSolrConfigHandler extends RestTestBase {
public static final Logger log = LoggerFactory.getLogger(TestSolrConfigHandler.class);
@@ -341,7 +344,8 @@ public class TestSolrConfigHandler exten
payload = " {\n" +
" 'set' : {'y':{\n" +
" 'c':'CY val',\n" +
- " 'b': 'BY val'}\n" +
+ " 'b': 'BY val', " +
+ " 'd': ['val 1', 'val 2']}\n" +
" }\n" +
" }";
@@ -384,6 +388,15 @@ public class TestSolrConfigHandler exten
null,
5);
+ TestSolrConfigHandler.testForResponseElement(
+ harness,
+ null,
+ "/dump1?wt=json&useParams=y",
+ null,
+ Arrays.asList("params", "d"),
+ Arrays.asList("val 1", "val 2") ,
+ 5);
+
payload = " {\n" +
" 'update' : {'y': {\n" +
" 'c':'CY val modified',\n" +
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java?rev=1655541&r1=1655540&r2=1655541&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java Thu Jan 29 07:40:32 2015
@@ -20,10 +20,12 @@ package org.apache.solr.handler;
import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
@@ -174,7 +176,9 @@ public class TestSolrConfigHandlerCloud
payload = " {\n" +
" 'set' : {'y':{\n" +
" 'c':'CY val',\n" +
- " 'b': 'BY val'}\n" +
+ " 'b': 'BY val', " +
+ " 'i': 20, " +
+ " 'd': ['val 1', 'val 2']}\n" +
" }\n" +
" }";
@@ -189,6 +193,8 @@ public class TestSolrConfigHandlerCloud
asList("response", "params", "y", "c"),
"CY val",
10);
+ compareValues(result, 20l, asList("response", "params", "y", "i"));
+
result = TestSolrConfigHandler.testForResponseElement(null,
urls.get(random().nextInt(urls.size())),
@@ -199,6 +205,8 @@ public class TestSolrConfigHandlerCloud
5);
compareValues(result, "BY val", asList("params", "b"));
compareValues(result, null, asList("params", "a"));
+ compareValues(result, Arrays.asList("val 1", "val 2") , asList("params", "d"));
+ compareValues(result, "20" , asList("params", "i"));
payload = " {\n" +
" 'update' : {'y': {\n" +
" 'c':'CY val modified',\n" +
@@ -256,7 +264,7 @@ public class TestSolrConfigHandlerCloud
}
- public static void compareValues(Map result, String expected, List<String> jsonPath) {
+ public static void compareValues(Map result, Object expected, List<String> jsonPath) {
assertTrue(MessageFormat.format("Could not get expected value {0} for path {1} full output {2}", expected, jsonPath, getAsString(result)),
Objects.equals(expected, ConfigOverlay.getObjectByPath(result, false, jsonPath)));
}
Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/MapSolrParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/MapSolrParams.java?rev=1655541&r1=1655540&r2=1655541&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/MapSolrParams.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/MapSolrParams.java Thu Jan 29 07:40:32 2015
@@ -19,6 +19,7 @@ package org.apache.solr.common.params;
import org.apache.solr.common.util.StrUtils;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
import java.io.IOException;
@@ -35,13 +36,22 @@ public class MapSolrParams extends SolrP
@Override
public String get(String name) {
- return map.get(name);
+ Object o = map.get(name);
+ if(o == null) return null;
+ if (o instanceof String) return (String) o;
+ if (o instanceof String[]) {
+ String[] strings = (String[]) o;
+ if(strings.length == 0) return null;
+ return strings[0];
+ }
+ return String.valueOf(o);
}
@Override
public String[] getParams(String name) {
- String val = map.get(name);
- return val==null ? null : new String[]{val};
+ Object val = map.get(name);
+ if (val instanceof String[]) return (String[]) val;
+ return val==null ? null : new String[]{String.valueOf(val)};
}
@Override
@@ -59,13 +69,16 @@ public class MapSolrParams extends SolrP
for (Map.Entry<String,String> entry : map.entrySet()) {
String key = entry.getKey();
- String val = entry.getValue();
-
+ Object val = entry.getValue();
+ if (val instanceof String[]) {
+ String[] strings = (String[]) val;
+ val = StrUtils.join(Arrays.asList(strings),',');
+ }
if (!first) sb.append('&');
first=false;
sb.append(key);
sb.append('=');
- StrUtils.partialURLEncodeVal(sb, val==null ? "" : val);
+ StrUtils.partialURLEncodeVal(sb, val==null ? "" : String.valueOf(val));
}
}
catch (IOException e) {throw new RuntimeException(e);} // can't happen