From cb745619c34b2ab1521da91eb99e75528d198b83 Mon Sep 17 00:00:00 2001 From: Xu Cang Date: Fri, 19 Apr 2019 15:21:21 -0700 Subject: [PATCH] HBASE-22274 Cell size limit check on append considers cell's previous size --- .../org/apache/hadoop/hbase/regionserver/HRegion.java | 8 ++++++++ .../apache/hadoop/hbase/client/TestFromClientSide.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 26ff24e033..06ab286f6d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -8014,6 +8014,14 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi effectiveDurability, now, deltas, results); if (!toApply.isEmpty()) { for (Cell cell : toApply) { + int newCellSize = PrivateCellUtil.estimatedSerializedSizeOf(cell); + if (newCellSize > this.maxCellSize) { + String msg = "Cell with size " + newCellSize + " exceeds limit of " + this.maxCellSize + " bytes"; + if (LOG.isDebugEnabled()) { + LOG.debug(msg); + } + throw new DoNotRetryIOException(msg); + } HStore store = getStore(cell); if (store == null) { checkFamily(CellUtil.cloneFamily(cell)); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java index 5a285ef6ba..8633177ebe 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java @@ -6455,7 +6455,7 @@ public class TestFromClientSide { // expected } try { - t.append(new Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[10 * 1024])); + t.append(new Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[2 * 1024])); fail("Oversize cell failed to trigger exception"); } catch (IOException e) { // expected -- 2.17.2 (Apple Git-113)