Solr cloud: zkHost in solr.xml gets wiped out

2013-06-14 Thread Al Wold
Hi,
I'm working on setting up a solr cloud test environment, and the target 
environment I need to put it in has multiple webapps per tomcat instance. With 
that in mind, I wanted/had to avoid putting any configs in system properties. I 
tried putting the zkHost in solr.xml, like this:

> 
> 
>   
>hostContext="/"/>
> 

Everything works fine when I first start things up, create collections, upload 
docs, search, etc. Creating the collection, however, modifies the solr.xml 
file, and doesn't keep the zkHost setting:

> 
> 
>hostContext="/">
>  instanceDir="directory_shard2_replica1/" transient="false" 
> name="directory_shard2_replica1" collection="directory"/>
>  instanceDir="directory_shard1_replica1/" transient="false" 
> name="directory_shard1_replica1" collection="directory"/>
>   
> 


With that in mind, once I restart tomcat, it no longer knows it's supposed to 
be talking to zookeeper, so it looks for local configs and blows up. 

I traced this back to the code in CoreContainer.java, in the method 
persistFile(), where it seems to contain no code to write out the zkHost when 
it updates solr.xml. I upped the logging on my solr instance to verify this 
code is executing, so I'm pretty sure it's the right spot.

Is anyone else using zkHost in their solr.xml successfully? I can't see how it 
would work given this problem.

Does this seem like a bug? If so, I can probably file a report and submit a 
patch. It seems like this problem may become a non-issue in 5.0, based on 
comments in the code and some of the discussion in JIRA, but I'm not sure how 
far off that is.

Thanks!

-Al Wold



Re: Start custom Java component on Solr start?

2013-06-17 Thread Al Wold
I've used a servlet context listener before and it works pretty well. You just 
have a write a small Java class to receive the event when the app is started, 
then add it to web.xml.

I don't think there's much good official documentation, but this blog post 
outlines it pretty simply:

http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/

-Al

On Jun 17, 2013, at 1:03 PM, Otis Gospodnetic wrote:

> Hi,
> 
> What is the best thing in Solr to hook into that would allow me to
> start (and keep running) a custom piece of code when Solr starts?  Say
> I want to have something that pulls data from an external queue from
> within Solr and indexes it into Solr and I want it start and stop
> together with the Solr process.  Is there any place in Solr where one
> could do that?
> 
> Thanks,
> Otis
> --
> Solr & ElasticSearch Support
> http://sematext.com/



Re: Solr cloud: zkHost in solr.xml gets wiped out

2013-06-17 Thread Al Wold
Hi Erick,
I tried out your changes from the branch_4x branch. It looks good in terms of 
preserving the zkHost, but I'm running into an exception because it isn't 
persisting the instanceDir attribute on the  element.

I've got a few other things I need to take care of, but as soon as I have time 
I'll dig in and see if I can figure out what's going on, and see what changed 
to make this not work.

Here are details on what the files looked like before/after CREATE call:

original solr.xml:



  
  


here's what was produced with 4.3 branch + a quick mod to preserve zkHost:



  


  


here's what was produced with branch_4x 4.4-SNAPSHOT:



  


  


and here's the error from solr.log after restarting after the CREATE:

2013-06-17 21:37:07,083 1874 [pool-2-thread-1] ERROR 
org.apache.solr.core.CoreContainer  - null:java.lang.NullPointerException: 
Missing required 'instanceDir'
at org.apache.solr.core.CoreDescriptor.doInit(CoreDescriptor.java:133)
at org.apache.solr.core.CoreDescriptor.(CoreDescriptor.java:87)
at org.apache.solr.core.CoreContainer.load(CoreContainer.java:365)
at org.apache.solr.core.CoreContainer.load(CoreContainer.java:221)
at 
org.apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.java:190)
at 
org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:124)
at 
org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277)
at 
org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
at 
org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
at 
org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:103)
at 
org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4638)
at 
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5294)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at 
org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1099)
at 
org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1621)
at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)


On Jun 16, 2013, at 5:38 AM, Erick Erickson wrote:

