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 2017/06/08 10:10:09 UTC

[4/4] lucene-solr:master: SOLR-10647: move the spec files to solrj

SOLR-10647: move the spec files to solrj


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

Branch: refs/heads/master
Commit: c5c05b46c43896d0c3ab74818e6c0847b10d8e99
Parents: 5a34d41
Author: Noble Paul <no...@apache.org>
Authored: Thu Jun 8 19:39:55 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Thu Jun 8 19:39:55 2017 +0930

----------------------------------------------------------------------
 solr/core/src/java/org/apache/solr/api/Api.java |   1 +
 .../src/java/org/apache/solr/api/ApiBag.java    |  20 +-
 .../java/org/apache/solr/api/SpecProvider.java  |  25 ---
 .../java/org/apache/solr/api/V2HttpCall.java    |  18 +-
 .../solr/handler/UpdateRequestHandlerApi.java   |   4 +-
 .../handler/admin/BaseHandlerApiSupport.java    |   3 +-
 .../apache/solr/handler/admin/InfoHandler.java  |   2 +-
 .../solr/handler/admin/SecurityConfHandler.java |  10 +-
 .../apache/solr/security/BasicAuthPlugin.java   |   2 +-
 .../security/RuleBasedAuthorizationPlugin.java  |   6 +-
 .../security/Sha256AuthenticationProvider.java  |   4 +-
 .../src/java/org/apache/solr/util/PathTrie.java | 195 -----------------
 .../resources/apispec/autoscaling.Commands.json |  47 ----
 .../src/resources/apispec/cluster.Commands.json |  74 -------
 .../src/resources/apispec/cluster.aliases.json  |  12 -
 .../apispec/cluster.commandstatus.delete.json   |  10 -
 .../apispec/cluster.commandstatus.json          |  20 --
 .../apispec/cluster.configs.Commands.json       |  34 ---
 .../apispec/cluster.configs.delete.json         |  12 -
 .../src/resources/apispec/cluster.configs.json  |  12 -
 solr/core/src/resources/apispec/cluster.json    |  14 --
 .../src/resources/apispec/cluster.nodes.json    |  12 -
 .../cluster.security.BasicAuth.Commands.json    |  23 --
 ...cluster.security.RuleBasedAuthorization.json | 129 -----------
 ...luster.security.authentication.Commands.json |  12 -
 .../cluster.security.authentication.json        |  12 -
 ...cluster.security.authorization.Commands.json |  13 --
 .../apispec/cluster.security.authorization.json |  13 --
 .../resources/apispec/collections.Commands.json | 218 -------------------
 .../collections.collection.Commands.json        | 137 ------------
 .../collections.collection.Commands.modify.json |  36 ---
 .../collections.collection.Commands.reload.json |  11 -
 .../apispec/collections.collection.delete.json  |  13 --
 .../apispec/collections.collection.json         |  19 --
 .../collections.collection.shards.Commands.json | 114 ----------
 ...ctions.collection.shards.shard.Commands.json |  24 --
 ...lections.collection.shards.shard.delete.json |  27 ---
 ....collection.shards.shard.replica.delete.json |  39 ----
 .../core/src/resources/apispec/collections.json |  13 --
 .../src/resources/apispec/core.RealtimeGet.json |  26 ---
 .../apispec/core.SchemaEdit.addCopyField.json   |  27 ---
 .../apispec/core.SchemaEdit.addField.json       |  98 ---------
 .../core.SchemaEdit.addFieldType.analyzers.json |  51 -----
 .../apispec/core.SchemaEdit.addFieldType.json   |  53 -----
 .../core.SchemaEdit.deleteCopyField.json        |  19 --
 .../core.SchemaEdit.deleteDynamicField.json     |  12 -
 .../apispec/core.SchemaEdit.deleteField.json    |  12 -
 .../core.SchemaEdit.deleteFieldType.json        |  14 --
 .../src/resources/apispec/core.SchemaEdit.json  |  47 ----
 .../apispec/core.SchemaRead.copyFields.json     |  26 ---
 ...ore.SchemaRead.dynamicFields_fieldTypes.json |  20 --
 .../apispec/core.SchemaRead.fields.json         |  34 ---
 .../src/resources/apispec/core.SchemaRead.json  |  17 --
 .../core/src/resources/apispec/core.Update.json |  17 --
 ...g.Commands.addRequestHandler.properties.json |  25 ---
 .../apispec/core.config.Commands.generic.json   |  19 --
 .../resources/apispec/core.config.Commands.json | 215 ------------------
 .../core.config.Commands.runtimeLib.json        |  23 --
 .../apispec/core.config.Params.Commands.json    |  31 ---
 .../resources/apispec/core.config.Params.json   |  13 --
 .../core/src/resources/apispec/core.config.json |  18 --
 .../src/resources/apispec/core.system.blob.json |  20 --
 .../apispec/core.system.blob.upload.json        |  12 -
 .../src/resources/apispec/cores.Commands.json   |  85 --------
 .../src/resources/apispec/cores.Status.json     |  20 --
 .../resources/apispec/cores.core.Commands.json  | 136 ------------
 .../apispec/cores.core.Commands.split.json      |  34 ---
 solr/core/src/resources/apispec/emptySpec.json  |  11 -
 .../src/resources/apispec/node.Commands.json    |  24 --
 solr/core/src/resources/apispec/node.Info.json  |  11 -
 .../core/src/resources/apispec/node.invoke.json |  16 --
 .../test/org/apache/solr/api/TestPathTrie.java  |  61 ------
 .../solr/handler/admin/TestApiFramework.java    |   2 +-
 .../org/apache/solr/util/JsonValidatorTest.java |   5 +-
 .../org/apache/solr/common/SpecProvider.java    |  25 +++
 .../apache/solr/common/params/CommonParams.java |   7 +-
 .../org/apache/solr/common/util/PathTrie.java   | 195 +++++++++++++++++
 .../java/org/apache/solr/common/util/Utils.java |   8 +
 .../resources/apispec/autoscaling.Commands.json |  47 ++++
 .../src/resources/apispec/cluster.Commands.json |  74 +++++++
 .../src/resources/apispec/cluster.aliases.json  |  12 +
 .../apispec/cluster.commandstatus.delete.json   |  10 +
 .../apispec/cluster.commandstatus.json          |  20 ++
 .../apispec/cluster.configs.Commands.json       |  34 +++
 .../apispec/cluster.configs.delete.json         |  12 +
 .../src/resources/apispec/cluster.configs.json  |  12 +
 solr/solrj/src/resources/apispec/cluster.json   |  14 ++
 .../src/resources/apispec/cluster.nodes.json    |  12 +
 .../cluster.security.BasicAuth.Commands.json    |  23 ++
 ...cluster.security.RuleBasedAuthorization.json | 129 +++++++++++
 ...luster.security.authentication.Commands.json |  12 +
 .../cluster.security.authentication.json        |  12 +
 ...cluster.security.authorization.Commands.json |  13 ++
 .../apispec/cluster.security.authorization.json |  13 ++
 .../resources/apispec/collections.Commands.json | 218 +++++++++++++++++++
 .../collections.collection.Commands.json        | 137 ++++++++++++
 .../collections.collection.Commands.modify.json |  36 +++
 .../collections.collection.Commands.reload.json |  11 +
 .../apispec/collections.collection.delete.json  |  13 ++
 .../apispec/collections.collection.json         |  19 ++
 .../collections.collection.shards.Commands.json | 114 ++++++++++
 ...ctions.collection.shards.shard.Commands.json |  24 ++
 ...lections.collection.shards.shard.delete.json |  27 +++
 ....collection.shards.shard.replica.delete.json |  39 ++++
 .../src/resources/apispec/collections.json      |  13 ++
 .../src/resources/apispec/core.RealtimeGet.json |  26 +++
 .../apispec/core.SchemaEdit.addCopyField.json   |  27 +++
 .../apispec/core.SchemaEdit.addField.json       |  98 +++++++++
 .../core.SchemaEdit.addFieldType.analyzers.json |  51 +++++
 .../apispec/core.SchemaEdit.addFieldType.json   |  53 +++++
 .../core.SchemaEdit.deleteCopyField.json        |  19 ++
 .../core.SchemaEdit.deleteDynamicField.json     |  12 +
 .../apispec/core.SchemaEdit.deleteField.json    |  12 +
 .../core.SchemaEdit.deleteFieldType.json        |  14 ++
 .../src/resources/apispec/core.SchemaEdit.json  |  47 ++++
 .../apispec/core.SchemaRead.copyFields.json     |  26 +++
 ...ore.SchemaRead.dynamicFields_fieldTypes.json |  20 ++
 .../apispec/core.SchemaRead.fields.json         |  34 +++
 .../src/resources/apispec/core.SchemaRead.json  |  17 ++
 .../src/resources/apispec/core.Update.json      |  17 ++
 ...g.Commands.addRequestHandler.properties.json |  25 +++
 .../apispec/core.config.Commands.generic.json   |  19 ++
 .../resources/apispec/core.config.Commands.json | 215 ++++++++++++++++++
 .../core.config.Commands.runtimeLib.json        |  23 ++
 .../apispec/core.config.Params.Commands.json    |  31 +++
 .../resources/apispec/core.config.Params.json   |  13 ++
 .../src/resources/apispec/core.config.json      |  18 ++
 .../src/resources/apispec/core.system.blob.json |  20 ++
 .../apispec/core.system.blob.upload.json        |  12 +
 .../src/resources/apispec/cores.Commands.json   |  85 ++++++++
 .../src/resources/apispec/cores.Status.json     |  20 ++
 .../resources/apispec/cores.core.Commands.json  | 136 ++++++++++++
 .../apispec/cores.core.Commands.split.json      |  34 +++
 solr/solrj/src/resources/apispec/emptySpec.json |  11 +
 .../src/resources/apispec/node.Commands.json    |  24 ++
 solr/solrj/src/resources/apispec/node.Info.json |  11 +
 .../src/resources/apispec/node.invoke.json      |  16 ++
 .../apache/solr/common/util/TestPathTrie.java   |  61 ++++++
 138 files changed, 2614 insertions(+), 2612 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/api/Api.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/api/Api.java b/solr/core/src/java/org/apache/solr/api/Api.java
