Make sure to return http connection to the connection pool

Change-Id: I572fedfb2d9f0369d78dc64782b84ca651623905
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java
index 4cd58dd..34786d3 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java
@@ -16,6 +16,7 @@
 
 import com.google.common.base.Preconditions;
 
+import org.apache.http.client.methods.CloseableHttpResponse;
 import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.RawParseUtils;
 
@@ -24,12 +25,12 @@
 import java.io.Reader;
 import java.nio.ByteBuffer;
 
-public class HttpResponse {
+public class HttpResponse implements AutoCloseable {
 
-  protected org.apache.http.HttpResponse response;
+  protected CloseableHttpResponse response;
   protected Reader reader;
 
-  HttpResponse(org.apache.http.HttpResponse response) {
+  HttpResponse(CloseableHttpResponse response) {
     this.response = response;
   }
 
@@ -40,10 +41,15 @@
     return reader;
   }
 
-  public void consume() throws IllegalStateException, IOException {
-    Reader reader = getReader();
-    if (reader != null) {
-      while (reader.read() != -1);
+  @Override
+  public void close() throws IOException {
+    try {
+      Reader reader = getReader();
+      if (reader != null) {
+        while (reader.read() != -1);
+      }
+    } finally {
+      response.close();
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java
index 31329b3..cf49557 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java
@@ -18,11 +18,11 @@
 
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.conn.ssl.X509HostnameVerifier;
 import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 
 import java.io.IOException;
@@ -43,7 +43,7 @@
   protected final String url;
   private final String user;
   private final String pass;
-  private HttpClient client;
+  private CloseableHttpClient client;
 
   public HttpSession(String url, String user, String pass) {
     this.url = CharMatcher.is('/').trimTrailingFrom(url);
@@ -56,7 +56,7 @@
     return new HttpResponse(getClient().execute(get));
   }
 
-  protected HttpClient getClient() throws IOException {
+  protected CloseableHttpClient getClient() throws IOException {
     if (client == null) {
       URI uri = URI.create(url);
       BasicCredentialsProvider creds = new BasicCredentialsProvider();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java b/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
index d48ca5d..967069e 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
@@ -42,9 +42,10 @@
   public ProjectInfo getProject(String projectName) throws IOException,
       BadRequestException {
     String endPoint = "/projects/" + projectName;
-    RestResponse r = checkedGet(endPoint);
-    return newGson().fromJson(r.getReader(),
-        new TypeToken<ProjectInfo>() {}.getType());
+    try (RestResponse r = checkedGet(endPoint)) {
+      return newGson().fromJson(r.getReader(),
+          new TypeToken<ProjectInfo>() {}.getType());
+    }
   }
 
   public List<ChangeInfo> queryChanges(String projectName) throws IOException,
@@ -59,10 +60,12 @@
                 ListChangesOption.CURRENT_REVISION,
                 ListChangesOption.ALL_REVISIONS,
                 ListChangesOption.ALL_COMMITS)));
-    RestResponse r = checkedGet(endPoint);
-    List<ChangeInfo> result =
-        newGson().fromJson(r.getReader(),
+
+    List<ChangeInfo> result;
+    try (RestResponse r = checkedGet(endPoint)) {
+      result = newGson().fromJson(r.getReader(),
             new TypeToken<List<ChangeInfo>>() {}.getType());
+    }
 
     for (ChangeInfo c : result) {
       for (Map.Entry<String, RevisionInfo> e : c.revisions.entrySet()) {
@@ -76,10 +79,11 @@
   public Iterable<CommentInfo> getComments(int changeId, String rev)
       throws IOException, BadRequestException {
     String endPoint = "/changes/" + changeId + "/revisions/" + rev + "/comments";
-    RestResponse r = checkedGet(endPoint);
-    Map<String, List<CommentInfo>> result =
-        newGson().fromJson(r.getReader(),
-            new TypeToken<Map<String, List<CommentInfo>>>() {}.getType());
+    Map<String, List<CommentInfo>> result;
+    try (RestResponse r = checkedGet(endPoint)) {
+      result = newGson().fromJson(r.getReader(),
+              new TypeToken<Map<String, List<CommentInfo>>>() {}.getType());
+    }
     for (Map.Entry<String, List<CommentInfo>> e : result.entrySet()) {
       for (CommentInfo i : e.getValue()) {
         i.path = e.getKey();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java b/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java
index 512db6e..24f6831 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java
@@ -16,13 +16,15 @@
 
 import static com.google.gerrit.httpd.restapi.RestApiServlet.JSON_MAGIC;
 
+import org.apache.http.client.methods.CloseableHttpResponse;
+
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 
 public class RestResponse extends HttpResponse {
 
-  RestResponse(org.apache.http.HttpResponse response) {
+  RestResponse(CloseableHttpResponse response) {
     super(response);
   }