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/02/24 07:12:29 UTC

[22/53] [abbrv] lucene-solr git commit: SOLR-8700 eliminate the java class for implicit plugins

SOLR-8700 eliminate the java class for implicit plugins


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

Branch: refs/heads/apiv2
Commit: 5a15fed9f5249cf658ddfbccae55733bb5855190
Parents: 2b3529c
Author: Noble Paul <no...@apache.org>
Authored: Sun Feb 21 20:49:55 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Sun Feb 21 20:49:55 2016 +0530

----------------------------------------------------------------------
 .../org/apache/solr/core/ImplicitPlugins.java   | 152 -------------------
 .../org/apache/solr/core/RequestHandlers.java   |   2 +-
 .../src/java/org/apache/solr/core/SolrCore.java |  16 ++
 .../apache/solr/core/SolrResourceLoader.java    |   2 +-
 .../org/apache/solr/handler/SchemaHandler.java  |  11 +-
 .../apache/solr/handler/SolrConfigHandler.java  |  26 ++--
 solr/core/src/resources/ImplicitPlugins.json    | 102 +++++++++++++
 7 files changed, 143 insertions(+), 168 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5a15fed9/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java b/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java
deleted file mode 100644
index f6a74da..0000000
--- a/solr/core/src/java/org/apache/solr/core/ImplicitPlugins.java
+++ /dev/null
@@ -1,152 +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.core;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.handler.PingRequestHandler;
-import org.apache.solr.handler.RealTimeGetHandler;
-import org.apache.solr.handler.ReplicationHandler;
-import org.apache.solr.handler.SQLHandler;
-import org.apache.solr.handler.SchemaHandler;
-import org.apache.solr.handler.SolrConfigHandler;
-import org.apache.solr.handler.StreamHandler;
-import org.apache.solr.handler.UpdateRequestHandler;
-import org.apache.solr.handler.admin.LoggingHandler;
-import org.apache.solr.handler.admin.LukeRequestHandler;
-import org.apache.solr.handler.admin.PluginInfoHandler;
-import org.apache.solr.handler.admin.PropertiesRequestHandler;
-import org.apache.solr.handler.admin.SegmentsInfoRequestHandler;
-import org.apache.solr.handler.admin.ShowFileRequestHandler;
-import org.apache.solr.handler.admin.SolrInfoMBeanHandler;
-import org.apache.solr.handler.admin.SystemInfoHandler;
-import org.apache.solr.handler.admin.ThreadDumpHandler;
-import org.apache.solr.handler.component.SearchHandler;
-import org.apache.solr.request.SolrRequestHandler;
-
-import static java.util.Collections.singletonMap;
-import static org.apache.solr.common.params.CommonParams.JSON;
-import static org.apache.solr.common.params.CommonParams.NAME;
-import static org.apache.solr.common.params.CommonParams.WT;
-import static org.apache.solr.common.util.Utils.makeMap;
-import static org.apache.solr.core.PluginInfo.APPENDS;
-import static org.apache.solr.core.PluginInfo.DEFAULTS;
-import static org.apache.solr.core.PluginInfo.INVARIANTS;
-
-public class ImplicitPlugins {
-
-  public static List<PluginInfo> getHandlers(SolrCore solrCore){
-    List<PluginInfo> implicits = new ArrayList<>();
-
-    //update handle implicits
-    implicits.add(createPluginInfoWithDefaults("/update", UpdateRequestHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults(UpdateRequestHandler.JSON_PATH, UpdateRequestHandler.class, singletonMap("update.contentType", "application/json")));
-    implicits.add(createPluginInfoWithDefaults(UpdateRequestHandler.CSV_PATH, UpdateRequestHandler.class, singletonMap("update.contentType", "application/csv")));
-    implicits.add(createPluginInfoWithDefaults(UpdateRequestHandler.DOC_PATH, UpdateRequestHandler.class, makeMap("update.contentType", "application/json", "json.command", "false")));
-
-    //solrconfighandler
-    PluginInfo config = createPluginInfoWithDefaults("/config", SolrConfigHandler.class, null);
-    if (solrCore.getConfigSetProperties() != null) {
-      config.initArgs.addAll(solrCore.getConfigSetProperties());
-    }
-    implicits.add(config);
-    //schemahandler
-    PluginInfo schema = createPluginInfoWithDefaults("/schema", SchemaHandler.class, null);
-    if (solrCore.getConfigSetProperties() != null) {
-      schema.initArgs.addAll(solrCore.getConfigSetProperties());
-    }
-    implicits.add(schema);
-    //register replicationhandler always for SolrCloud
-    implicits.add(createPluginInfoWithDefaults("/replication", ReplicationHandler.class,null));
-
-    implicits.add(createPluginInfoWithDefaults("/get", RealTimeGetHandler.class,
-        makeMap(
-            "omitHeader", "true",
-            WT, JSON,
-            "indent", "true")));
-
-    PluginInfo exportInitArgs = createPluginInfo("/export", SearchHandler.class,
-        null, // defaults
-        null, // appends
-        // we need invariants here
-        makeMap(
-            "rq", "{!xport}",
-            "wt", "xsort",
-            "distrib", "false"
-        ));
-    exportInitArgs.initArgs.add("components", Collections.singletonList("query"));
-    implicits.add(exportInitArgs);
-
-    implicits.add(createPluginInfo("/stream", StreamHandler.class,
-        null, // defaults
-        null, // appends
-        // we need invariants here
-        makeMap(
-            "wt", "json",
-            "distrib", "false"
-        )));
-
-    implicits.add(createPluginInfo("/sql", SQLHandler.class,
-        null, // defaults
-        null, // appends
-        // we need invariants here
-        makeMap(
-            "wt", "json",
-            "distrib", "false"
-        )));
-
-    //register adminHandlers
-    implicits.add(createPluginInfoWithDefaults("/admin/luke", LukeRequestHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults("/admin/system", SystemInfoHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults("/admin/mbeans", SolrInfoMBeanHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults("/admin/plugins", PluginInfoHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults("/admin/threads", ThreadDumpHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults("/admin/properties", PropertiesRequestHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults("/admin/logging", LoggingHandler.class, null));
-    implicits.add(createPluginInfoWithDefaults("/admin/file", ShowFileRequestHandler.class, null));
-    implicits.add(createPluginInfo("/admin/ping", PingRequestHandler.class,
-        null, // defaults
-        null, // appends
-        // invariants
-        makeMap("echoParams", "all", "q", "{!lucene}*:*")));
-    implicits.add(createPluginInfoWithDefaults("/admin/segments", SegmentsInfoRequestHandler.class, null));
-    return implicits;
-  }
-
-  public static PluginInfo createPluginInfoWithDefaults(String name, Class clz, Map defaults) {
-    return createPluginInfo(name, clz, defaults, null, null);
-  }
-
-  public static PluginInfo createPluginInfo(String name, Class clz, Map defaults, Map appends, Map invariants) {
-    if (defaults == null) defaults = Collections.emptyMap();
-    Map m = makeMap(NAME, name, "class", clz.getName());
-    Map<String, Object> args = new HashMap<>(1);
-    args.put(DEFAULTS, new NamedList<>(defaults));
-    if (appends != null)  {
-      args.put(APPENDS, new NamedList<>(appends));
-    }
-    if (invariants != null) {
-      args.put(INVARIANTS, new NamedList<>(invariants));
-    }
-    return new PluginInfo(SolrRequestHandler.TYPE, m, new NamedList<>(args), null);
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5a15fed9/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/RequestHandlers.java b/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
index d2fbdf9..0f5022a 100644
--- a/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
+++ b/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
@@ -115,7 +115,7 @@ public final class RequestHandlers {
    */
 
   void initHandlersFromConfig(SolrConfig config) {
-    List<PluginInfo> implicits = ImplicitPlugins.getHandlers(core);
+    List<PluginInfo> implicits = core.getImplicitHandlers();
     // use link map so we iterate in the same order
     Map<String, PluginInfo> infoMap= new LinkedHashMap<>();
     //deduping implicit and explicit requesthandlers

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5a15fed9/solr/core/src/java/org/apache/solr/core/SolrCore.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 70954d5..5d7ebdc 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -66,6 +66,7 @@ import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.ObjectReleaseTracker;
 import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.common.util.Utils;
 import org.apache.solr.core.DirectoryFactory.DirContext;
 import org.apache.solr.handler.IndexFetcher;
 import org.apache.solr.handler.ReplicationHandler;
@@ -117,6 +118,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.solr.common.params.CommonParams.NAME;
 import static org.apache.solr.common.params.CommonParams.PATH;
 
 /**
@@ -2668,6 +2670,20 @@ public final class SolrCore implements SolrInfoMBean, Closeable {
       cleanupThread.start();
     }
   }
+
+  private static final Map implicitPluginsInfo = (Map) Utils.fromJSONResource("ImplicitPlugins.json");
+
+  public List<PluginInfo> getImplicitHandlers() {
+    List<PluginInfo> implicits = new ArrayList<>();
+    Map requestHandlers = (Map) implicitPluginsInfo.get(SolrRequestHandler.TYPE);
+    for (Object o : requestHandlers.entrySet()) {
+      Map.Entry<String, Map> entry = (Map.Entry<String, Map>) o;
+      Map info = Utils.getDeepCopy(entry.getValue(), 4);
+      info.put(NAME, entry.getKey());
+      implicits.add(new PluginInfo(SolrRequestHandler.TYPE, info));
+    }
+    return implicits;
+  }
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5a15fed9/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
index 5db04ca..ae6739e 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -87,7 +87,7 @@ public class SolrResourceLoader implements ResourceLoader,Closeable
   static final String[] packages = {
       "", "analysis.", "schema.", "handler.", "search.", "update.", "core.", "response.", "request.",
       "update.processor.", "util.", "spelling.", "handler.component.", "handler.dataimport.",
-      "spelling.suggest.", "spelling.suggest.fst.", "rest.schema.analysis.", "security."
+      "spelling.suggest.", "spelling.suggest.fst.", "rest.schema.analysis.", "security.","handler.admin."
   };
 
   protected URLClassLoader classLoader;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5a15fed9/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java b/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
index 67d6610..046de46 100644
--- a/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
@@ -29,6 +29,7 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.response.SolrQueryResponse;
@@ -36,21 +37,20 @@ import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.ManagedIndexSchema;
 import org.apache.solr.schema.SchemaManager;
 import org.apache.solr.schema.ZkIndexSchemaReader;
+import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.solr.common.params.CommonParams.JSON;
 import static org.apache.solr.core.ConfigSetProperties.IMMUTABLE_CONFIGSET_ARG;
 
-public class SchemaHandler extends RequestHandlerBase {
+public class SchemaHandler extends RequestHandlerBase implements SolrCoreAware {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private boolean isImmutableConfigSet = false;
 
   @Override
   public void init(NamedList args) {
     super.init(args);
-    Object immutable = args.get(IMMUTABLE_CONFIGSET_ARG);
-    isImmutableConfigSet = immutable  != null ? Boolean.parseBoolean(immutable.toString()) : false;
   }
 
   @Override
@@ -180,4 +180,9 @@ public class SchemaHandler extends RequestHandlerBase {
   public String getDescription() {
     return "CRUD operations over the Solr schema";
   }
+
+  @Override
+  public void inform(SolrCore core) {
+    isImmutableConfigSet = SolrConfigHandler.getImmutable(core);
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5a15fed9/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
index e862e05..a566c0e 100644
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@ -48,7 +48,6 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
@@ -59,7 +58,6 @@ import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.common.util.Utils;
 import org.apache.solr.core.ConfigOverlay;
-import org.apache.solr.core.ImplicitPlugins;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.RequestParams;
 import org.apache.solr.core.SolrConfig;
@@ -72,6 +70,7 @@ import org.apache.solr.schema.SchemaManager;
 import org.apache.solr.util.CommandOperation;
 import org.apache.solr.util.DefaultSolrThreadFactory;
 import org.apache.solr.util.RTimer;
+import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -87,7 +86,7 @@ import static org.apache.solr.core.SolrConfig.PluginOpts.REQUIRE_NAME;
 import static org.apache.solr.core.SolrConfig.PluginOpts.REQUIRE_NAME_IN_OVERLAY;
 import static org.apache.solr.schema.FieldType.CLASS_NAME;
 
-public class SolrConfigHandler extends RequestHandlerBase {
+public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAware {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   public static final String CONFIGSET_EDITING_DISABLED_ARG = "disable.configEdit";
   public static final boolean configEditing_disabled = Boolean.getBoolean(CONFIGSET_EDITING_DISABLED_ARG);
@@ -106,13 +105,6 @@ public class SolrConfigHandler extends RequestHandlerBase {
   }
 
   @Override
-  public void init(NamedList args) {
-    super.init(args);
-    Object immutable = args.get(IMMUTABLE_CONFIGSET_ARG);
-    isImmutableConfigSet = immutable  != null ? Boolean.parseBoolean(immutable.toString()) : false;
-  }
-
-  @Override
   public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
 
     setWt(req, CommonParams.JSON);
@@ -133,6 +125,18 @@ public class SolrConfigHandler extends RequestHandlerBase {
     }
   }
 
+  @Override
+  public void inform(SolrCore core) {
+    isImmutableConfigSet = getImmutable(core);
+  }
+
+  public static boolean getImmutable(SolrCore core) {
+    NamedList configSetProperties = core.getConfigSetProperties();
+    if(configSetProperties == null) return false;
+    Object immutable = configSetProperties.get(IMMUTABLE_CONFIGSET_ARG);
+    return immutable != null ? Boolean.parseBoolean(immutable.toString()) : false;
+  }
+
 
   private class Command {
     private final SolrQueryRequest req;
@@ -232,7 +236,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
       Map<String, Object> map = req.getCore().getSolrConfig().toMap();
       Map reqHandlers = (Map) map.get(SolrRequestHandler.TYPE);
       if (reqHandlers == null) map.put(SolrRequestHandler.TYPE, reqHandlers = new LinkedHashMap<>());
-      List<PluginInfo> plugins = ImplicitPlugins.getHandlers(req.getCore());
+      List<PluginInfo> plugins = req.getCore().getImplicitHandlers();
       for (PluginInfo plugin : plugins) {
         if (SolrRequestHandler.TYPE.equals(plugin.type)) {
           if (!reqHandlers.containsKey(plugin.name)) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5a15fed9/solr/core/src/resources/ImplicitPlugins.json
----------------------------------------------------------------------
diff --git a/solr/core/src/resources/ImplicitPlugins.json b/solr/core/src/resources/ImplicitPlugins.json
new file mode 100644
index 0000000..8c0549a
--- /dev/null
+++ b/solr/core/src/resources/ImplicitPlugins.json
@@ -0,0 +1,102 @@
+{
+  "requestHandler": {
+    "/update": {
+      "class": "solr.UpdateRequestHandler"
+    },
+    "/update/json": {
+      "class": "solr.UpdateRequestHandler",
+      "invariants": {
+        "update.contentType": "application/json"
+      }
+    },
+    "/update/csv": {
+      "class": "solr.UpdateRequestHandler",
+      "invariants": {
+        "update.contentType": "application/csv"
+      }
+    },
+    "/update/json/docs": {
+      "class": "solr.UpdateRequestHandler",
+      "invariants": {
+        "update.contentType": "application/json",
+        "json.command": "false"
+      }
+    },
+    "/config": {
+      "class": "solr.SolrConfigHandler"
+    },
+    "/schema": {
+      "class": "solr.SchemaHandler"
+    },
+    "/replication": {
+      "class": "solr.ReplicationHandler"
+    },
+    "/get": {
+      "class": "solr.RealTimeGetHandler",
+      "defaults": {
+        "omitHeader": true,
+        "wt": "json",
+        "indent": true
+      }
+    },
+    "/admin/ping": {
+      "class": "solr.PingRequestHandler",
+      "invariants": {
+        "echoParams": "all",
+        "q": "{!lucene}*:*"
+      }
+    },
+    "/admin/segments": {
+      "class": "solr.SegmentsInfoRequestHandler"
+    },
+    "/admin/luke": {
+      "class": "solr.LukeRequestHandler"
+    },
+    "/admin/system": {
+      "class": "solr.SystemInfoHandler"
+    },
+    "/admin/mbeans": {
+      "class": "solr.SolrInfoMBeanHandler"
+    },
+    "/admin/plugins": {
+      "class": "solr.PluginInfoHandler"
+    },
+    "/admin/threads": {
+      "class": "solr.ThreadDumpHandler"
+    },
+    "/admin/properties": {
+      "class": "solr.PropertiesRequestHandler"
+    },
+    "/admin/logging": {
+      "class": "solr.LoggingHandler"
+    },
+    "/admin/file": {
+      "class": "solr.ShowFileRequestHandler"
+    },
+    "/export": {
+      "class": "solr.SearchHandler",
+      "components": [
+        "query"
+      ],
+      "invariants": {
+        "rq": "{!xport}",
+        "wt": "xsort",
+        "distrib": false
+      }
+    },
+    "/stream": {
+      "class": "solr.StreamHandler",
+      "invariants": {
+        "wt": "json",
+        "distrib": false
+      }
+    },
+    "/sql": {
+      "class": "solr.SQLHandler",
+      "invariants": {
+        "wt": "json",
+        "distrib": false
+      }
+    }
+  }
+}
\ No newline at end of file