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 aaf7abfde006..99ac9da819a4 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 @@ -966,7 +966,7 @@ public CellScanner cellScanner() { @Override public Cell current() { - if (cells == null + if (isEmpty() || cellScannerIndex == INITIAL_CELLSCANNER_INDEX || cellScannerIndex >= cells.length) return null; @@ -975,7 +975,9 @@ public Cell current() { @Override public boolean advance() { - if (cells == null) return false; + if (isEmpty()) { + return false; + } cellScannerIndex++; if (cellScannerIndex < this.cells.length) { return true; diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java index 418b0fb5e16a..aaac70b71ab5 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java @@ -115,14 +115,12 @@ public void testCurrentOnEmptyCell() throws IOException { assertNull(r.current()); } - public void testAdvanceTwiceOnEmptyCell() throws IOException { + public void testAdvanceMultipleOnEmptyCell() throws IOException { Result r = Result.create(new Cell[0]); - assertFalse(r.advance()); - try { - r.advance(); - fail("NoSuchElementException should have been thrown!"); - } catch (NoSuchElementException ex) { - LOG.debug("As expected: " + ex.getMessage()); + // After HBASE-26688, advance of result with empty cell list will always return false. + // Here 10 is an arbitrary number to test the logic. + for (int i = 0; i < 10; i++) { + assertFalse(r.advance()); } }