[
https://issues.apache.org/jira/browse/SOLR-8777?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15353715#comment-15353715
]
Scott Blum commented on SOLR-8777:
----------------------------------
LGTM. One suggestion, it's almost as easy to make
checkForExistingEphemeralNode() to use a watcher instead of a loop.
{code}
private void checkForExistingEphemeralNode() throws KeeperException,
InterruptedException {
if (zkRunOnly) {
return;
}
String nodeName = getNodeName();
String nodePath = ZkStateReader.LIVE_NODES_ZKNODE + "/" + nodeName;
if (!zkClient.exists(nodePath, true)) {
return;
}
final CountDownLatch deletedLatch = new CountDownLatch(1);
Stat stat = zkClient.exists(nodePath, new Watcher() {
@Override
public void process(WatchedEvent event) {
if (Event.EventType.None.equals(event.getType())) {
return;
}
if (Event.EventType.NodeDeleted.equals(event.getType())) {
deletedLatch.countDown();
}
}
}, true);
if (stat == null) {
// suddenly disappeared
return;
}
boolean deleted =
deletedLatch.await(zkClient.getSolrZooKeeper().getSessionTimeout() * 2,
TimeUnit.MILLISECONDS);
if (!deleted) {
throw new SolrException(ErrorCode.SERVER_ERROR, "A previous ephemeral live
node still exists. " +
"Solr cannot continue. Please ensure that no other Solr process using
the same port is running already.");
}
}
{code}
> Duplicate Solr process can cripple a running process
> ----------------------------------------------------
>
> Key: SOLR-8777
> URL: https://issues.apache.org/jira/browse/SOLR-8777
> Project: Solr
> Issue Type: Bug
> Components: SolrCloud
> Affects Versions: 5.3.1
> Reporter: Shalin Shekhar Mangar
> Attachments: SOLR-8777.patch
>
>
> Thanks to [~mewmewball] for catching this one.
> Accidentally executing the same instance of Solr twice causes the second
> start instance to die with an "Address already in use", but not before
> deleting the first instance's live_node entry, emitting "Found a previous
> node that still exists while trying to register a new live node <node> -
> removing existing node to create another".
> The second start instance dies and its ephemeral node is then removed,
> causing /live_nodes/<node> to be empty since the first start instance's
> live_node was deleted by the second.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]