mirror of https://github.com/apache/lucene.git
SOLR-14122: SimUtils converts v2 to v1 request params incorrectly.
This commit is contained in:
parent
b1bb7bf8c2
commit
38b9af21f1
|
@ -85,7 +85,6 @@ Improvements
|
|||
|
||||
* SOLR-13749: New cross collection join filter (XCJF) (Dan Fox, Kevin Watters, via Gus Heck)
|
||||
|
||||
|
||||
Other Changes
|
||||
----------------------
|
||||
* SOLR-10288: Remove non-minified JavaScript from the webapp. (Erik Hatcher, marcussorealheis)
|
||||
|
@ -203,6 +202,8 @@ Bug Fixes
|
|||
|
||||
* SOLR-14109: Always log to stdout from server/scripts/cloud-scripts/zkcli.{bat|sh} (janhoy)
|
||||
|
||||
* SOLR-14122: SimUtils converts v2 to v1 request params incorrectly. (Li Cao, ab)
|
||||
|
||||
Other Changes
|
||||
---------------------
|
||||
|
||||
|
|
|
@ -330,32 +330,47 @@ public class SimUtils {
|
|||
private static final Map<String, String> v2v1Mapping = new HashMap<>();
|
||||
static {
|
||||
for (CollectionApiMapping.Meta meta : CollectionApiMapping.Meta.values()) {
|
||||
if (meta.action != null) v2v1Mapping.put(meta.commandName, meta.action.toLower());
|
||||
if (meta.action != null) {
|
||||
String key;
|
||||
if (meta.commandName != null) {
|
||||
key = meta.commandName;
|
||||
} else {
|
||||
key = meta.action.toLower();
|
||||
}
|
||||
v2v1Mapping.put(key, meta.action.toLower());
|
||||
} else {
|
||||
log.warn("V2 action " + meta + " has no equivalent V1 action");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a V2 {@link org.apache.solr.client.solrj.request.CollectionAdminRequest} to regular {@link org.apache.solr.common.params.SolrParams}
|
||||
* @param req request
|
||||
* @return payload converted to V1 params
|
||||
* @return request payload and parameters converted to V1 params
|
||||
*/
|
||||
public static ModifiableSolrParams v2AdminRequestToV1Params(V2Request req) {
|
||||
Map<String, Object> reqMap = new HashMap<>();
|
||||
((V2Request)req).toMap(reqMap);
|
||||
req.toMap(reqMap);
|
||||
String path = (String)reqMap.get("path");
|
||||
if (!path.startsWith("/c/") || path.length() < 4) {
|
||||
if (!(path.startsWith("/c/") || path.startsWith("/collections/")) || path.length() < 4) {
|
||||
throw new UnsupportedOperationException("Unsupported V2 request path: " + reqMap);
|
||||
}
|
||||
Map<String, Object> cmd = (Map<String, Object>)reqMap.get("command");
|
||||
Map<String, Object> cmd;
|
||||
Object cmdObj = reqMap.get("command");
|
||||
if (cmdObj instanceof String) {
|
||||
cmd = (Map<String, Object>)Utils.fromJSONString((String)cmdObj);
|
||||
} else if (cmdObj instanceof Map) {
|
||||
cmd = (Map<String, Object>)cmdObj;
|
||||
} else {
|
||||
throw new UnsupportedOperationException("Unsupported 'command': " + cmdObj + " (of type " + cmdObj.getClass() + ")");
|
||||
}
|
||||
if (cmd.size() != 1) {
|
||||
throw new UnsupportedOperationException("Unsupported multi-command V2 request: " + reqMap);
|
||||
}
|
||||
String a = cmd.keySet().iterator().next();
|
||||
ModifiableSolrParams params = new ModifiableSolrParams();
|
||||
if (req.getParams() != null) {
|
||||
params.add(req.getParams());
|
||||
}
|
||||
params.add(CollectionAdminParams.COLLECTION, path.substring(3));
|
||||
params.set("path", "/admin/collections");
|
||||
if (req.getParams() != null) {
|
||||
params.add(req.getParams());
|
||||
}
|
||||
|
@ -363,6 +378,24 @@ public class SimUtils {
|
|||
for (Map.Entry<String, Object> e : reqParams.entrySet()) {
|
||||
params.add(e.getKey(), e.getValue().toString());
|
||||
}
|
||||
// trim the leading /
|
||||
path = path.substring(1);
|
||||
String[] pathEls = path.split("/");
|
||||
if (pathEls.length < 2) {
|
||||
throw new UnsupportedOperationException("Unsupported V2 request path: " + reqMap);
|
||||
}
|
||||
params.set(CollectionAdminParams.COLLECTION, pathEls[1]);
|
||||
if (pathEls.length > 3) {
|
||||
if (!pathEls[2].equals("shards")) {
|
||||
throw new UnsupportedOperationException("Invalid V2 request path: expected 'shards' but was '" + pathEls[2] + "'");
|
||||
}
|
||||
if (!pathEls[3].isBlank()) {
|
||||
params.set("shard", pathEls[3]);
|
||||
}
|
||||
}
|
||||
if (pathEls.length > 4 && !pathEls[4].isBlank()) {
|
||||
params.set("replica", pathEls[4]);
|
||||
}
|
||||
// re-map from v2 to v1 action
|
||||
a = v2v1Mapping.get(a);
|
||||
if (a == null) {
|
||||
|
|
Loading…
Reference in New Issue