From 8aec1a5ddd4aa0ac1321fad05e3503dda3c5a14b Mon Sep 17 00:00:00 2001 From: Botong Huang Date: Wed, 23 May 2018 12:45:32 -0700 Subject: [PATCH] YARN-7402. [GPG] Fix potential connection leak in GPGUtils. Contributed by Giovanni Matteo Fumarola. --- .../globalpolicygenerator/GPGUtils.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-globalpolicygenerator/src/main/java/org/apache/hadoop/yarn/server/globalpolicygenerator/GPGUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-globalpolicygenerator/src/main/java/org/apache/hadoop/yarn/server/globalpolicygenerator/GPGUtils.java index 429bec46e82..31cee1ca649 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-globalpolicygenerator/src/main/java/org/apache/hadoop/yarn/server/globalpolicygenerator/GPGUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-globalpolicygenerator/src/main/java/org/apache/hadoop/yarn/server/globalpolicygenerator/GPGUtils.java @@ -18,21 +18,22 @@ package org.apache.hadoop.yarn.server.globalpolicygenerator; +import static javax.servlet.http.HttpServletResponse.SC_OK; + import java.util.HashMap; import java.util.Map; import java.util.Set; -import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterIdInfo; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; -import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId; -import org.apache.hadoop.yarn.server.federation.store.records.SubClusterIdInfo; /** * GPGUtils contains utility functions for the GPG. @@ -53,15 +54,23 @@ public static T invokeRMWebService(Configuration conf, String webAddr, T obj = null; WebResource webResource = client.resource(webAddr); - ClientResponse response = webResource.path("ws/v1/cluster").path(path) - .accept(MediaType.APPLICATION_XML).get(ClientResponse.class); - if (response.getStatus() == HttpServletResponse.SC_OK) { - obj = response.getEntity(returnType); - } else { - throw new YarnRuntimeException("Bad response from remote web service: " - + response.getStatus()); + ClientResponse response = null; + try { + response = webResource.path("ws/v1/cluster").path(path) + .accept(MediaType.APPLICATION_XML).get(ClientResponse.class); + if (response.getStatus() == SC_OK) { + obj = response.getEntity(returnType); + } else { + throw new YarnRuntimeException( + "Bad response from remote web service: " + response.getStatus()); + } + return obj; + } finally { + if (response != null) { + response.close(); + } + client.destroy(); } - return obj; } /**