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/09/09 11:54:20 UTC
[2/2] lucene-solr:apiv2: SOLR-8029: general refactoring
SOLR-8029: general refactoring
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/cf1bbc3d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/cf1bbc3d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/cf1bbc3d
Branch: refs/heads/apiv2
Commit: cf1bbc3d74fd11f81e6fa51c5c5f205fdc4e2c21
Parents: 66f0913
Author: Noble Paul <no...@apache.org>
Authored: Fri Sep 9 17:23:50 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Fri Sep 9 17:23:50 2016 +0530
----------------------------------------------------------------------
.../src/java/org/apache/solr/api/ApiBag.java | 4 +--
.../java/org/apache/solr/api/ApiHandler.java | 26 ++++++++++++++++
.../java/org/apache/solr/api/V2HttpCall.java | 4 +--
.../apache/solr/handler/ReplicationHandler.java | 3 --
.../apache/solr/handler/admin/ApiCommand.java | 5 ++++
.../handler/admin/BaseHandlerApiSupport.java | 12 ++++++--
.../handler/admin/CollectionHandlerApi.java | 25 +++++++++-------
.../handler/admin/ConfigSetsHandlerApi.java | 19 +++++-------
.../solr/handler/admin/CoreAdminHandlerApi.java | 21 +++++++------
.../src/java/org/apache/solr/util/PathTrie.java | 31 ++++++++++----------
.../src/resources/apispec/cluster.nodes.json | 11 +++++++
.../src/resources/apispec/core.RealtimeGet.json | 8 +++--
.../apispec/core.SchemaEdit.addField.json | 6 ----
.../core/src/resources/apispec/core.Update.json | 1 +
14 files changed, 109 insertions(+), 67 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/api/ApiBag.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/api/ApiBag.java b/solr/core/src/java/org/apache/solr/api/ApiBag.java
index 17582cf..8077485 100644
--- a/solr/core/src/java/org/apache/solr/api/ApiBag.java
+++ b/solr/core/src/java/org/apache/solr/api/ApiBag.java
@@ -183,9 +183,9 @@ public class ApiBag {
private Set<String> getWildCardNames(List<String> paths) {
Set<String> wildCardNames = new HashSet<>();
for (String path : paths) {
- List<String> p = PathTrie.getTemplateVariables(path);
+ List<String> p = PathTrie.getPathSegments(path);
for (String s : p) {
- String wildCard = PathTrie.wildCardName(s);
+ String wildCard = PathTrie.templateName(s);
if (wildCard != null) wildCardNames.add(wildCard);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/api/ApiHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/api/ApiHandler.java b/solr/core/src/java/org/apache/solr/api/ApiHandler.java
new file mode 100644
index 0000000..a988d30
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/api/ApiHandler.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.api;
+
+
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.SolrQueryResponse;
+
+interface ApiHandler {
+ void handle(SolrQueryRequest req, SolrQueryResponse rsp);
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
index 91f2f66..98dff29 100644
--- a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
+++ b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
@@ -52,7 +52,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.servlet.SolrDispatchFilter.Action.PASSTHROUGH;
-import static org.apache.solr.util.PathTrie.getTemplateVariables;
+import static org.apache.solr.util.PathTrie.getPathSegments;
import static org.apache.solr.common.params.CommonParams.JSON;
import static org.apache.solr.common.params.CommonParams.WT;
import static org.apache.solr.servlet.SolrDispatchFilter.Action.ADMIN;
@@ -77,7 +77,7 @@ public class V2HttpCall extends HttpSolrCall {
String path = this.path;
String fullPath = path = path.substring(3);//strip off '/v2'
try {
- pieces = getTemplateVariables(path);
+ pieces = getPathSegments(path);
if (pieces.size() == 0) {
prefix = "c";
path = "/c";
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
index c511310..84e1ba2 100644
--- a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
@@ -1664,9 +1664,6 @@ public class ReplicationHandler extends RequestHandlerBase implements SolrCoreAw
}
}
-
- private static final String LOCATION = "location";
-
private static final String SUCCESS = "success";
private static final String FAILED = "failed";
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/handler/admin/ApiCommand.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ApiCommand.java b/solr/core/src/java/org/apache/solr/handler/admin/ApiCommand.java
index cd9d4b3..5a85c14 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ApiCommand.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ApiCommand.java
@@ -20,11 +20,14 @@ package org.apache.solr.handler.admin;
import java.util.Collection;
import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.util.CommandOperation;
public interface ApiCommand {
String getName();
+ // the method supported by this command
SolrRequest.METHOD getHttpMethod();
V2EndPoint getEndPoint();
@@ -37,4 +40,6 @@ public interface ApiCommand {
default String getParamSubstitute(String name) {
return name;
}
+
+ void invoke(SolrQueryRequest req, SolrQueryResponse rsp, BaseHandlerApiSupport apiHandler) throws Exception;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java b/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java
index 9bb3044..198d788 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/BaseHandlerApiSupport.java
@@ -65,6 +65,7 @@ public abstract class BaseHandlerApiSupport implements ApiSupport {
private Api getApi(final V2EndPoint op) {
+ final BaseHandlerApiSupport apiHandler = this;
return new Api(ApiBag.getSpec(op.getSpecName())) {
@Override
public void call(SolrQueryRequest req, SolrQueryResponse rsp) {
@@ -90,7 +91,8 @@ public abstract class BaseHandlerApiSupport implements ApiSupport {
throw new SolrException(BAD_REQUEST, " no such command " + c);
}
wrapParams(req, c, command, false);
- invokeCommand(req, rsp,command, c);
+ command.invoke(req,rsp, apiHandler);
+// invokeCommand(req, rsp, command, c);
} else {
if (commands == null || commands.isEmpty()) {
@@ -106,7 +108,8 @@ public abstract class BaseHandlerApiSupport implements ApiSupport {
}
}
wrapParams(req, new CommandOperation("", Collections.EMPTY_MAP), commands.get(0), true);
- invokeUrl(commands.get(0), req, rsp);
+ commands.get(0).invoke(req,rsp, apiHandler);
+// invokeUrl(commands.get(0), req, rsp);
}
} catch (SolrException e) {
@@ -195,10 +198,13 @@ public abstract class BaseHandlerApiSupport implements ApiSupport {
}
}
}
+/*
- protected abstract void invokeCommand(SolrQueryRequest req, SolrQueryResponse rsp, ApiCommand command, CommandOperation c) throws Exception;
+ protected abstract void invokeCommand(SolrQueryRequest req, SolrQueryResponse rsp, ApiCommand command, CommandOperation c)
+ throws Exception;
protected abstract void invokeUrl(ApiCommand command, SolrQueryRequest req, SolrQueryResponse rsp) throws Exception;
+*/
protected abstract List<ApiCommand> getCommands();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/handler/admin/CollectionHandlerApi.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionHandlerApi.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionHandlerApi.java
index 249794c..df35a99 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionHandlerApi.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionHandlerApi.java
@@ -52,16 +52,6 @@ public class CollectionHandlerApi extends BaseHandlerApiSupport {
}
@Override
- protected void invokeCommand(SolrQueryRequest req, SolrQueryResponse rsp, ApiCommand command, CommandOperation c) throws Exception {
- handler.invokeAction(req, rsp, handler.coreContainer, ((Cmd) command).target.action, ((Cmd) command).target);
- }
-
- @Override
- protected void invokeUrl(ApiCommand command, SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
- handler.invokeAction(req, rsp, handler.coreContainer, ((Cmd) command).target.action, ((Cmd) command).target);
- }
-
- @Override
protected List<V2EndPoint> getEndPoints() {
return Arrays.asList(EndPoint.values());
}
@@ -188,7 +178,14 @@ public class CollectionHandlerApi extends BaseHandlerApiSupport {
RESTORE_OP,
"restore-collection",
null
- )
+ ),
+ GET_NODES(EndPoint.CLUSTER_NODES, GET, null) {
+ @Override
+ public void invoke(SolrQueryRequest req, SolrQueryResponse rsp, BaseHandlerApiSupport apiHandler) throws Exception {
+ rsp.add("nodes", ((CollectionHandlerApi) apiHandler).handler.coreContainer.getZkController().getClusterState().getLiveNodes());
+ ;
+ }
+ }
;
public final String commandName;
public final EndPoint endPoint;
@@ -270,11 +267,17 @@ public class CollectionHandlerApi extends BaseHandlerApiSupport {
return s;
}
+ public void invoke(SolrQueryRequest req, SolrQueryResponse rsp, BaseHandlerApiSupport apiHandler)
+ throws Exception {
+ ((CollectionHandlerApi) apiHandler).handler.invokeAction(req, rsp, ((CollectionHandlerApi) apiHandler).handler.coreContainer, target.action, target);
+ }
+
}
enum EndPoint implements V2EndPoint {
CLUSTER("cluster"),
CLUSTER_CMD("cluster.Commands"),
+ CLUSTER_NODES("cluster.nodes"),
CLUSTER_CMD_STATUS("cluster.commandstatus"),
COLLECTIONS_COMMANDS("collections.Commands"),
COLLECTIONS("collections"),
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandlerApi.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandlerApi.java b/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandlerApi.java
index 546040f..83e5bd4 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandlerApi.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandlerApi.java
@@ -41,17 +41,6 @@ public class ConfigSetsHandlerApi extends BaseHandlerApiSupport {
this.configSetHandler = configSetHandler;
}
- @Override
- protected void invokeCommand(SolrQueryRequest req, SolrQueryResponse rsp, ApiCommand command, CommandOperation c)
- throws Exception {
- ((Cmd) command).op.call(req, rsp, this.configSetHandler);
-
- }
-
- @Override
- protected void invokeUrl(ApiCommand command, SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
- ((Cmd)command).op.call(req, rsp,configSetHandler);
- }
@Override
protected List<ApiCommand> getCommands() {
@@ -98,6 +87,14 @@ public class ConfigSetsHandlerApi extends BaseHandlerApiSupport {
public V2EndPoint getEndPoint() {
return endPoint;
}
+
+ @Override
+ public void invoke(SolrQueryRequest req, SolrQueryResponse rsp, BaseHandlerApiSupport apiHandler) throws Exception {
+ op.call(req, rsp,
+ ((ConfigSetsHandlerApi)apiHandler).configSetHandler);
+
+ }
+
}
enum EndPoint implements V2EndPoint {
LIST_CONFIG("cluster.config"),
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandlerApi.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandlerApi.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandlerApi.java
index a8fb159..577954c 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandlerApi.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandlerApi.java
@@ -109,6 +109,16 @@ public class CoreAdminHandlerApi extends BaseHandlerApiSupport {
public String getParamSubstitute(String param) {
return paramstoAttr.containsKey(param) ? paramstoAttr.get(param) : param;
}
+
+ @Override
+ public void invoke(SolrQueryRequest req, SolrQueryResponse rsp, BaseHandlerApiSupport apiHandler) throws Exception {
+ target.execute(new CoreAdminHandler.CallInfo(((CoreAdminHandlerApi) apiHandler).handler,
+ req,
+ rsp,
+ target));
+
+ }
+
}
@@ -135,17 +145,6 @@ public class CoreAdminHandlerApi extends BaseHandlerApiSupport {
@Override
- protected void invokeCommand(SolrQueryRequest req, SolrQueryResponse rsp, ApiCommand command,
- CommandOperation c) throws Exception {
- ((Cmd) command).target.execute(new CoreAdminHandler.CallInfo(handler, req, rsp, ((Cmd) command).target));
- }
-
- @Override
- protected void invokeUrl(ApiCommand command, SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
- ((Cmd) command).target.execute(new CoreAdminHandler.CallInfo(handler, req, rsp, ((Cmd) command).target));
- }
-
- @Override
protected List<ApiCommand> getCommands() {
return Arrays.asList(Cmd.values());
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/java/org/apache/solr/util/PathTrie.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/PathTrie.java b/solr/core/src/java/org/apache/solr/util/PathTrie.java
index 655bb8b..3326737 100644
--- a/solr/core/src/java/org/apache/solr/util/PathTrie.java
+++ b/solr/core/src/java/org/apache/solr/util/PathTrie.java
@@ -41,7 +41,7 @@ public class PathTrie<T> {
public void insert(String path, Map<String, String> replacements, T o) {
- List<String> parts = getTemplateVariables(path);
+ List<String> parts = getPathSegments(path);
if (parts.isEmpty()) {
root.obj = o;
return;
@@ -62,7 +62,8 @@ public class PathTrie<T> {
root.insert(parts, o);
}
- public static List<String> getTemplateVariables(String path) {
+ // /a/b/c will be returned as ["a","b","c"]
+ public static List<String> getPathSegments(String path) {
if (path == null || path.isEmpty()) return emptyList();
List<String> parts = new ArrayList<String>() {
@Override
@@ -76,17 +77,17 @@ public class PathTrie<T> {
}
- public T lookup(String uri, Map<String, String> parts) {
- return root.lookup(getTemplateVariables(uri), 0, parts);
+ public T lookup(String uri, Map<String, String> templateValues) {
+ return root.lookup(getPathSegments(uri), 0, templateValues);
}
- public T lookup(String path, Map<String, String> parts, Set<String> paths) {
- return root.lookup(getTemplateVariables(path), 0, parts, paths);
+ public T lookup(String path, Map<String, String> templateValues, Set<String> paths) {
+ return root.lookup(getPathSegments(path), 0, templateValues, paths);
}
- public static String wildCardName(String part) {
- return part.startsWith("{") && part.endsWith("}") ?
- part.substring(1, part.length() - 1) :
+ public static String templateName(String templateStr) {
+ return templateStr.startsWith("{") && templateStr.endsWith("}") ?
+ templateStr.substring(1, templateStr.length() - 1) :
null;
}
@@ -95,7 +96,7 @@ public class PathTrie<T> {
String name;
Map<String, Node> children;
T obj;
- String varName;
+ String templateName;
Node(List<String> path, T o) {
if (path.isEmpty()) {
@@ -103,7 +104,7 @@ public class PathTrie<T> {
return;
}
String part = path.get(0);
- varName = wildCardName(part);
+ templateName = templateName(part);
name = part;
if (path.isEmpty()) obj = o;
}
@@ -114,7 +115,7 @@ public class PathTrie<T> {
Node matchedChild = null;
if (children == null) children = new ConcurrentHashMap<>();
- String varName = wildCardName(part);
+ String varName = templateName(part);
String key = varName == null ? part : "";
matchedChild = children.get(key);
@@ -122,8 +123,8 @@ public class PathTrie<T> {
children.put(key, matchedChild = new Node(path, o));
}
if (varName != null) {
- if (!matchedChild.varName.equals(varName)) {
- throw new RuntimeException("wildcard name must be " + matchedChild.varName);
+ if (!matchedChild.templateName.equals(varName)) {
+ throw new RuntimeException("wildcard name must be " + matchedChild.templateName);
}
}
path.remove(0);
@@ -166,7 +167,7 @@ public class PathTrie<T> {
* @param availableSubPaths If not null , available sub paths will be returned in this set
*/
public T lookup(List<String> pieces, int index, Map<String, String> templateVariables, Set<String> availableSubPaths) {
- if (varName != null) templateVariables.put(varName, pieces.get(index - 1));
+ if (templateName != null) templateVariables.put(templateName, pieces.get(index - 1));
if (pieces.size() < index + 1) {
findAvailableChildren("", availableSubPaths);
return obj;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/resources/apispec/cluster.nodes.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.nodes.json b/solr/core/src/resources/apispec/cluster.nodes.json
new file mode 100644
index 0000000..310577e
--- /dev/null
+++ b/solr/core/src/resources/apispec/cluster.nodes.json
@@ -0,0 +1,11 @@
+{
+ "documentation": "https://cwiki.apache.org/confluence/display/solr/Config+API",
+ "methods": [
+ "GET"
+ ],
+ "url": {
+ "paths": [
+ "/cluster/nodes"
+ ]
+ }
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/resources/apispec/core.RealtimeGet.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/core.RealtimeGet.json b/solr/core/src/resources/apispec/core.RealtimeGet.json
index a1f7dfd..af7fd66 100644
--- a/solr/core/src/resources/apispec/core.RealtimeGet.json
+++ b/solr/core/src/resources/apispec/core.RealtimeGet.json
@@ -5,9 +5,7 @@
],
"url": {
"paths": [
- "/get",
- "/get/versions",
- "/get/updates"
+ "/get"
],
"params": {
"id": {
@@ -17,6 +15,10 @@
"ids": {
"type": "string",
"description": "one or more ids. Separate by commas if there are more than one"
+ },
+ "fq":{
+ "type": "string",
+ "description": "Filter query"
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/resources/apispec/core.SchemaEdit.addField.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/core.SchemaEdit.addField.json b/solr/core/src/resources/apispec/core.SchemaEdit.addField.json
index 13e5646..798b81b 100644
--- a/solr/core/src/resources/apispec/core.SchemaEdit.addField.json
+++ b/solr/core/src/resources/apispec/core.SchemaEdit.addField.json
@@ -14,15 +14,9 @@
"indexed": {
"type": "boolean"
},
- "tokenized": {
- "type": "boolean"
- },
"stored": {
"type": "boolean"
},
- "binary": {
- "type": "boolean"
- },
"omitNorms": {
"type": "boolean"
},
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf1bbc3d/solr/core/src/resources/apispec/core.Update.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/core.Update.json b/solr/core/src/resources/apispec/core.Update.json
index 2d521df..f9e80c1 100644
--- a/solr/core/src/resources/apispec/core.Update.json
+++ b/solr/core/src/resources/apispec/core.Update.json
@@ -9,6 +9,7 @@
"/update/xml",
"/update/csv",
"/update/json",
+ "/update/bin",
"/update/json/commands"
]