You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2022/11/10 05:02:24 UTC
[hbase] 01/02: HBASE-27473 Fix spotbugs warnings in hbase-rest Client.getResponseBody (#4867)
This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git
commit aa8ca7e1b9496adf4ce6c8f8ef510cca14b3160f
Author: Duo Zhang <zh...@apache.org>
AuthorDate: Thu Nov 10 12:05:52 2022 +0800
HBASE-27473 Fix spotbugs warnings in hbase-rest Client.getResponseBody (#4867)
Signed-off-by: Xin Sun <dd...@gmail.com>
(cherry picked from commit 2d87994f685849219dfde87a111f9f79b6278c17)
---
.../apache/hadoop/hbase/rest/client/Client.java | 45 ++++++++++++----------
1 file changed, 24 insertions(+), 21 deletions(-)
diff --git a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/Client.java b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/Client.java
index 97586b96825..1475557b633 100644
--- a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/Client.java
+++ b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/Client.java
@@ -19,7 +19,6 @@ package org.apache.hadoop.hbase.rest.client;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -64,6 +63,9 @@ import org.apache.yetus.audience.InterfaceAudience;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.hbase.thirdparty.com.google.common.io.ByteStreams;
+import org.apache.hbase.thirdparty.com.google.common.io.Closeables;
+
/**
* A wrapper around HttpClient which provides some useful function and semantics for interacting
* with the REST gateway.
@@ -491,29 +493,30 @@ public class Client {
* @return The response body, null if body is empty
* @throws IOException If an I/O (transport) problem occurs while obtaining the response body.
*/
- @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "NP_LOAD_OF_KNOWN_NULL_VALUE",
- justification = "null is possible return value")
public static byte[] getResponseBody(HttpResponse resp) throws IOException {
- if (resp.getEntity() == null) return null;
- try (InputStream instream = resp.getEntity().getContent()) {
- if (instream != null) {
- long contentLength = resp.getEntity().getContentLength();
- if (contentLength > Integer.MAX_VALUE) {
- // guard integer cast from overflow
- throw new IOException("Content too large to be buffered: " + contentLength + " bytes");
- }
- ByteArrayOutputStream outstream =
- new ByteArrayOutputStream(contentLength > 0 ? (int) contentLength : 4 * 1024);
- byte[] buffer = new byte[4096];
- int len;
- while ((len = instream.read(buffer)) > 0) {
- outstream.write(buffer, 0, len);
- }
- outstream.close();
- return outstream.toByteArray();
- }
+ if (resp.getEntity() == null) {
+ return null;
+ }
+ InputStream instream = resp.getEntity().getContent();
+ if (instream == null) {
return null;
}
+ try {
+ long contentLength = resp.getEntity().getContentLength();
+ if (contentLength > Integer.MAX_VALUE) {
+ // guard integer cast from overflow
+ throw new IOException("Content too large to be buffered: " + contentLength + " bytes");
+ }
+ if (contentLength > 0) {
+ byte[] content = new byte[(int) contentLength];
+ ByteStreams.readFully(instream, content);
+ return content;
+ } else {
+ return ByteStreams.toByteArray(instream);
+ }
+ } finally {
+ Closeables.closeQuietly(instream);
+ }
}
/**