You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2013/09/09 20:47:36 UTC
svn commit: r1521239 - in /lucene/dev/branches/branch_4x: ./ solr/
solr/CHANGES.txt solr/solrj/
solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
Author: markrmiller
Date: Mon Sep 9 18:47:35 2013
New Revision: 1521239
URL: http://svn.apache.org/r1521239
Log:
SOLR-5215: Fix possibility of deadlock in ZooKeeper ConnectionManager.
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1521239&r1=1521238&r2=1521239&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Mon Sep 9 18:47:35 2013
@@ -68,15 +68,22 @@ 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-5156: Enhance ZkCLI to allow uploading of arbitrary files to ZK.
-* SOLR-4718: Allow solr.xml to be stored in ZooKeeper
-* SOLR-5156: Enhance ZkCLI to allow uploading of arbitrary files to ZK.
-err
+
+* 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,
exists() in function queries, etc. (Robert Muir)
@@ -158,6 +165,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
----------------------
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java?rev=1521239&r1=1521238&r2=1521239&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java Mon Sep 9 18:47:35 2013
@@ -37,16 +37,14 @@ class ConnectionManager implements Watch
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 Watch
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);