HADOOP-14841 Kms client should disconnect if unable to get output stream from connection. Contributed by Rushabh S Shah

(cherry picked from commit 4cdbdce752)
This commit is contained in:
Rushabh Shah 2018-05-04 15:36:13 -05:00
parent e933ed0ee3
commit 864640c1e3
1 changed files with 11 additions and 2 deletions

View File

@ -447,12 +447,21 @@ public class KMSClientProvider extends KeyProvider implements CryptoExtension,
int expectedResponse, Class<T> klass, int authRetryCount) int expectedResponse, Class<T> klass, int authRetryCount)
throws IOException { throws IOException {
T ret = null; T ret = null;
OutputStream os = null;
try { try {
if (jsonOutput != null) { if (jsonOutput != null) {
writeJson(jsonOutput, conn.getOutputStream()); os = conn.getOutputStream();
writeJson(jsonOutput, os);
} }
} catch (IOException ex) { } catch (IOException ex) {
// The payload is not serialized if getOutputStream fails.
// Calling getInputStream will issue the put/post request with no payload
// which causes HTTP 500 server error.
if (os == null) {
conn.disconnect();
} else {
IOUtils.closeStream(conn.getInputStream()); IOUtils.closeStream(conn.getInputStream());
}
throw ex; throw ex;
} }
if ((conn.getResponseCode() == HttpURLConnection.HTTP_FORBIDDEN if ((conn.getResponseCode() == HttpURLConnection.HTTP_FORBIDDEN