You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ni...@apache.org on 2024/10/23 10:03:41 UTC

(hbase) branch master updated: HBASE-28927 Fix spotbugs issues introduced by refactoring to hbase-diagnostics with HBASE-28432 (#6384)

This is an automated email from the ASF dual-hosted git repository.

nihaljain pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new f4aafaf4d50 HBASE-28927 Fix spotbugs issues introduced by refactoring to hbase-diagnostics with HBASE-28432 (#6384)
f4aafaf4d50 is described below

commit f4aafaf4d5092f761465a9f4d44234dc4919331d
Author: Nihal Jain <ni...@apache.org>
AuthorDate: Wed Oct 23 15:33:34 2024 +0530

    HBASE-28927 Fix spotbugs issues introduced by refactoring to hbase-diagnostics with HBASE-28432 (#6384)
    
    Signed-off-by: Istvan Toth <st...@apache.org>
---
 .../apache/hadoop/hbase/PerformanceEvaluation.java | 23 +++++++++++++++++++---
 .../org/apache/hadoop/hbase/util/LoadTestTool.java |  2 +-
 .../hadoop/hbase/util/MultiThreadedAction.java     | 16 +++++++--------
 .../hadoop/hbase/util/MultiThreadedReader.java     |  8 ++++----
 .../hbase/util/MultiThreadedReaderWithACL.java     |  2 --
 .../hadoop/hbase/util/MultiThreadedUpdater.java    |  2 +-
 .../hbase/util/MultiThreadedUpdaterWithACL.java    |  2 --
 .../hadoop/hbase/wal/WALPerformanceEvaluation.java |  6 +++---
 .../hadoop/hbase/util/LoadTestKVGenerator.java     |  1 +
 9 files changed, 38 insertions(+), 24 deletions(-)

diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/PerformanceEvaluation.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/PerformanceEvaluation.java
index 9f97002f4b4..1b397546aca 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/PerformanceEvaluation.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/PerformanceEvaluation.java
@@ -249,6 +249,22 @@ public class PerformanceEvaluation extends Configured implements Tool {
     public int compareTo(RunResult o) {
       return Long.compare(this.duration, o.duration);
     }
+
+    @Override
+    public boolean equals(Object obj) {
+      if (this == obj) {
+        return true;
+      }
+      if (obj == null || getClass() != obj.getClass()) {
+        return false;
+      }
+      return this.compareTo((RunResult) obj) == 0;
+    }
+
+    @Override
+    public int hashCode() {
+      return Long.hashCode(duration);
+    }
   }
 
   /**
@@ -3144,14 +3160,15 @@ public class PerformanceEvaluation extends Configured implements Tool {
         && (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))
         && opts.size != DEFAULT_OPTS.size && opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows
     ) {
-      opts.totalRows = (int) opts.size * rowsPerGB;
+      opts.totalRows = (int) (opts.size * rowsPerGB);
     } else if (opts.size != DEFAULT_OPTS.size) {
       // total size in GB specified
-      opts.totalRows = (int) opts.size * rowsPerGB;
+      opts.totalRows = (int) (opts.size * rowsPerGB);
       opts.perClientRunRows = opts.totalRows / opts.numClientThreads;
     } else {
       opts.totalRows = opts.perClientRunRows * opts.numClientThreads;
-      opts.size = opts.totalRows / rowsPerGB;
+      // Cast to float to ensure floating-point division
+      opts.size = (float) opts.totalRows / rowsPerGB;
     }
     return opts;
   }
diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java
index 1e0ece6309f..43b2d43118d 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/LoadTestTool.java
@@ -164,7 +164,7 @@ public class LoadTestTool extends AbstractHBaseTool {
   public static final String OPT_NUM_REGIONS_PER_SERVER = "num_regions_per_server";
   protected static final String OPT_NUM_REGIONS_PER_SERVER_USAGE =
     "Desired number of regions per region server. Defaults to 5.";
-  public static int DEFAULT_NUM_REGIONS_PER_SERVER = 5;
+  public static final int DEFAULT_NUM_REGIONS_PER_SERVER = 5;
 
   public static final String OPT_REGION_REPLICATION = "region_replication";
   protected static final String OPT_REGION_REPLICATION_USAGE =
diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedAction.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedAction.java
index 3914884fec9..6eb27c5be8f 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedAction.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedAction.java
@@ -203,16 +203,16 @@ public abstract class MultiThreadedAction {
           long numKeysDelta = numKeys - priorNumKeys;
           long totalOpTimeDelta = totalOpTime - priorCumulativeOpTime;
 
-          double averageKeysPerSecond = (time > 0) ? (numKeys * 1000 / time) : 0;
+          double averageKeysPerSecond = (time > 0) ? (numKeys * 1000.0 / time) : 0;
 
           LOG.info(threadsLeft + "Keys=" + numKeys + ", cols="
             + StringUtils.humanReadableInt(numCols.get()) + ", time=" + formatTime(time)
             + ((numKeys > 0 && time > 0)
-              ? (" Overall: [" + "keys/s= " + numKeys * 1000 / time + ", latency="
+              ? (" Overall: [" + "keys/s= " + (numKeys * 1000.0 / time) + ", latency="
                 + String.format("%.2f", (double) totalOpTime / (double) numKeys) + " ms]")
               : "")
             + ((numKeysDelta > 0)
-              ? (" Current: [" + "keys/s=" + numKeysDelta * 1000 / REPORTING_INTERVAL_MS
+              ? (" Current: [" + "keys/s=" + (numKeysDelta * 1000.0 / REPORTING_INTERVAL_MS)
                 + ", latency="
                 + String.format("%.2f", (double) totalOpTimeDelta / (double) numKeysDelta) + " ms]")
               : "")
@@ -407,15 +407,15 @@ public abstract class MultiThreadedAction {
           verifyCfAndColumnIntegrity
             && !dataGenerator.verify(result.getRow(), cf, columnValues.keySet())
         ) {
-          String colsStr = "";
+          StringBuilder colsStr = new StringBuilder();
           for (byte[] col : columnValues.keySet()) {
             if (colsStr.length() > 0) {
-              colsStr += ", ";
+              colsStr.append(", ");
             }
-            colsStr += "[" + Bytes.toString(col) + "]";
+            colsStr.append("[").append(Bytes.toString(col)).append("]");
           }
-          LOG.error("Error checking data for key [" + rowKeyStr + "], bad columns for family ["
-            + cfStr + "]: " + colsStr);
+          LOG.error("Error checking data for key [{}], bad columns for family [{}]: {}", rowKeyStr,
+            cfStr, colsStr.toString());
           printLocations(result);
           return false;
         }
diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java
index e8e3bea6674..6f4f47b59a6 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java
@@ -307,15 +307,15 @@ public class MultiThreadedReader extends MultiThreadedAction {
 
     protected Get createGet(long keyToRead) throws IOException {
       Get get = new Get(dataGenerator.getDeterministicUniqueKey(keyToRead));
-      String cfsString = "";
+      StringBuilder cfsString = new StringBuilder();
       byte[][] columnFamilies = dataGenerator.getColumnFamilies();
       for (byte[] cf : columnFamilies) {
         get.addFamily(cf);
         if (verbose) {
           if (cfsString.length() > 0) {
-            cfsString += ", ";
+            cfsString.append(", ");
           }
-          cfsString += "[" + Bytes.toStringBinary(cf) + "]";
+          cfsString.append("[").append(Bytes.toStringBinary(cf)).append("]");
         }
       }
       get = dataGenerator.beforeGet(keyToRead, get);
@@ -324,7 +324,7 @@ public class MultiThreadedReader extends MultiThreadedAction {
         get.setConsistency(Consistency.TIMELINE);
       }
       if (verbose) {
-        LOG.info("[" + readerId + "] " + "Querying key " + keyToRead + ", cfs " + cfsString);
+        LOG.info("[{}] Querying key {}, cfs {}", readerId, keyToRead, cfsString.toString());
       }
       return get;
     }
diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java
index 9286b58ce6b..67081e9ad3f 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java
@@ -88,8 +88,6 @@ public class MultiThreadedReaderWithACL extends MultiThreadedReader {
     @Override
     public void queryKey(final Get get, final boolean verify, final long keyToRead)
       throws IOException {
-      final String rowKey = Bytes.toString(get.getRow());
-
       // read the data
       final long start = System.nanoTime();
       PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>() {
diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdater.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdater.java
index 99ce506c0c9..b85e581da37 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdater.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdater.java
@@ -76,7 +76,7 @@ public class MultiThreadedUpdater extends MultiThreadedWriterBase {
     this.isBatchUpdate = isBatchUpdate;
   }
 
-  public void linkToWriter(MultiThreadedWriterBase writer) {
+  public synchronized void linkToWriter(MultiThreadedWriterBase writer) {
     this.writer = writer;
     writer.setTrackWroteKeys(true);
   }
diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdaterWithACL.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdaterWithACL.java
index 1ad93a54cdd..25b73adb3c4 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdaterWithACL.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedUpdaterWithACL.java
@@ -75,8 +75,6 @@ public class MultiThreadedUpdaterWithACL extends MultiThreadedUpdater {
   }
 
   public class HBaseUpdaterThreadWithACL extends HBaseUpdaterThread {
-
-    private Table table;
     private MutateAccessAction mutateAction = new MutateAccessAction();
 
     public HBaseUpdaterThreadWithACL(int updaterId) throws IOException {
diff --git a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java
index b296296e9d4..48e972a5f4e 100644
--- a/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java
+++ b/hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java
@@ -168,7 +168,7 @@ public final class WALPerformanceEvaluation extends Configured implements Tool {
             loopSpan.end();
           }
         }
-      } catch (Exception e) {
+      } catch (IOException e) {
         LOG.error(getClass().getSimpleName() + " Thread failed", e);
       } finally {
         threadSpan.end();
@@ -241,7 +241,7 @@ public final class WALPerformanceEvaluation extends Configured implements Tool {
           System.err.println("UNEXPECTED: " + cmd);
           printUsageAndExit();
         }
-      } catch (Exception e) {
+      } catch (NumberFormatException e) {
         printUsageAndExit();
       }
     }
@@ -411,7 +411,7 @@ public final class WALPerformanceEvaluation extends Configured implements Tool {
   }
 
   private void printUsageAndExit() {
-    System.err.printf("Usage: hbase %s [options]\n", getClass().getName());
+    System.err.printf("Usage: hbase %s [options]%n", getClass().getName());
     System.err.println(" where [options] are:");
     System.err.println("  -h|-help         Show this help and exit.");
     System.err.println("  -threads <N>     Number of threads writing on the WAL.");
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/LoadTestKVGenerator.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/LoadTestKVGenerator.java
index 2c786a97b00..47dd8dc2c7e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/LoadTestKVGenerator.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/LoadTestKVGenerator.java
@@ -98,6 +98,7 @@ public class LoadTestKVGenerator {
    * Generates random bytes of the given size for the given row and column qualifier. The random
    * seed is fully determined by these parameters.
    */
+  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "DMI_RANDOM_USED_ONLY_ONCE")
   private static byte[] getValueForRowColumn(int dataSize, byte[]... seedStrings) {
     long seed = dataSize;
     for (byte[] str : seedStrings) {