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 2014/10/04 20:18:56 UTC
svn commit: r1629437 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/core/
solr/core/src/java/org/apache/solr/handler/
solr/core/src/java/org/apache/solr/request/
solr/core/src/java/org/apache/solr/servlet/ s...
Author: noble
Date: Sat Oct 4 18:18:55 2014
New Revision: 1629437
URL: http://svn.apache.org/r1629437
Log:
SOLR-6585
Added:
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/NestedRequestHandler.java (props changed)
- copied unchanged from r1629433, lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/NestedRequestHandler.java
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SolrRequestHandler.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/solrconfig-paramset.xml
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestInitParams.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Sat Oct 4 18:18:55 2014
@@ -383,6 +383,8 @@ New Features
* SOLR-6233: Provide basic command line tools for checking Solr status and health.
(Timothy Potter)
+* SOLR-6585: RequestHandlers can optionaly handle sub paths as well (Noble Paul)
+
Bug Fixes
----------------------
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java Sat Oct 4 18:18:55 2014
@@ -22,6 +22,8 @@ import static com.google.common.base.Pre
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -35,11 +37,13 @@ import org.apache.solr.cloud.ZkControlle
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.admin.CollectionsHandler;
import org.apache.solr.handler.admin.CoreAdminHandler;
import org.apache.solr.handler.admin.InfoHandler;
import org.apache.solr.handler.component.ShardHandlerFactory;
import org.apache.solr.logging.LogWatcher;
+import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.update.UpdateShardHandler;
import org.apache.solr.util.DefaultSolrThreadFactory;
import org.apache.solr.util.FileUtils;
@@ -99,6 +103,17 @@ public class CoreContainer {
private String hostName;
+ private Map<String ,SolrRequestHandler> containerHandlers = new HashMap<>();
+
+ public SolrRequestHandler getRequestHandler(String path) {
+ return RequestHandlerBase.getRequestHandler(path, containerHandlers);
+ }
+
+ public Map<String, SolrRequestHandler> getRequestHandlers(){
+ return this.containerHandlers;
+
+ }
+
// private ClientConnectionManager clientConnectionManager = new PoolingClientConnectionManager();
{
@@ -222,8 +237,11 @@ public class CoreContainer {
zkSys.initZooKeeper(this, solrHome, cfg);
collectionsHandler = createHandler(cfg.getCollectionsHandlerClass(), CollectionsHandler.class);
+ containerHandlers.put("/admin/collections" , collectionsHandler);
infoHandler = createHandler(cfg.getInfoHandlerClass(), InfoHandler.class);
+ containerHandlers.put("/admin/info" , infoHandler);
coreAdminHandler = createHandler(cfg.getCoreAdminHandlerClass(), CoreAdminHandler.class);
+ containerHandlers.put(cfg.getAdminPath() , coreAdminHandler);
coreConfigService = cfg.createCoreConfigService(loader, zkSys.getZkController());
@@ -919,5 +937,5 @@ class CloserThread extends Thread {
}
}
}
-
+
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/RequestHandlers.java Sat Oct 4 18:18:55 2014
@@ -49,6 +49,7 @@ public final class RequestHandlers {
// the map implementation should be thread safe
private final Map<String, SolrRequestHandler> handlers =
new ConcurrentHashMap<>() ;
+ private final Map<String, SolrRequestHandler> immutableHandlers = Collections.unmodifiableMap(handlers) ;
/**
* Trim the trailing '/' if its there, and convert null to empty string.
@@ -59,7 +60,7 @@ public final class RequestHandlers {
* to map to the same handler
*
*/
- private static String normalize( String p )
+ public static String normalize( String p )
{
if(p == null) return "";
if( p.endsWith( "/" ) && p.length() > 1 )
@@ -114,7 +115,7 @@ public final class RequestHandlers {
* Returns an unmodifiable Map containing the registered handlers
*/
public Map<String,SolrRequestHandler> getRequestHandlers() {
- return Collections.unmodifiableMap( handlers );
+ return immutableHandlers;
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java Sat Oct 4 18:18:55 2014
@@ -38,6 +38,7 @@ import org.apache.solr.common.util.Execu
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.DirectoryFactory.DirContext;
+import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.SnapPuller;
import org.apache.solr.handler.UpdateRequestHandler;
import org.apache.solr.handler.admin.ShowFileRequestHandler;
@@ -1217,7 +1218,7 @@ public final class SolrCore implements S
* This function is thread safe.
*/
public SolrRequestHandler getRequestHandler(String handlerName) {
- return reqHandlers.get(handlerName);
+ return RequestHandlerBase.getRequestHandler(RequestHandlers.normalize(handlerName), reqHandlers.getRequestHandlers());
}
/**
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java Sat Oct 4 18:18:55 2014
@@ -20,13 +20,18 @@ package org.apache.solr.handler;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
+import java.util.List;
import org.apache.commons.io.IOUtils;
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.InitParams;
+import org.apache.solr.core.PluginInfo;
import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.util.plugin.PluginInfoInitialized;
public class DumpRequestHandler extends RequestHandlerBase
{
@@ -81,4 +86,20 @@ public class DumpRequestHandler extends
public String getDescription() {
return "Dump handler (debug)";
}
+
+ @Override
+ public SolrRequestHandler getSubHandler(String path) {
+ if(subpaths !=null && subpaths.contains(path)) return this;
+ return null;
+ }
+ private List<String> subpaths;
+
+ @Override
+ public void init(NamedList args) {
+ super.init(args);
+ if(args !=null) {
+ NamedList nl = (NamedList) args.get(PluginInfo.DEFAULTS);
+ if(nl!=null) subpaths = nl.getAll("subpath");
+ }
+ }
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java Sat Oct 4 18:18:55 2014
@@ -33,12 +33,13 @@ import org.apache.solr.util.stats.Timer;
import org.apache.solr.util.stats.TimerContext;
import java.net.URL;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
/**
*
*/
-public abstract class RequestHandlerBase implements SolrRequestHandler, SolrInfoMBean {
+public abstract class RequestHandlerBase implements SolrRequestHandler, SolrInfoMBean, NestedRequestHandler {
protected NamedList initArgs = null;
protected SolrParams defaults;
@@ -194,6 +195,41 @@ public abstract class RequestHandlerBase
return null; // this can be overridden, but not required
}
+
+ @Override
+ public SolrRequestHandler getSubHandler(String path) {
+ return null;
+ }
+
+
+ /**
+ * Get the request handler registered to a given name.
+ *
+ * This function is thread safe.
+ */
+ public static SolrRequestHandler getRequestHandler(String handlerName, Map<String, SolrRequestHandler> reqHandlers) {
+ if(handlerName == null) return null;
+ SolrRequestHandler handler = reqHandlers.get(handlerName);
+ int idx = 0;
+ if(handler == null) {
+ for (; ; ) {
+ idx = handlerName.indexOf('/', idx+1);
+ if (idx > 0) {
+ String firstPart = handlerName.substring(0, idx);
+ handler = reqHandlers.get(firstPart);
+ if (handler == null) continue;
+ if (handler instanceof NestedRequestHandler) {
+ return ((NestedRequestHandler) handler).getSubHandler(handlerName.substring(idx));
+ }
+ } else {
+ break;
+ }
+ }
+ }
+ return handler;
+ }
+
+
@Override
public NamedList<Object> getStatistics() {
NamedList<Object> lst = new SimpleOrderedMap<>();
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SolrRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SolrRequestHandler.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SolrRequestHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SolrRequestHandler.java Sat Oct 4 18:18:55 2014
@@ -60,5 +60,7 @@ public interface SolrRequestHandler exte
* all interface obligations.
*/
public void handleRequest(SolrQueryRequest req, SolrQueryResponse rsp);
+
+ public static final String TYPE = "requestHandler";
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Sat Oct 4 18:18:55 2014
@@ -256,20 +256,12 @@ public class SolrDispatchFilter extends
boolean usingAliases = false;
List<String> collectionsList = null;
// Check for the core admin collections url
- if( path.equals( "/admin/collections" ) ) {
- handler = cores.getCollectionsHandler();
+ handler = cores.getRequestHandler(path);
+ if( handler!= null ) {
solrReq = SolrRequestParsers.DEFAULT.parse(null,path, req);
handleAdminRequest(req, response, handler, solrReq);
return;
- }
- // Check for the core admin info url
- if( path.startsWith( "/admin/info" ) ) {
- handler = cores.getInfoHandler();
- solrReq = SolrRequestParsers.DEFAULT.parse(null,path, req);
- handleAdminRequest(req, response, handler, solrReq);
- return;
- }
- else {
+ } else {
//otherwise, we should find a core from the path
idx = path.indexOf( "/", 1 );
if( idx > 1 ) {
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java Sat Oct 4 18:18:55 2014
@@ -52,6 +52,7 @@ import org.apache.solr.common.params.Sol
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.FastInputStream;
+import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
@@ -134,7 +135,7 @@ public class SolrRequestParsers
parsers.put( STANDARD, standard );
parsers.put( "", standard );
}
-
+
public SolrQueryRequest parse( SolrCore core, String path, HttpServletRequest req ) throws Exception
{
SolrRequestParser parser = standard;
@@ -149,7 +150,8 @@ public class SolrRequestParsers
// Handlers and login will want to know the path. If it contains a ':'
// the handler could use it for RESTful URLs
sreq.getContext().put( "path", path );
-
+ sreq.getContext().put("httpMethod", req.getMethod());
+
if(addHttpRequestToContext) {
sreq.getContext().put("httpRequest", req);
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/solrconfig-paramset.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/solrconfig-paramset.xml?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/solrconfig-paramset.xml (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/solrconfig-paramset.xml Sat Oct 4 18:18:55 2014
@@ -60,5 +60,13 @@
</lst>
</requestHandler>
+ <requestHandler name="/greedypath" class="DumpRequestHandler">
+ <lst name="defaults">
+ <str name="subpath">/some/path</str>
+ <str name="subpath">/some/other/path</str>
+ </lst>
+ </requestHandler>
+
+
</config>
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestInitParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestInitParams.java?rev=1629437&r1=1629436&r2=1629437&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestInitParams.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestInitParams.java Sat Oct 4 18:18:55 2014
@@ -90,6 +90,13 @@ public class TestInitParams extends Solr
assertEquals(Arrays.asList("C1","C") ,def.getAll("c"));
}
+ public void testNestedRequestHandler() {
+ assertNotNull(h.getCore().getRequestHandler("/greedypath"));
+ assertNotNull(h.getCore().getRequestHandler("/greedypath/some/path"));
+ assertNotNull( h.getCore().getRequestHandler("/greedypath/some/other/path"));
+ assertNull(h.getCore().getRequestHandler("/greedypath/unknownpath"));
+ }
+