[ 
https://issues.apache.org/jira/browse/SOLR-13871?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17224868#comment-17224868
 ] 

Chris M. Hostetter commented on SOLR-13871:
-------------------------------------------

FWIW, I've been revisiting this idea as part of the work i've started doing 
investigating SOLR-14903.

In some (simple) manual experimentation, solr doesn't seem to care at all if a 
node goes down, and then comes back up later with a completley different 
nodeName because it's now running on a different port – the collection happily 
let's the existing replicas come back online at the new URLs.

This is easy to demonstrate with:
 * {{bin/solr -e cloud -noprompt}}
 * index some data
 * {{bin/solr stop -p 7574}}
 ** note the (2) "gone" replicas in the solr admin UI
 * {{bin/solr start -cloud -p 9999 -s "example/cloud/node2/solr" -z 
localhost:9983}}
 ** our replicas are back with the same core & coreNode names – just on on a 
new nodeName

the only potential problem i can find skimming the code, is at the "cluster" 
level – if there are any autoscaling/shard routing level APIs that might care 
about the (computed) 'nodeName' or 'hostname:port' ... i suppose it's also 
possible that an overseer command might pick a nodeName to use for a command 
(ie: add a core) and then before that command can be executed the node is 
restarted on a new port and now... i don't know what happens to that command. 
does it sit in the overseer queue forever until that nodeName shows up in live 
nodes again?

> JettySolrRunner should stop trying to re-use ports on re-start
> --------------------------------------------------------------
>
>                 Key: SOLR-13871
>                 URL: https://issues.apache.org/jira/browse/SOLR-13871
>             Project: Solr
>          Issue Type: Sub-task
>            Reporter: Chris M. Hostetter
>            Priority: Major
>
> JettySolrRunner currently has special logic in it's {{start()}} method that 
> will cause it (by default) to try to rebind to the port it was previously 
> assigned if it's restarting and configured with port '0'
> ie: the first time it starts the OS assigns the port, after that it tries to 
> re-use that same port.
> This is a bad idea in general, and leads to (very slow) BindException 
> failures in a lot of jenkins tests where nodes are restarted.
> Example...
> {noformat}
>    [junit4]   2> NOTE: reproduce with: ant test  -Dtestcase=ShardSplitTest 
> -Dtests.method=testSplitWithChaosMonkey -Dtests.seed=9097C20E8E9ACC68 -Dtes
> ts.multiplier=2 -Dtests.nightly=true -Dtests.slow=true 
> -Dtests.linedocsfile=/home/jenkins/jenkins-slave/workspace/Lucene-Solr-NightlyTests-master/test
> -data/enwiki.random.lines.txt -Dtests.locale=so-SO -Dtests.timezone=Etc/GMT+9 
> -Dtests.asserts=true -Dtests.file.encoding=UTF-8
>    [junit4] ERROR   81.2s J1 | ShardSplitTest.testSplitWithChaosMonkey <<<
>    [junit4]    > Throwable #1: java.net.BindException: Address already in use
>    [junit4]    >        at 
> __randomizedtesting.SeedInfo.seed([9097C20E8E9ACC68:1BB011DFCF9C67EC]:0)
>    [junit4]    >        at java.base/sun.nio.ch.Net.bind0(Native Method)
>    [junit4]    >        at java.base/sun.nio.ch.Net.bind(Net.java:461)
>    [junit4]    >        at java.base/sun.nio.ch.Net.bind(Net.java:453)
>    [junit4]    >        at 
> java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
>    [junit4]    >        at 
> java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
>    [junit4]    >        at 
> org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342)
>    [junit4]    >        at 
> org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:308)
>    [junit4]    >        at 
> org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
>    [junit4]    >        at 
> org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
>    [junit4]    >        at 
> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
>    [junit4]    >        at 
> org.eclipse.jetty.server.Server.doStart(Server.java:396)
>    [junit4]    >        at 
> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
>    [junit4]    >        at 
> org.apache.solr.client.solrj.embedded.JettySolrRunner.retryOnPortBindFailure(JettySolrRunner.java:569)
>    [junit4]    >        at 
> org.apache.solr.client.solrj.embedded.JettySolrRunner.start(JettySolrRunner.java:508)
>    [junit4]    >        at 
> org.apache.solr.client.solrj.embedded.JettySolrRunner.start(JettySolrRunner.java:476)
>    [junit4]    >        at 
> org.apache.solr.cloud.api.collections.ShardSplitTest.testSplitWithChaosMonkey(ShardSplitTest.java:499)
> {noformat}
> Ideally JettySolrRunner's default behavior should b to just trust it's config 
> – binding to a random port (even on restart, even if diff from it's previous 
> port) if configured with '0'.
> Callers – including tests – should eliminate any assumptions in their code 
> that the port will be consistent for the life of a JettySolrRunner (ie: 
> accept that the URL may change anytime stop/start is called)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to