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);
+    }
   }
 
   /**