YARN-8336. Fix potential connection leak in SchedConfCLI and YarnWebServiceUtils. Contributed by Giovanni Matteo Fumarola.

This commit is contained in:
Inigo Goiri 2018-05-23 11:55:31 -07:00
parent c13dea87d9
commit e30938af12
2 changed files with 38 additions and 21 deletions

View File

@ -132,25 +132,35 @@ public class SchedConfCLI extends Configured implements Tool {
}
Client webServiceClient = Client.create();
WebResource webResource = webServiceClient.resource(WebAppUtils.
getRMWebAppURLWithScheme(getConf()));
ClientResponse response = webResource.path("ws").path("v1").path("cluster")
.path("scheduler-conf").accept(MediaType.APPLICATION_JSON)
.entity(YarnWebServiceUtils.toJson(updateInfo,
SchedConfUpdateInfo.class), MediaType.APPLICATION_JSON)
.put(ClientResponse.class);
if (response != null) {
if (response.getStatus() == Status.OK.getStatusCode()) {
System.out.println("Configuration changed successfully.");
return 0;
WebResource webResource = webServiceClient
.resource(WebAppUtils.getRMWebAppURLWithScheme(getConf()));
ClientResponse response = null;
try {
response =
webResource.path("ws").path("v1").path("cluster")
.path("scheduler-conf").accept(MediaType.APPLICATION_JSON)
.entity(YarnWebServiceUtils.toJson(updateInfo,
SchedConfUpdateInfo.class), MediaType.APPLICATION_JSON)
.put(ClientResponse.class);
if (response != null) {
if (response.getStatus() == Status.OK.getStatusCode()) {
System.out.println("Configuration changed successfully.");
return 0;
} else {
System.err.println("Configuration change unsuccessful: "
+ response.getEntity(String.class));
}
} else {
System.err.println("Configuration change unsuccessful: "
+ response.getEntity(String.class));
System.err.println("Configuration change unsuccessful: null response");
}
} else {
System.err.println("Configuration change unsuccessful: null response");
return -1;
} finally {
if (response != null) {
response.close();
}
webServiceClient.destroy();
}
return -1;
}
@VisibleForTesting

View File

@ -58,11 +58,18 @@ public final class YarnWebServiceUtils {
WebResource webResource = webServiceClient.resource(webAppAddress);
ClientResponse response = webResource.path("ws").path("v1")
.path("cluster").path("nodes")
.path(nodeId).accept(MediaType.APPLICATION_JSON)
.get(ClientResponse.class);
return response.getEntity(JSONObject.class);
ClientResponse response = null;
try {
response = webResource.path("ws").path("v1").path("cluster")
.path("nodes").path(nodeId).accept(MediaType.APPLICATION_JSON)
.get(ClientResponse.class);
return response.getEntity(JSONObject.class);
} finally {
if (response != null) {
response.close();
}
webServiceClient.destroy();
}
}
@SuppressWarnings("rawtypes")