From 6a1fba9ce862895a4ca0836a855b9bce6189e5df Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Thu, 20 Jan 2022 11:46:33 +0800 Subject: [PATCH 1/2] HBASE-26688 Result#advance, current are not thread safe. But the pre-created EMPTY_RESULT like objects can be shared by multi client threads. --- .../src/main/java/org/apache/hadoop/hbase/client/Result.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java index bff50338ba5f..7c4d9dd7528b 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java @@ -913,7 +913,7 @@ public CellScanner cellScanner() { @Override public Cell current() { - if (cells == null + if (isEmpty() || cellScannerIndex == INITIAL_CELLSCANNER_INDEX || cellScannerIndex >= cells.length) return null; @@ -922,7 +922,7 @@ public Cell current() { @Override public boolean advance() { - if (cells == null) return false; + if (isEmpty()) return false; cellScannerIndex++; if (cellScannerIndex < this.cells.length) { return true; From 917bd91b30b878d589535446f1b1e09f0402fa29 Mon Sep 17 00:00:00 2001 From: Yutong Sean Date: Thu, 20 Jan 2022 16:55:40 +0800 Subject: [PATCH 2/2] Checkstyle fix --- .../main/java/org/apache/hadoop/hbase/client/Result.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java index 7c4d9dd7528b..b6c83f770b60 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java @@ -915,14 +915,17 @@ public CellScanner cellScanner() { public Cell current() { if (isEmpty() || cellScannerIndex == INITIAL_CELLSCANNER_INDEX - || cellScannerIndex >= cells.length) + || cellScannerIndex >= cells.length) { return null; + } return this.cells[cellScannerIndex]; } @Override public boolean advance() { - if (isEmpty()) return false; + if (isEmpty()) { + return false; + } cellScannerIndex++; if (cellScannerIndex < this.cells.length) { return true;