mirror of https://github.com/apache/lucene.git
SOLR-5215: Fix possibility of deadlock in ZooKeeper ConnectionManager.
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1521236 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9cedad9cd1
commit
19f9181c74
|
@ -101,13 +101,21 @@ New Features
|
|||
the "ie" (input encoding) parameter, e.g. "select?q=m%FCller&ie=ISO-8859-1".
|
||||
The default is UTF-8. To change the encoding of POSTed content, use the
|
||||
"Content-Type" HTTP header. (Uwe Schindler, David Smiley)
|
||||
|
||||
* SOLR-4221: Custom sharding (Noble Paul)
|
||||
* SOLR-4808: Persist and use router,replicationFactor and maxShardsPerNode at Collection and Shard level (Noble Paul, Shalin Mangar)
|
||||
|
||||
* SOLR-4808: Persist and use router,replicationFactor and maxShardsPerNode at Collection
|
||||
and Shard level (Noble Paul, Shalin Mangar)
|
||||
|
||||
* SOLR-5006: CREATESHARD command for 'implicit' shards (Noble Paul)
|
||||
|
||||
* SOLR-5017: Allow sharding based on the value of a field (Noble Paul)
|
||||
|
||||
* SOLR-4222: create custom sharded collection via collections API (Noble Paul)
|
||||
* SOLR-4718: Allow solr.xml to be stored in ZooKeeper
|
||||
* SOLR-5156: Enhance ZkCLI to allow uploading of arbitrary files to ZK.
|
||||
|
||||
* SOLR-4718: Allow solr.xml to be stored in ZooKeeper. (Mark Miller, Erick Erickson)
|
||||
|
||||
* SOLR-5156: Enhance ZkCLI to allow uploading of arbitrary files to ZK. (Erick Erickson)
|
||||
|
||||
* SOLR-5165: Single-valued docValues fields no longer require a default value.
|
||||
Additionally they work with sortMissingFirst, sortMissingLast, facet.missing,
|
||||
|
@ -187,6 +195,9 @@ Bug Fixes
|
|||
* SOLR-5206: Fixed OpenExchangeRatesOrgProvider to use refreshInterval correctly
|
||||
(Catalin, hossman)
|
||||
|
||||
* SOLR-5215: Fix possibility of deadlock in ZooKeeper ConnectionManager.
|
||||
(Mark Miller, Ricardo Merizalde)
|
||||
|
||||
Optimizations
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -37,16 +37,14 @@ class ConnectionManager implements Watcher {
|
|||
private boolean connected;
|
||||
|
||||
private final ZkClientConnectionStrategy connectionStrategy;
|
||||
|
||||
private Object connectionUpdateLock = new Object();
|
||||
|
||||
private String zkServerAddress;
|
||||
private final String zkServerAddress;
|
||||
|
||||
private int zkClientTimeout;
|
||||
private final int zkClientTimeout;
|
||||
|
||||
private SolrZkClient client;
|
||||
private final SolrZkClient client;
|
||||
|
||||
private OnReconnect onReconnect;
|
||||
private final OnReconnect onReconnect;
|
||||
|
||||
private volatile boolean isClosed = false;
|
||||
|
||||
|
@ -92,37 +90,35 @@ class ConnectionManager implements Watcher {
|
|||
new ZkClientConnectionStrategy.ZkUpdate() {
|
||||
@Override
|
||||
public void update(SolrZooKeeper keeper) {
|
||||
// if keeper does not replace oldKeeper we must be sure to close it
|
||||
synchronized (connectionUpdateLock) {
|
||||
try {
|
||||
waitForConnected(Long.MAX_VALUE);
|
||||
} catch (Exception e1) {
|
||||
closeKeeper(keeper);
|
||||
throw new RuntimeException(e1);
|
||||
}
|
||||
log.info("Connection with ZooKeeper reestablished.");
|
||||
try {
|
||||
client.updateKeeper(keeper);
|
||||
} catch (InterruptedException e) {
|
||||
closeKeeper(keeper);
|
||||
Thread.currentThread().interrupt();
|
||||
// we must have been asked to stop
|
||||
throw new RuntimeException(e);
|
||||
} catch(Throwable t) {
|
||||
closeKeeper(keeper);
|
||||
throw new RuntimeException(t);
|
||||
}
|
||||
|
||||
if (onReconnect != null) {
|
||||
onReconnect.command();
|
||||
}
|
||||
synchronized (ConnectionManager.this) {
|
||||
ConnectionManager.this.connected = true;
|
||||
}
|
||||
try {
|
||||
waitForConnected(Long.MAX_VALUE);
|
||||
} catch (Exception e1) {
|
||||
closeKeeper(keeper);
|
||||
throw new RuntimeException(e1);
|
||||
}
|
||||
|
||||
log.info("Connection with ZooKeeper reestablished.");
|
||||
try {
|
||||
client.updateKeeper(keeper);
|
||||
} catch (InterruptedException e) {
|
||||
closeKeeper(keeper);
|
||||
Thread.currentThread().interrupt();
|
||||
// we must have been asked to stop
|
||||
throw new RuntimeException(e);
|
||||
} catch (Throwable t) {
|
||||
closeKeeper(keeper);
|
||||
throw new RuntimeException(t);
|
||||
}
|
||||
|
||||
if (onReconnect != null) {
|
||||
onReconnect.command();
|
||||
}
|
||||
|
||||
synchronized (ConnectionManager.this) {
|
||||
ConnectionManager.this.connected = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
} catch (Exception e) {
|
||||
SolrException.log(log, "", e);
|
||||
|
|
Loading…
Reference in New Issue