From 40b58d14f21b5364b401d1b636f0bafe01ac3cfa Mon Sep 17 00:00:00 2001 From: Xu Cang Date: Tue, 23 Apr 2019 11:39:22 -0700 Subject: [PATCH] HBASE-22274 Cell size limit check on append considers cell's previoius size --- .../org/apache/hadoop/hbase/regionserver/HRegion.java | 11 ++++++++++- .../hadoop/hbase/client/TestFromClientSide.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) 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 b9218b6436..a4030d57dd 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 @@ -7835,7 +7835,16 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi tags = carryForwardTTLTag(tags, mutate); newCell = getNewCell(row, ts, cell, oldCell, Tag.fromList(tags)); - + int newCellSize = CellUtil.estimatedSerializedSizeOf(newCell); + LOG.info("newCellSize is " + newCellSize); + 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); + } idx++; } else { // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP 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 b63b27bd19..254d8f2ddd 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 @@ -6539,7 +6539,7 @@ public class TestFromClientSide { // expected } try { - t.append(new Append(ROW).add(FAMILY, QUALIFIER, new byte[10 * 1024])); + t.append(new Append(ROW).add(FAMILY, QUALIFIER, new byte[2 * 1024])); fail("Oversize cell failed to trigger exception"); } catch (IOException e) { // expected -- 2.17.2 (Apple Git-113)