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/10/19 19:09:56 UTC
svn commit: r1533786 - in /lucene/dev/trunk/solr: ./
solrj/src/java/org/apache/solr/common/cloud/
solrj/src/test/org/apache/solr/client/solrj/impl/
Author: markrmiller
Date: Sat Oct 19 17:09:56 2013
New Revision: 1533786
URL: http://svn.apache.org/r1533786
Log:
SOLR-5359: ZooKeeper client is not closed when it fails to connect to an ensemble.
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/DefaultConnectionStrategy.java
lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1533786&r1=1533785&r2=1533786&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sat Oct 19 17:09:56 2013
@@ -108,6 +108,9 @@ Bug Fixes
* SOLR-5367: Unmarshalling delete by id commands with JavaBin can lead to class cast
exception. (Mark Miller)
+
+* SOLR-5359: ZooKeeper client is not closed when it fails to connect to an ensemble.
+ (Mark Miller, Klaus Herrmann)
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/DefaultConnectionStrategy.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/DefaultConnectionStrategy.java?rev=1533786&r1=1533785&r2=1533786&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/DefaultConnectionStrategy.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/DefaultConnectionStrategy.java Sat Oct 19 17:09:56 2013
@@ -34,21 +34,40 @@ public class DefaultConnectionStrategy e
@Override
public void connect(String serverAddress, int timeout, Watcher watcher, ZkUpdate updater) throws IOException, InterruptedException, TimeoutException {
- updater.update(new SolrZooKeeper(serverAddress, timeout, watcher));
+ SolrZooKeeper zk = new SolrZooKeeper(serverAddress, timeout, watcher);
+ boolean success = false;
+ try {
+ updater.update(zk);
+ success = true;
+ } finally {
+ if (!success) {
+ zk.close();
+ }
+ }
}
@Override
public void reconnect(final String serverAddress, final int zkClientTimeout,
final Watcher watcher, final ZkUpdate updater) throws IOException {
log.info("Connection expired - starting a new one...");
-
+ SolrZooKeeper zk = new SolrZooKeeper(serverAddress, zkClientTimeout, watcher);
+ boolean success = false;
try {
updater
- .update(new SolrZooKeeper(serverAddress, zkClientTimeout, watcher));
+ .update(zk);
+ success = true;
log.info("Reconnected to ZooKeeper");
} catch (Exception e) {
SolrException.log(log, "Reconnect to ZooKeeper failed", e);
log.info("Reconnect to ZooKeeper failed");
+ } finally {
+ if (!success) {
+ try {
+ zk.close();
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
}
}
Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java?rev=1533786&r1=1533785&r2=1533786&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java Sat Oct 19 17:09:56 2013
@@ -120,6 +120,13 @@ public class SolrZkClient {
});
} catch (Throwable e) {
connManager.close();
+ if (keeper != null) {
+ try {
+ keeper.close();
+ } catch (InterruptedException e1) {
+ Thread.currentThread().interrupt();
+ }
+ }
throw new RuntimeException(e);
}
@@ -127,6 +134,11 @@ public class SolrZkClient {
connManager.waitForConnected(clientConnectTimeout);
} catch (Throwable e) {
connManager.close();
+ try {
+ keeper.close();
+ } catch (InterruptedException e1) {
+ Thread.currentThread().interrupt();
+ }
throw new RuntimeException(e);
}
numOpens.incrementAndGet();
Modified: lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java?rev=1533786&r1=1533785&r2=1533786&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java (original)
+++ lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java Sat Oct 19 17:09:56 2013
@@ -18,11 +18,10 @@ package org.apache.solr.client.solrj.imp
*/
import java.io.File;
-import java.util.HashSet;
+import java.net.MalformedURLException;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
-import java.util.Set;
+import java.util.concurrent.TimeoutException;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
@@ -41,6 +40,7 @@ import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
+
/**
* This test would be faster if we simulated the zk state instead.
*/
@@ -201,5 +201,17 @@ public class CloudSolrServerTest extends
SolrInputDocument doc = getDoc(fields);
indexDoc(doc);
}
+
+ public void testShutdown() throws MalformedURLException {
+ CloudSolrServer server = new CloudSolrServer("[ff01::114]:33332");
+ server.setZkConnectTimeout(100);
+ try {
+ server.connect();
+ fail("Expected exception");
+ } catch(RuntimeException e) {
+ assertTrue(e.getCause() instanceof TimeoutException);
+ }
+ server.shutdown();
+ }
}