> Al:
> 
> As it happens, I hope sometime today to put up a patch for SOLR-4910
> that should harden up many things in persisting solr.xml, I'll be sure
> to include this. It's kind of a pain to create an automated test for
> this, so I'll give it a whirl manually.
> 
> As you say, most of this is going away in 5.0, but it needs to work for 4.x.
> 
> And when I get the patch up, if you could give it a "real world" try
> it'd be great!
> 
> Thanks,
> Erick
> 
> On Fri, Jun 14, 2013 at 6:15 PM, Al Wold  wrote:
>> Hi,
>> I'm working on setting up a solr cloud test environment, and the target 
>> environment I need to put it in has multiple webapps per tomcat instance. 
>> With that in mind, I wanted/had to avoid putting any configs in system 
>> properties. I tried putting the zkHost in solr.xml, like this:
>> 
>>> 
>>> 
>>>  
>>>  >> hostContext="/"/>
>>> 
>> 
>> Everything works fine when I first start things up, create collections, 
>> upload docs, search, etc. Creating the collection, however, modifies the 
>> solr.xml file, and doesn't keep the zkHost setting:
>> 
>>> 
>>> 
>>>  >> hostContext="/">
>>>>> instanceDir="directory_shard2_replica1/" transient="false" 
>>> name="directory_shard2_replica1" collection="directory"/>
>>>>> instanceDir="directory_shard1_replica1/" transient="false" 
>>> name="directory_shard1_replica1" collection="directory"/>
>>>  
>>> 
>> 
>> 
>> With that in mind, once I restart tomcat, it no longer knows it's suppose

Re: Solr cloud: zkHost in solr.xml gets wiped out

2013-06-18 Thread Al Wold
For the CREATE call, I'm doing it manually per the instructions here:

http://wiki.apache.org/solr/SolrCloud

Here's the exact URL I'm using:

http://asu-solr-cloud.elasticbeanstalk.com/admin/collections?action=CREATE&name=directory&numShards=2&replicationFactor=2&maxShardsPerNode=2

I'm testing out your patch now, and I'll let you know how it goes.

Thanks for all the help!

-Al

On Jun 18, 2013, at 6:47 AM, Erick Erickson wrote:

> OK, I think I see what's happening. If you do
> NOT specify an instanceDir on the create
> (and I'm doing this via the core admin
> interface, not SolrJ) then the default is
> used, but not persisted. If you _do_
> specify the instance dir, it will be persisted.
> 
> I've put up another quick patch (tested
> only in my test case, running full suite
> now). Can you give it a whirl? You'll have
> to apply the patch over top of the current
> 4x, een though the patch is for trunk it
> applied to 4x cleanly for me and the tests ran.
> 
> Thanks,
> Erick
> 
> On Tue, Jun 18, 2013 at 9:02 AM, Erick Erickson  
> wrote:
>> OK, I put up a very preliminary patch attached to the bug
>> if you want to try it out that addresses the extra junk being
>> put in the  tag. Doesn't address the instanceDir issue
>> since I haven't reproduced it yet.
>> 
>> Erick
>> 
>> On Tue, Jun 18, 2013 at 8:46 AM, Erick Erickson  
>> wrote:
>>> Whoa! What's this junk?
>>> qt="/admin/cores" wt="javabin" version="2
>>> 
>>> That shouldn't be being preserved, and the instancedir should be!
>>> 
>>> So I'm guessing you're using SolrJ to create the core, but I just
>>> reproduced the problem (at least the 'wt="json" ') bit from the
>>> browser and even from one of my internal tests when I added
>>> extra parameters.
>>> 
>>> That said, instanceDir is being preserved in my test, so I'm not
>>> seeing everything you're seeing, could you cut/paste your
>>> create code? I'll see if I can set up a test case for SolrJ to catch
>>> this too.
>>> 
>>> See SOLR-4935
>>> 
>>> Thanks for reporting!
>>> 
>>> On Mon, Jun 17, 2013 at 5:39 PM, Al Wold  wrote:
>>>> Hi Erick,
>>>> I tried out your changes from the branch_4x branch. It looks good in terms 
>>>> of preserving the zkHost, but I'm running into an exception because it 
>>>> isn't persisting the instanceDir attribute on the  element.
>>>> 
>>>> I've got a few other things I need to take care of, but as soon as I have 
>>>> time I'll dig in and see if I can figure out what's going on, and see what 
>>>> changed to make this not work.
>>>> 
>>>> Here are details on what the files looked like before/after CREATE call:
>>>> 
>>>> original solr.xml:
>>>> 
>>>> 
>>>> 
>>>>  
>>>>  >>> hostContext="/"/>
>>>> 
>>>> 
>>>> here's what was produced with 4.3 branch + a quick mod to preserve zkHost:
>>>> 
>>>> 
>>>> 
>>>>  >>> hostContext="/">
>>>>>>> instanceDir="directory_shard1_replica1/" transient="false" 
>>>> name="directory_shard1_replica1" collection="directory"/>
>>>>>>> instanceDir="directory_shard2_replica1/" transient="false" 
>>>> name="directory_shard2_replica1" collection="directory"/>
>>>>  
>>>> 
>>>> 
>>>> here's what was produced with branch_4x 4.4-SNAPSHOT:
>>>> 
>>>> 
>>>> 
>>>>  >>> distribUpdateSoTimeout="0" distribUpdateConnTimeout="0" hostPort="8080" 
>>>> hostContext="/">
>>>>>>> collection="directory" qt="/admin/cores" wt="javabin" version="2"/>
>>>>>>> collection="directory" qt="/admin/cores" wt="javabin" version="2"/>
>>>>  
>>>> 
>>>> 
>>>> and here's the error from solr.log after restarting after the CREATE:
>>>> 
>>>> 2013-06-17 21:37:07,083 1874 [pool-2-thread-1] ERROR 
>>>> org.apache.solr.core.CoreContainer  - null:java

