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
+  }
 }