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