From fcbb4da31d499cc36743706462037bfabd3dfb1d Mon Sep 17 00:00:00 2001 From: ChiaPing Tsai Date: Mon, 23 Jan 2017 17:22:28 +0800 Subject: [PATCH] HBASE-17510 DefaultMemStore gets the wrong heap size after rollback --- .../hadoop/hbase/regionserver/DefaultMemStore.java | 4 ++-- .../hadoop/hbase/regionserver/TestStore.java | 24 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java index 8412d6e..a47cafd 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DefaultMemStore.java @@ -347,8 +347,8 @@ public class DefaultMemStore implements MemStore { // If the key is in the memstore, delete it. Update this.size. found = this.cellSet.get(cell); if (found != null && found.getSequenceId() == cell.getSequenceId()) { - removeFromCellSet(cell); - long s = heapSizeChange(cell, true); + removeFromCellSet(found); + long s = heapSizeChange(found, true); this.size.addAndGet(-s); } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStore.java index 414c663..5b7f8e8 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStore.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStore.java @@ -90,6 +90,7 @@ import org.junit.rules.TestName; import org.mockito.Mockito; import com.google.common.collect.Lists; +import java.util.Arrays; /** * Test class for the Store @@ -359,6 +360,29 @@ public class TestStore { } @Test + public void testRollback() throws IOException { + Configuration conf = HBaseConfiguration.create(); + FileSystem fs = FileSystem.get(conf); + // Initialize region + init(name.getMethodName(), conf); + Cell cell = CellUtil.createCell(row, family, qf1); + int len = KeyValueUtil.length(cell); + int offset = 77; + byte[] buf = new byte[offset + len]; + KeyValueUtil.appendToByteArray(cell, buf, offset); + KeyValue newKv = new KeyValue(buf, offset, len); + newKv.setSequenceId(cell.getSequenceId()); + List testCells = Arrays.asList(cell, cell, newKv); + for (Cell c : testCells) { + long sizeBeforeRollback = store.heapSize(); + store.add(cell); + store.rollback(cell); + long sizeAeforeRollback = store.heapSize(); + assertEquals(sizeBeforeRollback, sizeAeforeRollback); + } + } + + @Test public void testLowestModificationTime() throws Exception { Configuration conf = HBaseConfiguration.create(); FileSystem fs = FileSystem.get(conf); -- 2.10.1 (Apple Git-78)