mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fix: close HttpClient after binlog download to prevent resource leak (#5579)
BinlogDownloadQueue.download() creates a CloseableHttpClient for each download but never closes it. Over time this exhausts connection pool resources. Wrap the HTTP execution in a try-finally block to ensure the client is always closed. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -189,19 +189,23 @@ public class BinlogDownloadQueue {
|
|||||||
httpClient = HttpClientBuilder.create().setMaxConnPerRoute(50).setMaxConnTotal(100).build();
|
httpClient = HttpClientBuilder.create().setMaxConnPerRoute(50).setMaxConnTotal(100).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpGet httpGet = new HttpGet(downloadLink);
|
try {
|
||||||
RequestConfig requestConfig = RequestConfig.custom()
|
HttpGet httpGet = new HttpGet(downloadLink);
|
||||||
.setConnectTimeout(TIMEOUT)
|
RequestConfig requestConfig = RequestConfig.custom()
|
||||||
.setConnectionRequestTimeout(TIMEOUT)
|
.setConnectTimeout(TIMEOUT)
|
||||||
.setSocketTimeout(TIMEOUT)
|
.setConnectionRequestTimeout(TIMEOUT)
|
||||||
.build();
|
.setSocketTimeout(TIMEOUT)
|
||||||
httpGet.setConfig(requestConfig);
|
.build();
|
||||||
HttpResponse response = httpClient.execute(httpGet);
|
httpGet.setConfig(requestConfig);
|
||||||
int statusCode = response.getStatusLine().getStatusCode();
|
HttpResponse response = httpClient.execute(httpGet);
|
||||||
if (statusCode != HttpResponseStatus.OK.code()) {
|
int statusCode = response.getStatusLine().getStatusCode();
|
||||||
throw new RuntimeException("download failed , url:" + downloadLink + " , statusCode:" + statusCode);
|
if (statusCode != HttpResponseStatus.OK.code()) {
|
||||||
|
throw new RuntimeException("download failed , url:" + downloadLink + " , statusCode:" + statusCode);
|
||||||
|
}
|
||||||
|
saveFile(new File(destDir), "mysql-bin." + fileName, response);
|
||||||
|
} finally {
|
||||||
|
httpClient.close();
|
||||||
}
|
}
|
||||||
saveFile(new File(destDir), "mysql-bin." + fileName, response);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void saveFile(File parentFile, String fileName, HttpResponse response) throws IOException {
|
private static void saveFile(File parentFile, String fileName, HttpResponse response) throws IOException {
|
||||||
|
|||||||
Reference in New Issue
Block a user