Re: Solr cloud: zkHost in solr.xml gets wiped out

2013-06-18 Thread Al Wold
I just finished a test with the patch, and it looks like all is working well.

On Jun 18, 2013, at 12:19 PM, Al Wold wrote:

> For the CREATE call, I'm doing it manually per the instructions here:
> 
> http://wiki.apache.org/solr/SolrCloud
> 
> Here's the exact URL I'm using:
> 
> http://asu-solr-cloud.elasticbeanstalk.com/admin/collections?action=CREATE&name=directory&numShards=2&replicationFactor=2&maxShardsPerNode=2
> 
> I'm testing out your patch now, and I'll let you know how it goes.
> 
> Thanks for all the help!
> 
> -Al
> 
> On Jun 18, 2013, at 6:47 AM, Erick Erickson wrote:
> 
>> OK, I think I see what's happening. If you do
>> NOT specify an instanceDir on the create
>> (and I'm doing this via the core admin
>> interface, not SolrJ) then the default is
>> used, but not persisted. If you _do_
>> specify the instance dir, it will be persisted.
>> 
>> I've put up another quick patch (tested
>> only in my test case, running full suite
>> now). Can you give it a whirl? You'll have
>> to apply the patch over top of the current
>> 4x, een though the patch is for trunk it
>> applied to 4x cleanly for me and the tests ran.
>> 
>> Thanks,
>> Erick
>> 
>> On Tue, Jun 18, 2013 at 9:02 AM, Erick Erickson  
>> wrote:
>>> OK, I put up a very preliminary patch attached to the bug
>>> if you want to try it out that addresses the extra junk being
>>> put in the  tag. Doesn't address the instanceDir issue
>>> since I haven't reproduced it yet.
>>> 
>>> Erick
>>> 
>>> On Tue, Jun 18, 2013 at 8:46 AM, Erick Erickson  
>>> wrote:
>>>> Whoa! What's this junk?
>>>> qt="/admin/cores" wt="javabin" version="2
>>>> 
>>>> That shouldn't be being preserved, and the instancedir should be!
>>>> 
>>>> So I'm guessing you're using SolrJ to create the core, but I just
>>>> reproduced the problem (at least the 'wt="json" ') bit from the
>>>> browser and even from one of my internal tests when I added
>>>> extra parameters.
>>>> 
>>>> That said, instanceDir is being preserved in my test, so I'm not
>>>> seeing everything you're seeing, could you cut/paste your
>>>> create code? I'll see if I can set up a test case for SolrJ to catch
>>>> this too.
>>>> 
>>>> See SOLR-4935
>>>> 
>>>> Thanks for reporting!
>>>> 
>>>> On Mon, Jun 17, 2013 at 5:39 PM, Al Wold  wrote:
>>>>> Hi Erick,
>>>>> I tried out your changes from the branch_4x branch. It looks good in 
>>>>> terms of preserving the zkHost, but I'm running into an exception because 
>>>>> it isn't persisting the instanceDir attribute on the  element.
>>>>> 
>>>>> I've got a few other things I need to take care of, but as soon as I have 
>>>>> time I'll dig in and see if I can figure out what's going on, and see 
>>>>> what changed to make this not work.
>>>>> 
>>>>> Here are details on what the files looked like before/after CREATE call:
>>>>> 
>>>>> original solr.xml:
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> >>>> hostContext="/"/>
>>>>> 
>>>>> 
>>>>> here's what was produced with 4.3 branch + a quick mod to preserve zkHost:
>>>>> 
>>>>> 
>>>>> 
>>>>> >>>> hostContext="/">
>>>>>   >>>> instanceDir="directory_shard1_replica1/" transient="false" 
>>>>> name="directory_shard1_replica1" collection="directory"/>
>>>>>   >>>> instanceDir="directory_shard2_replica1/" transient="false" 
>>>>> name="directory_shard2_replica1" collection="directory"/>
>>>>> 
>>>>> 
>>>>> 
>>>>> here's what was produced with branch_4x 4.4-SNAPSHOT:
>>>>> 
>>>>> 
>>>>> 
>>>>> >>>> distribUpdateSoTimeout="0" distribUpdateConnTimeout="0" hostPort="8080" 
>>>>> hostContext="/">
>>&