Thanks for the confirmation! I was wondering where these bits came from
 wt="javabin" version="2"
since I wasn't seeing them, but you mentioned SolrCloud, so that
explains things.

It'll be tonight before I commit the fix I'm afraid, I'm traveling and
need to put one more test in.

Best
Erick

On Tue, Jun 18, 2013 at 5:47 PM, Al Wold <alw...@alwold.com> wrote:
> 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 <erickerick...@gmail.com> 
>>> 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 <core> 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 <erickerick...@gmail.com> 
>>>> 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 <alw...@alwold.com> 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 <core> 
>>>>>> 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:
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8" ?>
>>>>>> <solr persistent="true" sharedLib="lib" zkHost="10.116.249.136:2181">
>>>>>> <!-- this 8080 might need to change in production -->
>>>>>> <cores adminPath="/admin/cores" zkClientTimeout="20000" hostPort="8080" 
>>>>>> hostContext="/"/>
>>>>>> </solr>
>>>>>>
>>>>>> here's what was produced with 4.3 branch + a quick mod to preserve 
>>>>>> zkHost:
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8" ?>
>>>>>> <solr persistent="true" zkHost="10.116.249.136:2181" sharedLib="lib">
>>>>>> <cores adminPath="/admin/cores" zkClientTimeout="20000" hostPort="8080" 
>>>>>> hostContext="/">
>>>>>>   <core loadOnStartup="true" shard="shard1" 
>>>>>> instanceDir="directory_shard1_replica1/" transient="false" 
>>>>>> name="directory_shard1_replica1" collection="directory"/>
>>>>>>   <core loadOnStartup="true" shard="shard2" 
>>>>>> instanceDir="directory_shard2_replica1/" transient="false" 
>>>>>> name="directory_shard2_replica1" collection="directory"/>
>>>>>> </cores>
>>>>>> </solr>
>>>>>>
>>>>>> here's what was produced with branch_4x 4.4-SNAPSHOT:
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8" ?>
>>>>>> <solr persistent="true" zkHost="10.116.249.136:2181" sharedLib="lib">
>>>>>> <cores adminPath="/admin/cores" zkClientTimeout="20000" 
>>>>>> distribUpdateSoTimeout="0" distribUpdateConnTimeout="0" hostPort="8080" 
>>>>>> hostContext="/">
>>>>>>   <core shard="shard1" numShards="2" name="directory_shard1_replica2" 
>>>>>> collection="directory" qt="/admin/cores" wt="javabin" version="2"/>
>>>>>>   <core shard="shard2" numShards="2" name="directory_shard2_replica2" 
>>>>>> collection="directory" qt="/admin/cores" wt="javabin" version="2"/>
>>>>>> </cores>
>>>>>> </solr>
>>>>>>
>>>>>> 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.<init>(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.<init>(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 <alw...@alwold.com> 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:
>>>>>>>>
>>>>>>>>> <?xml version="1.0" encoding="UTF-8" ?>
>>>>>>>>> <solr persistent="true" sharedLib="lib" zkHost="10.116.249.136:2181">
>>>>>>>>> <!-- this 8080 might need to change in production -->
>>>>>>>>> <cores adminPath="/admin/cores" zkClientTimeout="20000" 
>>>>>>>>> hostPort="8080" hostContext="/"/>
>>>>>>>>> </solr>
>>>>>>>>
>>>>>>>> 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:
>>>>>>>>
>>>>>>>>> <?xml version="1.0" encoding="UTF-8" ?>
>>>>>>>>> <solr persistent="true" sharedLib="lib">
>>>>>>>>> <cores adminPath="/admin/cores" zkClientTimeout="20000" 
>>>>>>>>> hostPort="8080" hostContext="/">
>>>>>>>>>  <core loadOnStartup="true" shard="shard2" 
>>>>>>>>> instanceDir="directory_shard2_replica1/" transient="false" 
>>>>>>>>> name="directory_shard2_replica1" collection="directory"/>
>>>>>>>>>  <core loadOnStartup="true" shard="shard1" 
>>>>>>>>> instanceDir="directory_shard1_replica1/" transient="false" 
>>>>>>>>> name="directory_shard1_replica1" collection="directory"/>
>>>>>>>>> </cores>
>>>>>>>>> </solr>
>>>>>>>>
>>>>>>>>
>>>>>>>> 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
>>>>>>>>
>>>>>>
>>>
>>
>

Reply via email to