diff --git a/VENDOR.hbase/hbase-trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java b/VENDOR.hbase/hbase-trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java index ea82d13..d30a237 100644 --- a/VENDOR.hbase/hbase-trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java +++ b/VENDOR.hbase/hbase-trunk/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java @@ -549,7 +549,9 @@ public class MemStore implements HeapSize { if (kv.getType() == KeyValue.Type.Put.getCode()) { // false means there was a change, so give us the size. - addedSize -= heapSizeChange(kv, true); + long sz = heapSizeChange(kv, true); + addedSize -= sz; + this.size.addAndGet(-sz); it.remove(); } @@ -713,6 +715,7 @@ public class MemStore implements HeapSize { return ret; } diff --git a/VENDOR.hbase/hbase-trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java b/VENDOR.hbase/hbase-trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java index 44b5f1f..693156f 100644 --- a/VENDOR.hbase/hbase-trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java +++ b/VENDOR.hbase/hbase-trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java @@ -83,6 +82,19 @@ public class TestMemStore extends TestCase { found.getValue())); } + @Test + public void testUpdateColumnValueSizeChange() { + byte[] bytes = Bytes.toBytes(getName()); + KeyValue kv = new KeyValue(bytes, bytes, bytes, 0, Type.Put, + Bytes.toBytes((long) 0)); + long size = this.memstore.size.get(); + size += this.memstore.add(kv); + assertEquals("memstore.size()", size, memstore.size.get()); + + size += this.memstore.updateColumnValue(bytes, bytes, bytes, 1, 1, 1); + assertEquals("memstore.size()", size, memstore.size.get()); + } + /** * Test memstore snapshot happening while scanning. * @throws IOException -- 1.8.1