From 6a2abe190aaadf55da8412e5159dc46f70e910d2 Mon Sep 17 00:00:00 2001 From: Lars Francke Date: Thu, 14 May 2015 02:38:31 +0200 Subject: [PATCH] [HBASE-13634] Avoid unsafe reference equality checks to EMPTY byte[] --- .../java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java | 5 +++-- .../java/org/apache/hadoop/hbase/util/RegionSplitCalculator.java | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java index 032b4ce..9ada3d4 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java @@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.regionserver; import java.io.IOException; +import java.util.Arrays; import java.util.NavigableSet; import org.apache.hadoop.hbase.KeyValue.Type; @@ -475,7 +476,7 @@ public class ScanQueryMatcher { // dropDeletesFromRow is leq current kv, we start dropping deletes and reset // dropDeletesFromRow; thus the 2nd "if" starts to apply. if ((dropDeletesFromRow != null) - && ((dropDeletesFromRow == HConstants.EMPTY_START_ROW) + && (Arrays.equals(dropDeletesFromRow, HConstants.EMPTY_START_ROW) || (Bytes.compareTo(row, offset, length, dropDeletesFromRow, 0, dropDeletesFromRow.length) >= 0))) { retainDeletesInOutput = false; @@ -485,7 +486,7 @@ public class ScanQueryMatcher { // drop-deletes range. When dropDeletesToRow is leq current kv, we stop dropping deletes, // and reset dropDeletesToRow so that we don't do any more compares. if ((dropDeletesFromRow == null) - && (dropDeletesToRow != null) && (dropDeletesToRow != HConstants.EMPTY_END_ROW) + && (dropDeletesToRow != null) && !Arrays.equals(dropDeletesToRow, HConstants.EMPTY_END_ROW) && (Bytes.compareTo(row, offset, length, dropDeletesToRow, 0, dropDeletesToRow.length) >= 0)) { retainDeletesInOutput = true; diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/util/RegionSplitCalculator.java hbase-server/src/main/java/org/apache/hadoop/hbase/util/RegionSplitCalculator.java index b904b43..eeef1ae 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/util/RegionSplitCalculator.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/util/RegionSplitCalculator.java @@ -115,6 +115,7 @@ public class RegionSplitCalculator { byte[] start = range.getStartKey(); byte[] end = specialEndKey(range); + // No need to use Arrays.equals because ENDKEY is null if (end != ENDKEY && Bytes.compareTo(start, end) > 0) { // don't allow backwards edges LOG.debug("attempted to add backwards edge: " + Bytes.toString(start) -- 2.3.1