You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/12/08 16:33:49 UTC

[2/2] lucene-solr:jira/http2: Fix thread leaks in TestLBHttp2SolrClient

Fix thread leaks in TestLBHttp2SolrClient


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/3973060b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/3973060b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/3973060b

Branch: refs/heads/jira/http2
Commit: 3973060b18d8fa7e3a4050624040f2aae394cab9
Parents: 14fa6fd
Author: Cao Manh Dat <da...@apache.org>
Authored: Sat Dec 8 16:33:36 2018 +0000
Committer: Cao Manh Dat <da...@apache.org>
Committed: Sat Dec 8 16:33:36 2018 +0000

----------------------------------------------------------------------
 .../client/solrj/TestLBHttp2SolrClient.java     | 139 ++++++++++---------
 1 file changed, 71 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3973060b/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttp2SolrClient.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttp2SolrClient.java b/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttp2SolrClient.java
index 2d80c4a..3849872 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttp2SolrClient.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttp2SolrClient.java
@@ -134,41 +134,42 @@ public class TestLBHttp2SolrClient extends SolrTestCaseJ4 {
     for (int i = 0; i < solr.length; i++) {
       s[i] = solr[i].getUrl();
     }
-    LBHttp2SolrClient client = getLBHttp2SolrClient(httpClient, s);
-    client.setAliveCheckInterval(500);
-    SolrQuery solrQuery = new SolrQuery("*:*");
-    Set<String> names = new HashSet<>();
-    QueryResponse resp = null;
-    for (String ignored : s) {
-      resp = client.query(solrQuery);
-      assertEquals(10, resp.getResults().getNumFound());
-      names.add(resp.getResults().get(0).getFieldValue("name").toString());
-    }
-    assertEquals(3, names.size());
-
-    // Kill a server and test again
-    solr[1].jetty.stop();
-    solr[1].jetty = null;
-    names.clear();
-    for (String ignored : s) {
-      resp = client.query(solrQuery);
-      assertEquals(10, resp.getResults().getNumFound());
-      names.add(resp.getResults().get(0).getFieldValue("name").toString());
-    }
-    assertEquals(2, names.size());
-    assertFalse(names.contains("solr1"));
-
-    // Start the killed server once again
-    solr[1].startJetty();
-    // Wait for the alive check to complete
-    Thread.sleep(1200);
-    names.clear();
-    for (String ignored : s) {
-      resp = client.query(solrQuery);
-      assertEquals(10, resp.getResults().getNumFound());
-      names.add(resp.getResults().get(0).getFieldValue("name").toString());
+    try (LBHttp2SolrClient client = getLBHttp2SolrClient(httpClient, s)) {
+      client.setAliveCheckInterval(500);
+      SolrQuery solrQuery = new SolrQuery("*:*");
+      Set<String> names = new HashSet<>();
+      QueryResponse resp = null;
+      for (String ignored : s) {
+        resp = client.query(solrQuery);
+        assertEquals(10, resp.getResults().getNumFound());
+        names.add(resp.getResults().get(0).getFieldValue("name").toString());
+      }
+      assertEquals(3, names.size());
+
+      // Kill a server and test again
+      solr[1].jetty.stop();
+      solr[1].jetty = null;
+      names.clear();
+      for (String ignored : s) {
+        resp = client.query(solrQuery);
+        assertEquals(10, resp.getResults().getNumFound());
+        names.add(resp.getResults().get(0).getFieldValue("name").toString());
+      }
+      assertEquals(2, names.size());
+      assertFalse(names.contains("solr1"));
+
+      // Start the killed server once again
+      solr[1].startJetty();
+      // Wait for the alive check to complete
+      Thread.sleep(1200);
+      names.clear();
+      for (String ignored : s) {
+        resp = client.query(solrQuery);
+        assertEquals(10, resp.getResults().getNumFound());
+        names.add(resp.getResults().get(0).getFieldValue("name").toString());
+      }
+      assertEquals(3, names.size());
     }
-    assertEquals(3, names.size());
   }
 
   private LBHttp2SolrClient getLBHttp2SolrClient(Http2SolrClient httpClient, String... s) {
@@ -176,31 +177,32 @@ public class TestLBHttp2SolrClient extends SolrTestCaseJ4 {
   }
 
   public void testTwoServers() throws Exception {
-    LBHttp2SolrClient client = getLBHttp2SolrClient(httpClient, solr[0].getUrl(), solr[1].getUrl());
-    client.setAliveCheckInterval(500);
-    SolrQuery solrQuery = new SolrQuery("*:*");
-    QueryResponse resp = null;
-    solr[0].jetty.stop();
-    solr[0].jetty = null;
-    resp = client.query(solrQuery);
-    String name = resp.getResults().get(0).getFieldValue("name").toString();
-    Assert.assertEquals("solr/collection11", name);
-    resp = client.query(solrQuery);
-    name = resp.getResults().get(0).getFieldValue("name").toString();
-    Assert.assertEquals("solr/collection11", name);
-    solr[1].jetty.stop();
-    solr[1].jetty = null;
-    solr[0].startJetty();
-    Thread.sleep(1200);
-    try {
+    try (LBHttp2SolrClient client = getLBHttp2SolrClient(httpClient, solr[0].getUrl(), solr[1].getUrl())) {
+      client.setAliveCheckInterval(500);
+      SolrQuery solrQuery = new SolrQuery("*:*");
+      QueryResponse resp = null;
+      solr[0].jetty.stop();
+      solr[0].jetty = null;
       resp = client.query(solrQuery);
-    } catch(SolrServerException e) {
-      // try again after a pause in case the error is lack of time to start server
-      Thread.sleep(3000);
+      String name = resp.getResults().get(0).getFieldValue("name").toString();
+      Assert.assertEquals("solr/collection11", name);
       resp = client.query(solrQuery);
+      name = resp.getResults().get(0).getFieldValue("name").toString();
+      Assert.assertEquals("solr/collection11", name);
+      solr[1].jetty.stop();
+      solr[1].jetty = null;
+      solr[0].startJetty();
+      Thread.sleep(1200);
+      try {
+        resp = client.query(solrQuery);
+      } catch(SolrServerException e) {
+        // try again after a pause in case the error is lack of time to start server
+        Thread.sleep(3000);
+        resp = client.query(solrQuery);
+      }
+      name = resp.getResults().get(0).getFieldValue("name").toString();
+      Assert.assertEquals("solr/collection10", name);
     }
-    name = resp.getResults().get(0).getFieldValue("name").toString();
-    Assert.assertEquals("solr/collection10", name);
   }
 
   public void testReliability() throws Exception {
@@ -209,21 +211,22 @@ public class TestLBHttp2SolrClient extends SolrTestCaseJ4 {
       s[i] = solr[i].getUrl();
     }
 
-    LBHttp2SolrClient client = getLBHttp2SolrClient(httpClient, s);
-    client.setAliveCheckInterval(500);
+    try(LBHttp2SolrClient client = getLBHttp2SolrClient(httpClient, s)) {
+      client.setAliveCheckInterval(500);
 
-    // Kill a server and test again
-    solr[1].jetty.stop();
-    solr[1].jetty = null;
+      // Kill a server and test again
+      solr[1].jetty.stop();
+      solr[1].jetty = null;
 
-    // query the servers
-    for (String value : s)
-      client.query(new SolrQuery("*:*"));
+      // query the servers
+      for (String value : s)
+        client.query(new SolrQuery("*:*"));
 
-    // Start the killed server once again
-    solr[1].startJetty();
-    // Wait for the alive check to complete
-    waitForServer(30, client, 3, solr[1].name);
+      // Start the killed server once again
+      solr[1].startJetty();
+      // Wait for the alive check to complete
+      waitForServer(30, client, 3, solr[1].name);
+    }
   }
   
   // wait maximum ms for serverName to come back up