You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Chris Hostetter <ho...@fucit.org> on 2012/11/30 05:20:06 UTC

localHostContext should not contain a / ... why not?

Can anyone shed some light on this code in ZkController...

     if (localHostContext.contains("/")) {
       throw new IllegalArgumentException("localHostContext ("
           + localHostContext + ") should not contain a /");
     }

...i don't really understand this limitation.  There's nothing in the 
servlet spec that prevents a context path from containing '/' characters 
-- i can for instance modify the jetty context file that ships with solr 
like so and jetty will happily run solr rooted at 
http://localhost:8983/solr/hoss/man ...


hossman@frisbee:~/lucene/dev$ svn diff solr/example/contexts/solr.xml
Index: solr/example/contexts/solr.xml
===================================================================
--- solr/example/contexts/solr.xml	(revision 1415493)
+++ solr/example/contexts/solr.xml	(working copy)
@@ -1,8 +1,8 @@
  <?xml version="1.0"?>
  <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
  <Configure class="org.eclipse.jetty.webapp.WebAppContext">
-  <Set name="contextPath">/solr</Set>
+  <Set name="contextPath">/solr/hoss/man</Set>
    <Set name="war"><SystemProperty name="jetty.home"/>/webapps/solr.war</Set>
    <Set name="defaultsDescriptor"><SystemProperty name="jetty.home"/>/etc/webdefault.xml</Set>
    <Set name="tempDirectory"><Property name="jetty.home" default="."/>/solr-webapp</Set>
-</Configure>
\ No newline at end of file
+</Configure>



My best guesses as to the intent of this code are:

1) that it was really ment to ensure the localHostContext didn't *start* 
with a redundent "/"

2) that there is some reason why the nodeName shouldn't include slashes, 
and the nodeName is built using the localHostContext, so the restriction 
propogates.

If it's #1 it seems like a trivial bug with an easy fix. #2 doesn't really 
make sense to me -- but it may just be my ZK ignorance: Aren't nodePaths 
in ZK hierarchical by nature, so shouldn't allowing "/" be fine? is there 
some reason introducing multiple "sub directories" (with a single child) 
in ZK for a single solr node would bad? ... if so then wouldn't a simple 
solution be to URL encode the localHostContext (or escape the "/" in some 
other way) when building the nodeName so that we can eliminate this 
limitation?




-Hoss

Re: localHostContext should not contain a / ... why not?

Posted by Mark Miller <ma...@gmail.com>.
I really don't remember. Yes, you don't want it to start with a /, yes it's part of the node name, but the node name should have all / turned into _. 

I'd simply try it - enforce no starting / instead, turn / into _ for the name node…see what tests pass, do some manual testing…

That's all I've got.

- Mark

On Nov 29, 2012, at 11:20 PM, Chris Hostetter <ho...@fucit.org> wrote:

> 
> Can anyone shed some light on this code in ZkController...
> 
>    if (localHostContext.contains("/")) {
>      throw new IllegalArgumentException("localHostContext ("
>          + localHostContext + ") should not contain a /");
>    }
> 
> ...i don't really understand this limitation.  There's nothing in the servlet spec that prevents a context path from containing '/' characters -- i can for instance modify the jetty context file that ships with solr like so and jetty will happily run solr rooted at http://localhost:8983/solr/hoss/man ...
> 
> 
> hossman@frisbee:~/lucene/dev$ svn diff solr/example/contexts/solr.xml
> Index: solr/example/contexts/solr.xml
> ===================================================================
> --- solr/example/contexts/solr.xml	(revision 1415493)
> +++ solr/example/contexts/solr.xml	(working copy)
> @@ -1,8 +1,8 @@
> <?xml version="1.0"?>
> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
> <Configure class="org.eclipse.jetty.webapp.WebAppContext">
> -  <Set name="contextPath">/solr</Set>
> +  <Set name="contextPath">/solr/hoss/man</Set>
>   <Set name="war"><SystemProperty name="jetty.home"/>/webapps/solr.war</Set>
>   <Set name="defaultsDescriptor"><SystemProperty name="jetty.home"/>/etc/webdefault.xml</Set>
>   <Set name="tempDirectory"><Property name="jetty.home" default="."/>/solr-webapp</Set>
> -</Configure>
> \ No newline at end of file
> +</Configure>
> 
> 
> 
> My best guesses as to the intent of this code are:
> 
> 1) that it was really ment to ensure the localHostContext didn't *start* with a redundent "/"
> 
> 2) that there is some reason why the nodeName shouldn't include slashes, and the nodeName is built using the localHostContext, so the restriction propogates.
> 
> If it's #1 it seems like a trivial bug with an easy fix. #2 doesn't really make sense to me -- but it may just be my ZK ignorance: Aren't nodePaths in ZK hierarchical by nature, so shouldn't allowing "/" be fine? is there some reason introducing multiple "sub directories" (with a single child) in ZK for a single solr node would bad? ... if so then wouldn't a simple solution be to URL encode the localHostContext (or escape the "/" in some other way) when building the nodeName so that we can eliminate this limitation?
> 
> 
> 
> 
> -Hoss