You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2014/06/10 14:37:42 UTC
svn commit: r1601621 - in /lucene/dev/trunk/solr: CHANGES.txt
solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrServer.java
solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java
Author: shalin
Date: Tue Jun 10 12:37:41 2014
New Revision: 1601621
URL: http://svn.apache.org/r1601621
Log:
SOLR-6146: Incorrect configuration such as wrong chroot in zk server address can cause CloudSolrServer to leak resources
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrServer.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=1601621&r1=1601620&r2=1601621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Jun 10 12:37:41 2014
@@ -157,6 +157,9 @@ Bug Fixes
* SOLR-6149: Specifying the query value without any index value does not work in
Analysis browser. (Aman Tandon, shalin)
+* SOLR-6146: Incorrect configuration such as wrong chroot in zk server address can
+ cause CloudSolrServer to leak resources. (Jessica Cheng, Varun Thacker, shalin)
+
Other Changes
---------------------
Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrServer.java?rev=1601621&r1=1601620&r2=1601621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrServer.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrServer.java Tue Jun 10 12:37:41 2014
@@ -236,24 +236,33 @@ public class CloudSolrServer extends Sol
if (zkStateReader == null) {
synchronized (this) {
if (zkStateReader == null) {
+ ZkStateReader zk = null;
try {
- ZkStateReader zk = new ZkStateReader(zkHost, zkClientTimeout,
+ zk = new ZkStateReader(zkHost, zkClientTimeout,
zkConnectTimeout);
zk.createClusterStateWatchersAndUpdate();
zkStateReader = zk;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
+ if (zk != null) zk.close();
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
"", e);
} catch (KeeperException e) {
+ if (zk != null) zk.close();
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
"", e);
} catch (IOException e) {
+ if (zk != null) zk.close();
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
"", e);
} catch (TimeoutException e) {
+ if (zk != null) zk.close();
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
"", e);
+ } catch (Exception e) {
+ if (zk != null) zk.close();
+ // do not wrap because clients may be relying on the underlying exception being thrown
+ throw e;
}
}
}
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=1601621&r1=1601620&r2=1601621&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 Tue Jun 10 12:37:41 2014
@@ -57,6 +57,7 @@ import org.apache.solr.common.params.Com
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.zookeeper.KeeperException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -359,4 +360,20 @@ public class CloudSolrServerTest extends
}
}
+ public void testWrongZkChrootTest() throws MalformedURLException {
+ CloudSolrServer server = null;
+ try {
+ server = new CloudSolrServer(zkServer.getZkAddress() + "/xyz/foo");
+ server.setDefaultCollection(DEFAULT_COLLECTION);
+ server.setZkClientTimeout(1000*60);
+ server.connect();
+ fail("Expected exception");
+ } catch(SolrException e) {
+ assertTrue(e.getCause() instanceof KeeperException);
+ } finally {
+ server.shutdown();
+ }
+ // see SOLR-6146 - this test will fail by virtue of the zkClient tracking performed
+ // in the afterClass method of the base class
+ }
}