index 8512c89..edc2206 100644
--- a/solr/core/src/java/org/apache/solr/api/Api.java
+++ b/solr/core/src/java/org/apache/solr/api/Api.java
@@ -20,6 +20,7 @@ package org.apache.solr.api;
 import java.util.Map;
 
 import com.google.common.collect.ImmutableMap;
+import org.apache.solr.common.SpecProvider;
 import org.apache.solr.common.util.ValidatingJsonMap;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/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 adff11b..7f30602 100644
--- a/solr/core/src/java/org/apache/solr/api/ApiBag.java
+++ b/solr/core/src/java/org/apache/solr/api/ApiBag.java
@@ -33,6 +33,8 @@ import java.util.stream.Collectors;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SpecProvider;
+import org.apache.solr.common.util.CommandOperation;
 import org.apache.solr.common.util.Utils;
 import org.apache.solr.common.util.ValidatingJsonMap;
 import org.apache.solr.core.PluginBag;
@@ -42,9 +44,8 @@ import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.security.AuthorizationContext;
 import org.apache.solr.security.PermissionNameProvider;
-import org.apache.solr.common.util.CommandOperation;
 import org.apache.solr.util.JsonSchemaValidator;
-import org.apache.solr.util.PathTrie;
+import org.apache.solr.common.util.PathTrie;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -227,12 +228,6 @@ public class ApiBag {
     }
   }
 
