You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Scott Blum (JIRA)" <ji...@apache.org> on 2016/06/28 21:02:57 UTC

[jira] [Commented] (SOLR-8777) Duplicate Solr process can cripple a running process

    [ 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: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org