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();
+  }
 
 }