-  public static SpecProvider getSpec(final String name) {
-    return () -> {
-      return ValidatingJsonMap.parse(APISPEC_LOCATION + name + ".json", APISPEC_LOCATION);
-    };
-  }
-
   public static class ReqHandlerToApi extends Api implements PermissionNameProvider {
     SolrRequestHandler rh;
 
@@ -257,13 +252,10 @@ public class ApiBag {
 
   public static List<Api> wrapRequestHandlers(final SolrRequestHandler rh, String... specs) {
     ImmutableList.Builder<Api> b = ImmutableList.builder();
-    for (String spec : specs) b.add(new ReqHandlerToApi(rh, ApiBag.getSpec(spec)));
+    for (String spec : specs) b.add(new ReqHandlerToApi(rh, Utils.getSpec(spec)));
     return b.build();
   }
 
-  public static final String APISPEC_LOCATION = "apispec/";
-  public static final String INTROSPECT = "/_introspect";
-
 
   public static final SpecProvider EMPTY_SPEC = () -> ValidatingJsonMap.EMPTY;
   public static final String HANDLER_NAME = "handlerName";
@@ -276,7 +268,7 @@ public class ApiBag {
   public void registerLazy(PluginBag.PluginHolder<SolrRequestHandler> holder, PluginInfo info) {
     String specName = info.attributes.get("spec");
     if (specName == null) specName = "emptySpec";
-    register(new LazyLoadedApi(ApiBag.getSpec(specName), holder), Collections.singletonMap(HANDLER_NAME, info.attributes.get(NAME)));
+    register(new LazyLoadedApi(Utils.getSpec(specName), holder), Collections.singletonMap(HANDLER_NAME, info.attributes.get(NAME)));
   }
 
   public static SpecProvider constructSpec(PluginInfo info) {
@@ -286,7 +278,7 @@ public class ApiBag {
       Map map = (Map) specObj;
       return () -> ValidatingJsonMap.getDeepCopy(map, 4, false);
     } else {
-      return ApiBag.getSpec((String) specObj);
+      return Utils.getSpec((String) specObj);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/api/SpecProvider.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/api/SpecProvider.java b/solr/core/src/java/org/apache/solr/api/SpecProvider.java
deleted file mode 100644
index c373c99..0000000
--- a/solr/core/src/java/org/apache/solr/api/SpecProvider.java
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * 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.common.util.ValidatingJsonMap;
-
-/**A generic interface for any class that is capable of providing its specification as a json schema
- */
-public interface SpecProvider {
-  ValidatingJsonMap getSpec();
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/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 76cba9c..36ca486 100644
--- a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
+++ b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
@@ -49,7 +49,7 @@ import org.apache.solr.servlet.HttpSolrCall;
 import org.apache.solr.servlet.SolrDispatchFilter;
 import org.apache.solr.servlet.SolrRequestParsers;
 import org.apache.solr.util.JsonSchemaValidator;
-import org.apache.solr.util.PathTrie;
+import org.apache.solr.common.util.PathTrie;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,7 +58,7 @@ import static org.apache.solr.common.params.CommonParams.WT;
 import static org.apache.solr.servlet.SolrDispatchFilter.Action.ADMIN;
 import static org.apache.solr.servlet.SolrDispatchFilter.Action.PASSTHROUGH;
 import static org.apache.solr.servlet.SolrDispatchFilter.Action.PROCESS;
-import static org.apache.solr.util.PathTrie.getPathSegments;
+import static org.apache.solr.common.util.PathTrie.getPathSegments;
 
 // class that handle the '/v2' path
 public class V2HttpCall extends HttpSolrCall {
@@ -102,7 +102,7 @@ public class V2HttpCall extends HttpSolrCall {
         String collectionName = origCorename = corename = pieces.get(1);
         DocCollection collection = getDocCollection(collectionName);
         if (collection == null) {
-           if ( ! path.endsWith(ApiBag.INTROSPECT)) {
+           if ( ! path.endsWith(CommonParams.INTROSPECT)) {
             throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "no such collection or alias");
           }
         } else {
@@ -124,7 +124,7 @@ public class V2HttpCall extends HttpSolrCall {
       }
       if (core == null) {
         log.error(">> path: '" + path + "'");
-        if (path.endsWith(ApiBag.INTROSPECT)) {
+        if (path.endsWith(CommonParams.INTROSPECT)) {
           initAdminRequest(path);
           return;
         } else {
@@ -193,7 +193,7 @@ public class V2HttpCall extends HttpSolrCall {
                                Map<String, String> parts) {
     fullPath = fullPath == null ? path : fullPath;
     Api api = requestHandlers.v2lookup(path, method, parts);
-    if (api == null && path.endsWith(ApiBag.INTROSPECT)) {
+    if (api == null && path.endsWith(CommonParams.INTROSPECT)) {
       // the particular http method does not have any ,
       // just try if any other method has this path
       api = requestHandlers.v2lookup(path, null, parts);
@@ -234,7 +234,7 @@ public class V2HttpCall extends HttpSolrCall {
 
   private static CompositeApi getSubPathApi(PluginBag<SolrRequestHandler> requestHandlers, String path, String fullPath, CompositeApi compositeApi) {
 
-    String newPath = path.endsWith(ApiBag.INTROSPECT) ? path.substring(0, path.length() - ApiBag.INTROSPECT.length()) : path;
+    String newPath = path.endsWith(CommonParams.INTROSPECT) ? path.substring(0, path.length() - CommonParams.INTROSPECT.length()) : path;
     Map<String, Set<String>> subpaths = new LinkedHashMap<>();
 
     getSubPaths(newPath, requestHandlers.getApiBag(), subpaths);
@@ -244,12 +244,12 @@ public class V2HttpCall extends HttpSolrCall {
       @Override
       public void call(SolrQueryRequest req1, SolrQueryResponse rsp) {
         String prefix = null;
-        prefix = fullPath.endsWith(ApiBag.INTROSPECT) ?
-            fullPath.substring(0, fullPath.length() - ApiBag.INTROSPECT.length()) :
+        prefix = fullPath.endsWith(CommonParams.INTROSPECT) ?
+            fullPath.substring(0, fullPath.length() - CommonParams.INTROSPECT.length()) :
             fullPath;
         LinkedHashMap<String, Set<String>> result = new LinkedHashMap<>(subPaths.size());
         for (Map.Entry<String, Set<String>> e : subPaths.entrySet()) {
-          if (e.getKey().endsWith(ApiBag.INTROSPECT)) continue;
+          if (e.getKey().endsWith(CommonParams.INTROSPECT)) continue;
           result.put(prefix + e.getKey(), e.getValue());
         }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandlerApi.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandlerApi.java b/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandlerApi.java
index 6ba3229..f7bc140 100644
--- a/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandlerApi.java
+++ b/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandlerApi.java
@@ -24,7 +24,7 @@ import java.util.Map;
 import com.google.common.collect.ImmutableMap;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.api.Api;
-import org.apache.solr.api.ApiBag;
+import org.apache.solr.common.util.Utils;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
 
@@ -38,7 +38,7 @@ public class UpdateRequestHandlerApi extends UpdateRequestHandler  {
   }
 
   private Api getApiImpl() {
-    return new Api(ApiBag.getSpec("core.Update")) {
+    return new Api(Utils.getSpec("core.Update")) {
       @Override
       public void call(SolrQueryRequest req, SolrQueryResponse rsp) {
         String path = req.getPath();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/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 083ec33..087c6f1 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
@@ -28,7 +28,6 @@ import java.util.Objects;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.solr.api.Api;
-import org.apache.solr.api.ApiBag;
 import org.apache.solr.api.ApiSupport;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.request.CollectionApiMapping.CommandMeta;
@@ -73,7 +72,7 @@ public abstract class BaseHandlerApiSupport implements ApiSupport {
 
   private Api getApi(final V2EndPoint op) {
     final BaseHandlerApiSupport apiHandler = this;
-    return new Api(ApiBag.getSpec(op.getSpecName())) {
+    return new Api(Utils.getSpec(op.getSpecName())) {
       @Override
       public void call(SolrQueryRequest req, SolrQueryResponse rsp) {
         SolrParams params = req.getParams();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/handler/admin/InfoHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/InfoHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/InfoHandler.java
index c7cd052..a2bfb5b 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/InfoHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/InfoHandler.java
@@ -32,7 +32,7 @@ import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.api.Api;
 
 import static java.util.Collections.singletonList;
-import static org.apache.solr.api.ApiBag.getSpec;
+import static org.apache.solr.common.util.Utils.getSpec;
 import static org.apache.solr.common.params.CommonParams.PATH;
 
 public class InfoHandler extends RequestHandlerBase  {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
index 63b9318..6e81ccf 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
@@ -45,7 +45,7 @@ import org.apache.solr.security.PermissionNameProvider;
 import org.apache.solr.common.util.CommandOperation;
 import org.apache.solr.api.Api;
 import org.apache.solr.api.ApiBag.ReqHandlerToApi;
-import org.apache.solr.api.SpecProvider;
+import org.apache.solr.common.SpecProvider;
 import org.apache.solr.util.JsonSchemaValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -264,10 +264,10 @@ public abstract class SecurityConfHandler extends RequestHandlerBase implements
       synchronized (this) {
         if (apis == null) {
           Collection<Api> apis = new ArrayList<>();
-          final SpecProvider authcCommands = ApiBag.getSpec("cluster.security.authentication.Commands");
-          final SpecProvider authzCommands = ApiBag.getSpec("cluster.security.authorization.Commands");
-          apis.add(new ReqHandlerToApi(this, ApiBag.getSpec("cluster.security.authentication")));
-          apis.add(new ReqHandlerToApi(this, ApiBag.getSpec("cluster.security.authorization")));
+          final SpecProvider authcCommands = Utils.getSpec("cluster.security.authentication.Commands");
+          final SpecProvider authzCommands = Utils.getSpec("cluster.security.authorization.Commands");
+          apis.add(new ReqHandlerToApi(this, Utils.getSpec("cluster.security.authentication")));
+          apis.add(new ReqHandlerToApi(this, Utils.getSpec("cluster.security.authorization")));
           SpecProvider authcSpecProvider = () -> {
             AuthenticationPlugin authcPlugin = cores.getAuthenticationPlugin();
             return authcPlugin != null && authcPlugin instanceof SpecProvider ?

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/security/BasicAuthPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/security/BasicAuthPlugin.java b/solr/core/src/java/org/apache/solr/security/BasicAuthPlugin.java
index 296a2a6..eab89e3 100644
--- a/solr/core/src/java/org/apache/solr/security/BasicAuthPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/BasicAuthPlugin.java
@@ -39,7 +39,7 @@ import org.apache.http.message.BasicHeader;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.ValidatingJsonMap;
 import org.apache.solr.common.util.CommandOperation;
-import org.apache.solr.api.SpecProvider;
+import org.apache.solr.common.SpecProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java b/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
index c54453d..6bf2822 100644
--- a/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
@@ -27,8 +27,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
 
-import org.apache.solr.api.ApiBag;
-import org.apache.solr.api.SpecProvider;
+import org.apache.solr.common.SpecProvider;
+import org.apache.solr.common.util.Utils;
 import org.apache.solr.common.util.ValidatingJsonMap;
 import org.apache.solr.common.util.CommandOperation;
 import org.slf4j.Logger;
@@ -238,7 +238,7 @@ public class RuleBasedAuthorizationPlugin implements AuthorizationPlugin, Config
 
   @Override
   public ValidatingJsonMap getSpec() {
-    return ApiBag.getSpec("cluster.security.RuleBasedAuthorization").getSpec();
+    return Utils.getSpec("cluster.security.RuleBasedAuthorization").getSpec();
 
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/java/org/apache/solr/security/Sha256AuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/security/Sha256AuthenticationProvider.java b/solr/core/src/java/org/apache/solr/security/Sha256AuthenticationProvider.java
index 10ed71a..4b85c45 100644
--- a/solr/core/src/java/org/apache/solr/security/Sha256AuthenticationProvider.java
+++ b/solr/core/src/java/org/apache/solr/security/Sha256AuthenticationProvider.java
@@ -31,9 +31,9 @@ import java.util.Set;
 import com.google.common.collect.ImmutableSet;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.solr.common.util.CommandOperation;
+import org.apache.solr.common.util.Utils;
 import org.apache.solr.common.util.ValidatingJsonMap;
 
-import org.apache.solr.api.ApiBag;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -161,7 +161,7 @@ public class Sha256AuthenticationProvider implements ConfigEditablePlugin,  Basi
 
   @Override
   public ValidatingJsonMap getSpec() {
-    return ApiBag.getSpec("cluster.security.BasicAuth.Commands").getSpec();
+    return Utils.getSpec("cluster.security.BasicAuth.Commands").getSpec();
   }
 
   static final Set<String> supported_ops = ImmutableSet.of("set-user", "delete-user");

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/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
deleted file mode 100644
index ceaa5de..0000000
--- a/solr/core/src/java/org/apache/solr/util/PathTrie.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * 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.util;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.solr.common.util.StrUtils;
-
-import static java.util.Collections.emptyList;
-
-/**A utility class to efficiently parse/store/lookup hierarchical paths which are templatized
- * like /collections/{collection}/shards/{shard}/{replica}
- */
-public class PathTrie<T> {
-  private final Set<String> reserved = new HashSet<>();
-  Node root = new Node(emptyList(), null);
-
-  public PathTrie() { }
-
-  public PathTrie(Set<String> reserved) {
-    this.reserved.addAll(reserved);
-  }
-
-
-
-  public void insert(String path, Map<String, String> replacements, T o) {
-    List<String> parts = getPathSegments(path);
-    insert(parts,replacements, o);
-  }
-
-  public void insert(List<String> parts, Map<String, String> replacements, T o) {
-    if (parts.isEmpty()) {
-      root.obj = o;
-      return;
-    }
-
-    for (int i = 0; i < parts.size(); i++) {
-      String part = parts.get(i);
-      if (part.charAt(0) == '$') {
-        String replacement = replacements.get(part.substring(1));
-        if (replacement == null) {
-          throw new RuntimeException(part + " is not provided");
-        }
-        replacement = replacement.charAt(0) == '/' ? replacement.substring(1) : replacement;
-        parts.set(i, replacement);
-      }
-    }
-
-    root.insert(parts, o);
-  }
-
-  // /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
-      public boolean add(String s) {
-        if (s == null || s.isEmpty()) return false;
-        return super.add(s);
-      }
-    };
-    StrUtils.splitSmart(path, '/', parts);
-    return parts;
-  }
-
-
-  public T lookup(String path, Map<String, String> templateValues) {
-    return root.lookup(getPathSegments(path), 0, templateValues);
-  }
-
-  public T lookup(List<String> path, Map<String, String> templateValues) {
-    return root.lookup(path, 0, templateValues);
-  }
-
-  public T lookup(String path, Map<String, String> templateValues, Set<String> paths) {
-    return root.lookup(getPathSegments(path), 0, templateValues, paths);
-  }
-
-  public static String templateName(String templateStr) {
-    return templateStr.startsWith("{") && templateStr.endsWith("}") ?
-        templateStr.substring(1, templateStr.length() - 1) :
-        null;
-
-  }
-
-  class Node {
-    String name;
-    Map<String, Node> children;
-    T obj;
-    String templateName;
-
-    Node(List<String> path, T o) {
-      if (path.isEmpty()) {
-        obj = o;
-        return;
-      }
-      String part = path.get(0);
-      templateName = templateName(part);
-      name = part;
-      if (path.isEmpty()) obj = o;
-    }
-
-
-    private synchronized void insert(List<String> path, T o) {
-      String part = path.get(0);
-      Node matchedChild = null;
-      if (children == null) children = new ConcurrentHashMap<>();
-
-      String varName = templateName(part);
-      String key = varName == null ? part : "";
-
-      matchedChild = children.get(key);
-      if (matchedChild == null) {
-        children.put(key, matchedChild = new Node(path, o));
-      }
-      if (varName != null) {
-        if (!matchedChild.templateName.equals(varName)) {
-          throw new RuntimeException("wildcard name must be " + matchedChild.templateName);
-        }
-      }
-      path.remove(0);
-      if (!path.isEmpty()) {
-        matchedChild.insert(path, o);
-      } else {
-        matchedChild.obj = o;
-      }
-
-    }
-
-
-    void findAvailableChildren(String path, Set<String> availableSubPaths) {
-      if (availableSubPaths == null) return;
-      if (children != null) {
-        for (Node node : children.values()) {
-          if (node.obj != null) {
-            String s = path + "/" + node.name;
-            availableSubPaths.add(s);
-          }
-        }
-
-        for (Node node : children.values()) {
-          node.findAvailableChildren(path + "/" + node.name, availableSubPaths);
-        }
-      }
-    }
-
-
-    public T lookup(List<String> pieces, int i, Map<String, String> templateValues) {
-      return lookup(pieces, i, templateValues, null);
-
-    }
-
-    /**
-     *
-     * @param pathSegments pieces in the url /a/b/c has pieces as 'a' , 'b' , 'c'
-     * @param index current index of the pieces that we are looking at in /a/b/c 0='a' and 1='b'
-     * @param templateVariables The mapping of template variable to its value
-     * @param availableSubPaths If not null , available sub paths will be returned in this set
-     */
-    public T lookup(List<String> pathSegments, int index, Map<String, String> templateVariables, Set<String> availableSubPaths) {
-      if (templateName != null) templateVariables.put(templateName, pathSegments.get(index - 1));
-      if (pathSegments.size() < index + 1) {
-        findAvailableChildren("", availableSubPaths);
-        return obj;
-      }
-      String piece = pathSegments.get(index);
-      if (children == null) return null;
-      Node n = children.get(piece);
-      if (n == null && !reserved.contains(piece)) n = children.get("");
-      if (n == null) return null;
-      return n.lookup(pathSegments, index + 1, templateVariables, availableSubPaths);
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/autoscaling.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/autoscaling.Commands.json b/solr/core/src/resources/apispec/autoscaling.Commands.json
deleted file mode 100644
index 5ff89ef..0000000
--- a/solr/core/src/resources/apispec/autoscaling.Commands.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "documentation": "TODO NOCOMMIT",
-  "description": "The Scaling API provides API for adding cluster level scaling rules, triggers and event listeners",
-  "methods": [
-    "GET",
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/autoscaling",
-      "/cluster/autoscaling/diagnostics"
-    ]
-  },
-  "commands": {
-    "set-policy" : {
-      "type":"object",
-      "description": "The set-policy command allows you to add and update policies that apply to collections",
-    /*  "patternProperties": {
-        "^.+$": {
-          "type": "array"
-        }
-      },*/
-      "additionalProperties": true
-    },
-    "set-cluster-policy" : {
-      "type" : "array",
-      "description" : "The set-cluster-policy command allows you to add and update cluster-level policy that acts as the base for all collection level policies, if any"
-    },
-    "set-cluster-preferences" : {
-      "type" : "array",
-      "description" : "The set-cluster-preferences command allows you to add and update cluster-level preferences that are used to sort nodes for selection in cluster operations"
-    },
-    "remove-policy": {
-      "description": "Remove a policy",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the policy to be removed"
-        }
-      },
-      "required": [
-        "name"
-      ]
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.Commands.json b/solr/core/src/resources/apispec/cluster.Commands.json
deleted file mode 100644
index 88f8c06..0000000
--- a/solr/core/src/resources/apispec/cluster.Commands.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API",
-  "description": "Cluster-wide commands to assign roles to nodes, remove role assignments, or add, edit or remove a cluster-wide property.",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/cluster"
-    ]
-  },
-  "commands": {
-    "add-role":{
-      "type":"object",
-      "documentation":"https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api15",
-      "description":"Assign a specific role to a node in the cluster.",
-      "properties": {
-        "role": {
-          "type": "string",
-          "description": "The name of the role. The only supported role is 'overseer'."
-
-        },
-        "node": {
-          "type": "string",
-          "description": "The name of the node. It is possible to assign a role even before that node is started."
-
-        }
-      },
-      "required": [
-        "role",
-        "node"
-      ]
-    },
-    "remove-role":{
-      "type":"object",
-      "documentation":"https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api16",
-      "description":"Unassign a role from a node in the cluster.",
-      "properties": {
-        "role": {
-          "type": "string",
-          "description": "The name of the role. The only supported role as of now is 'overseer'."
-
-        },
-        "node": {
-          "type": "string",
-          "description": "The name of the node where the role should be removed."
-        }
-      },
-      "required": [
-        "role",
-        "node"
-      ]
-    },
-    "set-property": {
-      "type": "object",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api11",
-      "description": "Add, edit, or delete a cluster-wide property.",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the property"
-        },
-        "val": {
-          "type": ["string","boolean","null"],
-          "description": "The value of the property. If the value is empty or null, the property is unset."
-        }
-      },
-      "required": [
-        "name",
-        "val"
-      ]
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.aliases.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.aliases.json b/solr/core/src/resources/apispec/cluster.aliases.json
deleted file mode 100644
index 9cffb71..0000000
--- a/solr/core/src/resources/apispec/cluster.aliases.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API",
-  "description": "Provides list of collection alises.",
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/aliases"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.commandstatus.delete.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.commandstatus.delete.json b/solr/core/src/resources/apispec/cluster.commandstatus.delete.json
deleted file mode 100644
index 5576c42..0000000
--- a/solr/core/src/resources/apispec/cluster.commandstatus.delete.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "methods": [
-    "DELETE"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/command-status/{id}"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.commandstatus.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.commandstatus.json b/solr/core/src/resources/apispec/cluster.commandstatus.json
deleted file mode 100644
index a8a402b..0000000
--- a/solr/core/src/resources/apispec/cluster.commandstatus.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/command-status"
-    ],
-    "params": {
-      "flush": {
-        "type": "boolean",
-        "default": false
-      },
-      "id":{
-        "type":"string",
-        "description": "The command id"
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.configs.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.configs.Commands.json b/solr/core/src/resources/apispec/cluster.configs.Commands.json
deleted file mode 100644
index d026cd5..0000000
--- a/solr/core/src/resources/apispec/cluster.configs.Commands.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/ConfigSets+API",
-  "description": "Create ConfigSets.",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/configs"]
-  },
-  "commands": {
-    "create": {
-      "type" :"object",
-      "description": "Create a ConfigSet, based on another ConfigSet already in ZooKeeper.",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/ConfigSets+API#ConfigSetsAPI-create",
-      "properties": {
-        "name" :{
-          "type" :"string",
-          "description" : "The name of the ConfigSet to be created."
-        },
-        "baseConfigSet":{
-          "type" : "string",
-          "description" :"The existing ConfigSet to copy as the basis for the new one."
-        },
-        "properties" : {
-          "type":"object",
-          "description": "Additional key-value pairs, in the form of 'ConfigSetProp.<key>=<value>', as needed. These properties will override the same properties in the base ConfigSet.",
-          "additionalProperties" : true
-        }
-      },
-      "required" : ["name", "baseConfigSet"]
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.configs.delete.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.configs.delete.json b/solr/core/src/resources/apispec/cluster.configs.delete.json
deleted file mode 100644
index 236d457..0000000
--- a/solr/core/src/resources/apispec/cluster.configs.delete.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/ConfigSets+API#ConfigSetsAPI-delete",
-  "description": "Delete ConfigSets. The name of the ConfigSet to delete must be provided as a path parameter.",
-  "methods": [
-    "DELETE"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/configs/{name}"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.configs.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.configs.json b/solr/core/src/resources/apispec/cluster.configs.json
deleted file mode 100644
index 9a1443a..0000000
--- a/solr/core/src/resources/apispec/cluster.configs.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/ConfigSets+API#ConfigSetsAPI-list",
-  "description": "List all ConfigSets in the cluster.",
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/configs"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.json b/solr/core/src/resources/apispec/cluster.json
deleted file mode 100644
index 0ec5b96..0000000
--- a/solr/core/src/resources/apispec/cluster.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API",
-  "description": "General information about the cluster, including defined collections (with the 'cluster' endpoint), status of the overseer (with the 'cluster/overseer' endpoint), and available nodes (with the 'cluster/nodes' endpoint).",
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/cluster",
-      "/cluster/overseer",
-      "/cluster/nodes"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/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
deleted file mode 100644
index f992f7f..0000000
--- a/solr/core/src/resources/apispec/cluster.nodes.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API",
-  "description": "Provides general information about the available nodes of the cluster.",
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/nodes"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.security.BasicAuth.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.security.BasicAuth.Commands.json b/solr/core/src/resources/apispec/cluster.security.BasicAuth.Commands.json
deleted file mode 100644
index da04c85..0000000
--- a/solr/core/src/resources/apispec/cluster.security.BasicAuth.Commands.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Basic+Authentication+Plugin",
-  "description": "Modifies the configuration of Basic authentication, allowing you to add or remove users and their passwords.",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/security/authentication"
-    ]
-  },
-  "commands": {
-    "set-user": {
-      "type":"object",
-      "description": "The set-user command allows you to add users and change their passwords. Usernames and passwords are expressed as key-value pairs in a JSON object.",
-      "additionalProperties": true
-    },
-    "delete-user": {
-      "description": "Delete a user or a list of users. Passwords do not need to be provided, simply list the users in a JSON array, separated by colons.",
-      "type":"string"
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.security.RuleBasedAuthorization.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.security.RuleBasedAuthorization.json b/solr/core/src/resources/apispec/cluster.security.RuleBasedAuthorization.json
deleted file mode 100644
index eb9a11c..0000000
--- a/solr/core/src/resources/apispec/cluster.security.RuleBasedAuthorization.json
+++ /dev/null
@@ -1,129 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Rule-Based+Authorization+Plugin",
-  "description": "Defines roles for accessing Solr, and assigns users to those roles. Use this API to change user authorizations to each of Solr's components.",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/security/authorization"
-    ]
-  },
-  "commands": {
-    "set-permission": {
-      "type":"object",
-      "description": "Create a new permission, overwrite an existing permission definition, or assign a pre-defined permission to a role.",
-      "properties": {
-        "name":{
-          "type":"string",
-          "description": "The name of the permission. The name will be used to update or delete the permission later."
-        },
-        "method":{
-          "type":"string",
-          "enum":["GET", "POST", "DELETE","PUT"],
-          "description": "HTTP methods that are allowed for this permission. You could allow only GET requests, or have a role that allows PUT and POST requests. The method values that are allowed for this property are GET, POST, PUT, DELETE and HEAD."
-        },
-
-        "collection":{
-          "type":"array",
-          "items": {
-            "type": "string"
-          },
-          "description":"The collection or collections the permission will apply to. When the path that will be allowed is collection-specific, such as when setting permissions to allow use of the Schema API, omitting the collection property will allow the defined path and/or method for all collections. However, when the path is one that is non-collection-specific, such as the Collections API, the collection value must be null. In this case, two permissions may need to be created; one for collection-specific API paths allowing access to all collections, and another for non-collection-specific paths defining no collection limitations."
-        },
-
-        "path":{
-          "type":"array",
-          "items": {
-            "type": "string"
-          },
-          "description":"A request handler name, such as /update or /select. A wild card is supported, to allow for all paths as appropriate (such as, /update/*)."
-        },
-        "index": {
-          "type": "integer",
-          "description": "The index of the permission you wish to overwrite. Skip this if it is a new permission that should be created."
-        },
-        "before":{
-          "type": "integer",
-          "description":"This property allows ordering of permissions. The value for this property is the name of the permission that this new permission should be placed before in security.json."
-        },
-        "params":{
-          "type":"object",
-          "additionalProperties":true,
-          "description": "The names and values of request parameters. This property can be omitted if all request parameters are allowed, but will restrict access only to the values provided if defined."
-        },
-        "role": {
-          "type": "array",
-          "items": {
-            "type": "string",
-            "description": "The name of the role(s) to give this permission. This name will be used to map user IDs to the role to grant these permissions. The value can be wildcard such as (*), which means that any user is OK, but no user is NOT OK."
-          }
-        }
-      },
-      "required": [
-        "role"
-      ]
-    },
-    "update-permission": {
-      "type":"object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the permission. The name will be used to update or delete the permission later."
-        },
-        "method": {
-          "type": "string",
-          "description": "HTTP methods that are allowed for this permission. You could allow only GET requests, or have a role that allows PUT and POST requests. The method values that are allowed for this property are GET, POST, PUT, DELETE and HEAD."
-        },
-        "collection": {
-          "type":"array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The collection or collections the permission will apply to. When the path that will be allowed is collection-specific, such as when setting permissions to allow use of the Schema API, omitting the collection property will allow the defined path and/or method for all collections. However, when the path is one that is non-collection-specific, such as the Collections API, the collection value must be null. In this case, two permissions may need to be created; one for collection-specific API paths allowing access to all collections, and another for non-collection-specific paths defining no collection limitations."
-        },
-        "path": {
-          "type":"array",
-          "items": {
-            "type": "string"
-          },
-          "description": "A request handler name, such as /update or /select. A wild card is supported, to allow for all paths as appropriate (such as, /update/*)."
-        },
-        "index": {
-          "type": "integer",
-          "description": "The index of the permission you wish to overwrite."
-        },
-        "before": {
-          "type": "integer",
-          "description": "This property allows ordering of permissions. The value for this property is the index of the permission that this new permission should be placed before in security.json."
-        },
-        "role": {
-          "type": "array",
-          "items": {
-            "type": "string",
-            "description": "The name of the role(s) to give this permission. This name will be used to map user IDs to the role to grant these permissions. The value can be wildcard such as (*), which means that any user is OK, but no user is NOT OK."
-          }
-        },
-        "params": {
-          "type": "object",
-          "additionalProperties": true,
-          "description": "The names and values of request parameters. This property can be omitted if all request parameters are allowed, but will restrict access only to the values provided if defined."
-        }
-      },
-      "required": [
-        "role",
-        "index"
-      ]
-    },
-    "delete-permission":{
-      "description":"delete a permission by its index",
-      "type":"integer"
-    },
-    "set-user-role": {
-      "type":"object",
-      "description": "A single command allows roles to be mapped to users. To remove a user's permission, you should set the role to null. The key is always a user id and the value is one or more role names.",
-      "additionalProperties":true
-
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.security.authentication.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.security.authentication.Commands.json b/solr/core/src/resources/apispec/cluster.security.authentication.Commands.json
deleted file mode 100644
index e1f9030..0000000
--- a/solr/core/src/resources/apispec/cluster.security.authentication.Commands.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Securing+Solr",
-  "description":"This is a placeholder output when no authentication is configured",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/security/authentication"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.security.authentication.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.security.authentication.json b/solr/core/src/resources/apispec/cluster.security.authentication.json
deleted file mode 100644
index 48757c3..0000000
--- a/solr/core/src/resources/apispec/cluster.security.authentication.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Authentication+and+Authorization+Plugins",
-  "description": "Shows the configuration for authentication, including users, classes (type of authentication) and other parameters.",
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/security/authentication"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.security.authorization.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.security.authorization.Commands.json b/solr/core/src/resources/apispec/cluster.security.authorization.Commands.json
deleted file mode 100644
index fe74065..0000000
--- a/solr/core/src/resources/apispec/cluster.security.authorization.Commands.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Securing+Solr",
-  "description":"This is a placeholder output when no authorization is configured",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/security/authorization"
-    ]
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/cluster.security.authorization.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/cluster.security.authorization.json b/solr/core/src/resources/apispec/cluster.security.authorization.json
deleted file mode 100644
index da09f8a..0000000
--- a/solr/core/src/resources/apispec/cluster.security.authorization.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Authentication+and+Authorization+Plugins",
-  "description":"Shows the configuration for authorization, including the classes (type of authorization), permissions, user-roles, and other parameters.",
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/cluster/security/authorization"
-    ]
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/collections.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/collections.Commands.json b/solr/core/src/resources/apispec/collections.Commands.json
deleted file mode 100644
index 13a75c0..0000000
--- a/solr/core/src/resources/apispec/collections.Commands.json
+++ /dev/null
@@ -1,218 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api1",
-  "description": "Create collections and collection aliases, backup or restore collections, and delete collections and aliases.",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/collections",
-      "/c"
-    ]
-  },
-  "commands": {
-    "create": {
-      "type": "object",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api1",
-      "description": "Create a collection.",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the collection to be created."
-        },
-        "config": {
-          "type": "string",
-          "description": "The name of the configuration set (which must already be stored in ZooKeeper) to use for this collection. If not provided, Solr will default to the collection name as the configuration set name."
-        },
-        "router": {
-          "type": "object",
-          "documentation": "https://cwiki.apache.org/confluence/display/solr/Shards+and+Indexing+Data+in+SolrCloud",
-          "description": "These properties define how to distribute documents across a collection's shards.",
-          "properties": {
-            "name": {
-              "type": "string",
-              "enum":["implicit","compositeId"],
-              "description": "The router implementation to use for this collection. There are two options: compositeId or implicit. The compositeId option has Solr decide how to distribute documents (with some possibilities for customization). The implicit option requires you define your own routing strategy, and puts the balancing of documents in shards entirely in your hands.",
-              "default": "compositeId"
-            },
-            "field": {
-              "type": "string",
-              "description": "A field to be used by Solr to identify the shard a document should be routed to. By default, the field defined as the unique ID for each document is used, but an alternative field can be defined with this parameter."
-            }
-          }
-        },
-        "numShards": {
-          "type": "integer",
-          "description": "The number of shards to be created as part of the collection. Shards are logical partitions of a single collection. Each shard has at least one replica, but more replicas for each shard can be defined with the replicationFactor property. This is a required parameter when using the 'compositeId' router."
-        },
-        "shards": {
-          "type": "string",
-          "description": "A comma-separated list of shard names, e.g., shard-x,shard-y,shard-z. This is a required parameter when using the 'implicit' router."
-        },
-        "replicationFactor": {
-          "type": "integer",
-          "description": "The number of NRT replicas to be created for each shard. Replicas are physical copies of each shard, acting as failover for the shard."
-        },
-        "nrtReplicas": {
-          "type": "integer",
-          "description": "The number of NRT replicas to be created for each shard. Replicas are physical copies of each shard, acting as failover for the shard. Replicas of type NRT will be updated with each document that is added to the cluster, and can use \"softCommits\" to get a new view of the index in Near Real Time. This parameter works in the same way as 'replicationFactor'"
-        },
-        "tlogReplicas": {
-          "type": "integer",
-          "description": "The number of TLOG replicas to be created for each shard. TLOG replicas update their transaction log for every update to the cluster, but only the shard leader updates the local index, other TLOG replicas will use segment replication and copy the latest index files from the leader."
-        },
-        "pullReplicas": {
-          "type": "integer",
-          "description": "The number of PULL replicas to be created for each shard. PULL replicas don't receive copies of the documents on update requests, they just replicate the latest segments periodically from the shard leader. PULL replicas can't become shard leaders, and need at least one active TLOG(recommended) or NRT replicas in the shard to replicate from."
-        },
-        "nodeSet": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Defines nodes to spread the new collection across. If not provided, the collection will be spread across all live Solr nodes. The names to use are the 'node_name', which can be found by a request to the cluster/nodes endpoint. A special value of EMPTY will create no shards or replicas for the new collection. In this case, shards and replicas can be added later with the add-replica command available on the /collections/{collection}/shards endpoint."
-        },
-        "shuffleNodes": {
-          "type": "boolean",
-          "description": "Controls whether or not the shard-replicas created for this collection will be assigned to the nodes specified by the nodeSet property in a sequential manner, or if the list of nodes should be shuffled prior to creating individual replicas. A 'false' value makes the results of a collection creation predictable and gives more exact control over the location of the individual shard-replicas, but 'true' can be a better choice for ensuring replicas are distributed evenly across nodes. This property is ignored if nodeSet is not also specified."
-        },
-        "maxShardsPerNode": {
-          "type": "integer",
-          "description": "When creating collections, the shards and/or replicas are spread across all available, live, nodes, and two replicas of the same shard will never be on the same node. If a node is not live when the collection is created, it will not get any parts of the new collection, which could lead to too many replicas being created on a single live node. Defining maxShardsPerNode sets a limit on the number of replicas can be spread to each node. If the entire collection can not be fit into the live nodes, no collection will be created at all."
-        },
-        "autoAddReplicas": {
-          "type": "boolean",
-          "description": "When set to true, enables auto addition of replicas on shared file systems (such as HDFS). See https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS for more details on settings and overrides.",
-          "default": "false"
-        },
-        "rule": {
-          "type": "array",
-          "documentation": "https://cwiki.apache.org/confluence/display/solr/Rule-based+Replica+Placement",
-          "description": "Defines rules for where replicas should be located in a cluster.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "snitch": {
-          "type": "array",
-          "documentation": "https://cwiki.apache.org/confluence/display/solr/Rule-based+Replica+Placement",
-          "description": "",
-          "items": {
-            "type": "string"
-          }
-        },
-        "properties": {
-          "type": "object",
-          "documentation": "https://cwiki.apache.org/confluence/display/solr/Defining+core.properties",
-          "description": "Allows adding core.properties for the collection. Some examples of core properties you may want to modify include the config set, the node name, the data directory, among others.",
-          "additionalProperties": true
-        },
-        "async": {
-          "type": "string",
-          "description": "Defines a request ID that can be used to track this action after it's submitted. The action will be processed asynchronously."
-        }
-      },
-      "required": [
-        "name"
-      ]
-    },
-    "create-alias": {
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api4",
-      "description": "Allows one or more collections to be known by another name. If this command is used on an existing alias, the existing alias will be replaced with the new collection details.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The alias name to be created."
-        },
-        "collections": {
-          "type": "array",
-          "description": "The list of collections to be known as this alias.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "async": {
-          "type": "string",
-          "description": "Defines a request ID that can be used to track this action after it's submitted. The action will be processed asynchronously."
-        }
-      },
-      "required": [
-        "name",
-        "collections"
-      ]
-    },
-    "delete-alias": {
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api5",
-      "description": "Deletes a collection alias",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the alias to delete."
-        },
-        "async": {
-          "type": "string",
-          "description": "Defines a request ID that can be used to track this action after it's submitted. The action will be processed asynchronously."
-        }
-      },
-      "required":["name"]
-    },
-    "backup-collection": {
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-Backup",
-      "description": "Backup Solr indexes and configurations for a specific collection. One copy of the indexes will be taken from each shard, and the config set for the collection will also be copied.",
-      "type": "object",
-      "properties": {
-        "collection": {
-          "type": "string",
-          "description": "The name of the collection to back up."
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the backup."
-        },
-        "location": {
-          "type": "string",
-          "description": "A location on a shared drive for the backup-collection command to write to. Alternately, it can be set as a cluster property with the cluster endpoint, which also supports setting a location."
-        },
-        "async": {
-          "type": "string",
-          "description": "Defines a request ID that can be used to track this action after it's submitted. The action will be processed asynchronously."
-        }
-      },
-      "required": [
-        "collection",
-        "name",
-        "location"
-      ]
-    },
-    "restore-collection": {
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-Restore",
-      "description": "Restore Solr indexes and configurations from a backup. You cannot restore into the same collection you took the backup from. The target collection must not exist before calling this command, as it will be created by the restore action. The new collection will have the same number of shards and replicas as the original collection, and all routing strategies will be retained.",
-      "type": "object",
-      "properties": {
-        "collection": {
-          "type": "string",
-          "description": "The name of the collection the backup will be restored to. This collection must not exist prior to this "
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the backup file."
-        },
-        "location": {
-          "type": "string",
-          "description": "The location on the shared drive for the restore-collection command to read from. Alternately, it can be set as a cluster property with the cluster endpoint, which also supports setting a location."
-        },
-        "async": {
-          "type": "string",
-          "description": "Defines a request ID that can be used to track this action after it's submitted. The action will be processed asynchronously."
-        }
-      },
-      "required": [
-        "collection",
-        "name",
-        "location"
-      ]
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/collections.collection.Commands.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/collections.collection.Commands.json b/solr/core/src/resources/apispec/collections.collection.Commands.json
deleted file mode 100644
index e749347..0000000
--- a/solr/core/src/resources/apispec/collections.collection.Commands.json
+++ /dev/null
@@ -1,137 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API",
-  "description": "Several collection-level operations are supported with this endpoint: modify collection attributes; reload a collection; migrate documents to a different collection; rebalance collection leaders; balance properties across shards; and add or delete a replica property.",
-  "methods": [
-    "POST"
-  ],
-  "url": {
-    "paths": [
-      "/collections/{collection}",
-      "/c/{collection}"
-    ]
-  },
-  "commands": {
-    "modify": {
-      "#include": "collections.collection.Commands.modify"
-    },
-    "reload": {
-      "#include": "collections.collection.Commands.reload"
-    },
-    "migrate-docs":{
-      "type":"object",
-      "documentation":"https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api12",
-      "description": "Moves documents with a given routing key to another collection. The source collection will continue to have the same documents, but will start re-routing write requests to the new collection. This command only works on collections using the 'compositeId' type of document routing.",
-      "properties":{
-        "target":{
-          "type":"string",
-          "description":"The name of the collection to which documents will be migrated."
-        },
-        "splitKey":{
-          "type":"string",
-          "description":"The routing key prefix. For example, if uniqueKey is a!123, then you would use split.key=a! This key may span multiple shards on source and target collections. The migration will be completed shard-by-shard in a single thread."
-        },
-        "forwardTimeout":{
-          "type":"integer",
-          "description":"The timeout, in seconds, until which write requests made to the source collection for the given splitKey will be forwarded to the target shard. Once this time is up, write requests will be routed to the target collection. Any applications sending read or write requests should be modified once the migration is complete to send documents to the right collection.",
-          "default": "60"
-        },
-        "async": {
-          "type": "string",
-          "description": "Defines a request ID that can be used to track this action after it's submitted. The action will be processed asynchronously when this is defined. This command can be long-running, so running it asynchronously is recommended."
-        }
-      },
-      "required":["target", "splitKey"]
-    },
-    "balance-shard-unique":{
-      "type":"object",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-BalanceSliceUnique",
-      "description": "Insures a property is distributed equally across all physical nodes of a collection. If the property already exists on a replica, effort is made to leave it there. However, if it does not exist on any repica, a shard will be chosen and the property added.",
-      "properties":{
-        "property":{
-          "type":"string",
-          "description": "The property to balance across nodes. This can be entered as 'property.<property>' or simply '<property>'. If the 'property.' prefix is not defined, it will be added automatically."
-       },
-        "onlyactivenodes":{
-          "type":"boolean",
-          "description": "Normally, a property is instantiated on active nodes only. If this parameter is specified as 'false', then inactive nodes are also included for distribution.",
-          "default": "true"
-        },
-        "shardUnique":{
-          "type":"boolean",
-          "description": "There is one pre-defined property (preferredLeader) that defaults this value to 'true'. For all other properties that are balanced, this must be set to 'true' or an error message is returned."
-        }
-      },
-      "required":["property"]
-    },
-    "rebalance-leaders" :{
-      "type":"object",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-RebalanceLeaders",
-      "description": "Reassign leaders in a collection according to the preferredLeader property across active nodes. This command should be run after the preferredLeader property has been set with the balance-shards or add-replica-property commands.",
-      "properties":{
-        "maxAtOnce":{
-          "type":"integer",
-          "description":"The maximum number of reassignments to have in the queue at one time. Values <=0 use the default value Integer.MAX_VALUE. When this number is reached, the process waits for one or more leaders to be successfully assigned before adding more to the queue."
-        },
-        "maxWaitSeconds":{
-          "type":"integer",
-          "description":"Timeout, in seconds, when waiting for leaders to be reassigned. If maxAtOnce is less than the number of reassignments pending, this is the maximum interval for any single reassignment.",
-          "default": "60"
-        }
-      }
-    },
-    "add-replica-property": {
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-AddReplicaProp",
-      "description": "Assign an arbitrary property to a particular replica and give it the value specified. If the property already exists, it will be overwritten with the new value.",
-      "type": "object",
-      "properties": {
-        "shard": {
-          "type": "string",
-          "description": "The name of the shard the replica belongs to."
-        },
-        "replica": {
-          "type": "string",
-          "description": "The name of the replica."
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the property. This can be entered as 'property.<property>' or simply '<property>'. If the 'property.' prefix is not defined, it will be added automatically."
-        },
-        "value": {
-          "type": "string",
-          "description": "The value to assign to the property."
-        },
-        "shardUnique": {
-          "type": "boolean",
-          "description": "If true, setting this property in one replica will remove the property from all other replicas in that shard.",
-          "default": "false"
-        }
-      },
-      "required": [
-        "name",
-        "value",
-        "shard",
-        "replica"
-      ]
-    },
-    "delete-replica-property": {
-      "description": "Deletes an arbitrary property from a particular replica",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-DeleteReplicaProp",
-      "type": "object",
-      "properties": {
-        "shard": {
-          "type": "string",
-          "description": "The name of the shard the replica belongs to."
-        },
-        "replica": {
-          "type": "string",
-          "description": "The name of the replica."
-        },
-        "property": {
-          "type": "string",
-          "description": "The name of the property to remove."
-        }
-      },
-      "required":["shard","replica","property"]
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/collections.collection.Commands.modify.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/collections.collection.Commands.modify.json b/solr/core/src/resources/apispec/collections.collection.Commands.modify.json
deleted file mode 100644
index d7d0f10..0000000
--- a/solr/core/src/resources/apispec/collections.collection.Commands.modify.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "documentation":"https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-modifycoll",
-  "description":"Modifies specific attributes of a collection. Multiple attributes can be changed at one time.",
-  "type": "object",
-  "properties":{
-    "rule": {
-      "type": "array",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Rule-based+Replica+Placement",
-      "description": "Modifies the rules for where replicas should be located in a cluster.",
-      "items": {
-        "type": "string"
-      }
-    },
-    "snitch": {
-      "type": "array",
-      "documentation": "https://cwiki.apache.org/confluence/display/solr/Rule-based+Replica+Placement",
-      "description": "Details of the snitch provider",
-      "items": {
-        "type": "string"
-      }
-    },
-    "autoAddReplicas": {
-      "type": "boolean",
-      "description": "When set to true, enables auto addition of replicas on shared file systems (such as HDFS). See https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS for more details on settings and overrides."
-    },
-    "replicationFactor": {
-      "type": "integer",
-      "description": "The number of replicas to be created for each shard. Replicas are physical copies of each shard, acting as failover for the shard. Note that changing this value on an existing collection does not automatically add more replicas to the collection. However, it will allow add-replica commands to succeed."
-    },
-    "maxShardsPerNode": {
-      "type": "integer",
-      "description": "When creating collections, the shards and/or replicas are spread across all available, live, nodes, and two replicas of the same shard will never be on the same node. If a node is not live when the collection is created, it will not get any parts of the new collection, which could lead to too many replicas being created on a single live node. Defining maxShardsPerNode sets a limit on the number of replicas can be spread to each node. If the entire collection can not be fit into the live nodes, no collection will be created at all."
-    }
-
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/collections.collection.Commands.reload.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/collections.collection.Commands.reload.json b/solr/core/src/resources/apispec/collections.collection.Commands.reload.json
deleted file mode 100644
index fe7e379..0000000
--- a/solr/core/src/resources/apispec/collections.collection.Commands.reload.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api2",
-  "description": "Reloads a collection so new configuration changes can take effect and be available for use by the system.",
-  "type" : "object",
-  "properties":{
-    "async": {
-      "type": "string",
-      "description": "Defines a request ID that can be used to track this action after it's submitted. The action will be processed asynchronously when this is defined."
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/collections.collection.delete.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/collections.collection.delete.json b/solr/core/src/resources/apispec/collections.collection.delete.json
deleted file mode 100644
index 0ab4562..0000000
--- a/solr/core/src/resources/apispec/collections.collection.delete.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api6",
-  "description": "Deletes a collection.",
-  "methods": [
-    "DELETE"
-  ],
-  "url": {
-    "paths": [
-      "/collections/{collection}",
-      "/c/{collection}"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c5c05b46/solr/core/src/resources/apispec/collections.collection.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/apispec/collections.collection.json b/solr/core/src/resources/apispec/collections.collection.json
deleted file mode 100644
index 34008be..0000000
--- a/solr/core/src/resources/apispec/collections.collection.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "documentation": "https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api1",
-  "description": "Lists all collections, with details on shards and replicas in each collection.",
-  "methods": [
-    "GET"
-  ],
-  "url": {
-    "paths": [
-      "/collections/{collection}",
-      "/c/{collection}",
-      "/collections/{collection}/shards",
-      "/c/{collection}/shards",
-      "/collections/{collection}/shards/{shard}",
-      "/c/{collection}/shards/{shard}",
-      "/collections/{collection}/shards/{shard}/{replica}",
-      "/c/{collection}/shards/{shard}/{replica}"
-    ]
-  }
-}