[GitHub] [hadoop] pjfanning commented on a diff in pull request #6057: HADOOP-18496: remove use of okhttp in runtime code
pjfanning commented on code in PR #6057: URL: https://github.com/apache/hadoop/pull/6057#discussion_r1324791220 ## hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/oauth2/CredentialBasedAccessTokenProvider.java: ## @@ -97,38 +104,37 @@ public synchronized String getAccessToken() throws IOException { } void refresh() throws IOException { -OkHttpClient client = new OkHttpClient.Builder() -.connectTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS) -.readTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS) -.build(); - -String bodyString = Utils.postBody(CLIENT_SECRET, getCredential(), -GRANT_TYPE, CLIENT_CREDENTIALS, -CLIENT_ID, clientId); - -RequestBody body = RequestBody.create(bodyString, URLENCODED); - -Request request = new Request.Builder() -.url(refreshURL) -.post(body) +final List pairs = new ArrayList<>(); +pairs.add(new BasicNameValuePair(CLIENT_SECRET, getCredential())); +pairs.add(new BasicNameValuePair(GRANT_TYPE, CLIENT_CREDENTIALS)); +pairs.add(new BasicNameValuePair(CLIENT_ID, clientId)); +final RequestConfig config = RequestConfig.custom() +.setConnectTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) + .setConnectionRequestTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) +.setSocketTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) .build(); -try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) { -throw new IOException("Unexpected code " + response); - } - - if (response.code() != HttpStatus.SC_OK) { -throw new IllegalArgumentException("Received invalid http response: " -+ response.code() + ", text = " + response.toString()); +try (CloseableHttpClient client = + HttpClientBuilder.create().setDefaultRequestConfig(config).build()) { + final HttpPost httpPost = new HttpPost(refreshURL); + httpPost.setEntity(new UrlEncodedFormEntity(pairs, StandardCharsets.UTF_8)); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, URLENCODED); + try (CloseableHttpResponse response = client.execute(httpPost)) { +final int statusCode = response.getStatusLine().getStatusCode(); +if (statusCode != HttpStatus.SC_OK) { + throw new IllegalArgumentException( + "Received invalid http response: " + statusCode + ", text = " + + EntityUtils.toString(response.getEntity())); +} +Map responseBody = JsonSerialization.mapReader().readValue( Review Comment: The pre-existing code did not check the content-type of the return. It is not uncommon for an API to return JSON but not to have `application/json` Content-Type. I can make the change but I'm worried that the API we call may not set the expected content-type on the response. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org - To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org
[GitHub] [hadoop] pjfanning commented on a diff in pull request #6057: HADOOP-18496: remove use of okhttp in runtime code
pjfanning commented on code in PR #6057: URL: https://github.com/apache/hadoop/pull/6057#discussion_r1324786164 ## hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/oauth2/CredentialBasedAccessTokenProvider.java: ## @@ -97,38 +104,37 @@ public synchronized String getAccessToken() throws IOException { } void refresh() throws IOException { -OkHttpClient client = new OkHttpClient.Builder() -.connectTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS) -.readTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS) -.build(); - -String bodyString = Utils.postBody(CLIENT_SECRET, getCredential(), -GRANT_TYPE, CLIENT_CREDENTIALS, -CLIENT_ID, clientId); - -RequestBody body = RequestBody.create(bodyString, URLENCODED); - -Request request = new Request.Builder() -.url(refreshURL) -.post(body) +final List pairs = new ArrayList<>(); +pairs.add(new BasicNameValuePair(CLIENT_SECRET, getCredential())); +pairs.add(new BasicNameValuePair(GRANT_TYPE, CLIENT_CREDENTIALS)); +pairs.add(new BasicNameValuePair(CLIENT_ID, clientId)); +final RequestConfig config = RequestConfig.custom() +.setConnectTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) + .setConnectionRequestTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) +.setSocketTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) .build(); -try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) { -throw new IOException("Unexpected code " + response); - } - - if (response.code() != HttpStatus.SC_OK) { -throw new IllegalArgumentException("Received invalid http response: " -+ response.code() + ", text = " + response.toString()); +try (CloseableHttpClient client = + HttpClientBuilder.create().setDefaultRequestConfig(config).build()) { + final HttpPost httpPost = new HttpPost(refreshURL); + httpPost.setEntity(new UrlEncodedFormEntity(pairs, StandardCharsets.UTF_8)); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, URLENCODED); + try (CloseableHttpResponse response = client.execute(httpPost)) { +final int statusCode = response.getStatusLine().getStatusCode(); +if (statusCode != HttpStatus.SC_OK) { + throw new IllegalArgumentException( + "Received invalid http response: " + statusCode + ", text = " + + EntityUtils.toString(response.getEntity())); +} +Map responseBody = JsonSerialization.mapReader().readValue( +EntityUtils.toString(response.getEntity())); + +String newExpiresIn = responseBody.get(EXPIRES_IN).toString(); +timer.setExpiresIn(newExpiresIn); + +accessToken = responseBody.get(ACCESS_TOKEN).toString(); } - - Map responseBody = JsonSerialization.mapReader().readValue( - response.body().string()); - - String newExpiresIn = responseBody.get(EXPIRES_IN).toString(); - timer.setExpiresIn(newExpiresIn); - - accessToken = responseBody.get(ACCESS_TOKEN).toString(); +} catch (RuntimeException e) { + throw new IOException("Unable to obtain access token from credential", e); Review Comment: I'm duplicating this because Spotbugs has its weird rules. The pre-existing catch already does this - do I change all the catches? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org - To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org
[GitHub] [hadoop] pjfanning commented on a diff in pull request #6057: HADOOP-18496: remove use of okhttp in runtime code
pjfanning commented on code in PR #6057: URL: https://github.com/apache/hadoop/pull/6057#discussion_r1324784674 ## hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/oauth2/CredentialBasedAccessTokenProvider.java: ## @@ -97,38 +104,37 @@ public synchronized String getAccessToken() throws IOException { } void refresh() throws IOException { -OkHttpClient client = new OkHttpClient.Builder() -.connectTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS) -.readTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS) -.build(); - -String bodyString = Utils.postBody(CLIENT_SECRET, getCredential(), -GRANT_TYPE, CLIENT_CREDENTIALS, -CLIENT_ID, clientId); - -RequestBody body = RequestBody.create(bodyString, URLENCODED); - -Request request = new Request.Builder() -.url(refreshURL) -.post(body) +final List pairs = new ArrayList<>(); +pairs.add(new BasicNameValuePair(CLIENT_SECRET, getCredential())); +pairs.add(new BasicNameValuePair(GRANT_TYPE, CLIENT_CREDENTIALS)); +pairs.add(new BasicNameValuePair(CLIENT_ID, clientId)); +final RequestConfig config = RequestConfig.custom() +.setConnectTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) + .setConnectionRequestTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) +.setSocketTimeout(URLConnectionFactory.DEFAULT_SOCKET_TIMEOUT) .build(); -try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) { -throw new IOException("Unexpected code " + response); - } - - if (response.code() != HttpStatus.SC_OK) { -throw new IllegalArgumentException("Received invalid http response: " -+ response.code() + ", text = " + response.toString()); +try (CloseableHttpClient client = + HttpClientBuilder.create().setDefaultRequestConfig(config).build()) { + final HttpPost httpPost = new HttpPost(refreshURL); + httpPost.setEntity(new UrlEncodedFormEntity(pairs, StandardCharsets.UTF_8)); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, URLENCODED); + try (CloseableHttpResponse response = client.execute(httpPost)) { +final int statusCode = response.getStatusLine().getStatusCode(); +if (statusCode != HttpStatus.SC_OK) { + throw new IllegalArgumentException( + "Received invalid http response: " + statusCode + ", text = " + + EntityUtils.toString(response.getEntity())); +} +Map responseBody = JsonSerialization.mapReader().readValue( +EntityUtils.toString(response.getEntity())); + +String newExpiresIn = responseBody.get(EXPIRES_IN).toString(); +timer.setExpiresIn(newExpiresIn); + +accessToken = responseBody.get(ACCESS_TOKEN).toString(); } - - Map responseBody = JsonSerialization.mapReader().readValue( - response.body().string()); - - String newExpiresIn = responseBody.get(EXPIRES_IN).toString(); - timer.setExpiresIn(newExpiresIn); - - accessToken = responseBody.get(ACCESS_TOKEN).toString(); +} catch (RuntimeException e) { + throw new IOException("Unable to obtain access token from credential", e); } catch (Exception e) { Review Comment: Spotbugs is what is making me duplicate the catch. It doesn't like catches of Exception and this is one workaround. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org - To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org