From fec97338931f2617ddb99bf7faad67d0a0ee2ddf Mon Sep 17 00:00:00 2001 From: ramkrishna Date: Thu, 11 Feb 2016 09:09:25 +0530 Subject: [PATCH] HBASE-15204 Try to estimate the cell count for adding into WALEdit (Ram) --- .../hadoop/hbase/regionserver/HRegion.java | 20 +++++++++++++++---- .../hbase/regionserver/wal/WALEdit.java | 11 +++++++++- 2 files changed, 26 insertions(+), 5 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 ac846b63f05..3e6c092b6a9 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 @@ -2951,7 +2951,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi Set deletesCfSet = null; long currentNonceGroup = HConstants.NO_NONCE; long currentNonce = HConstants.NO_NONCE; - WALEdit walEdit = new WALEdit(replay); + WALEdit walEdit = null; boolean locked = false; // reference family maps directly so coprocessors can mutate them if desired Map>[] familyMaps = new Map[batchOp.operations.length]; @@ -2962,6 +2962,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi int noOfPuts = 0; int noOfDeletes = 0; WriteEntry writeEntry = null; + int cellCount = 0; /** Keep track of the locks we hold so we can release them in finally clause */ List acquiredRowLocks = Lists.newArrayListWithCapacity(batchOp.operations.length); try { @@ -2990,7 +2991,11 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi lastIndexExclusive++; numReadyToWrite++; - + if (replay) { + for (List cells : mutation.getFamilyCellMap().values()) { + cellCount += cells.size(); + } + } if (mutation instanceof Put) { // If Column Families stay consistent through out all of the // individual puts then metrics can be reported as a multiput across @@ -3041,8 +3046,15 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi noOfDeletes++; } rewriteCellTags(familyMaps[i], mutation); + WALEdit fromCP = batchOp.walEditsFromCoprocessors[i]; + if (fromCP != null) { + cellCount += fromCP.size(); + } + for (List cells : familyMaps[i].values()) { + cellCount += cells.size(); + } } - + walEdit = new WALEdit(cellCount, replay); lock(this.updatesLock.readLock(), numReadyToWrite); locked = true; @@ -3082,7 +3094,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi if (nonceGroup != currentNonceGroup || nonce != currentNonce) { // Write what we have so far for nonces out to WAL appendCurrentNonces(m, replay, walEdit, now, currentNonceGroup, currentNonce); - walEdit = new WALEdit(replay); + walEdit = new WALEdit(cellCount, replay); currentNonceGroup = nonceGroup; currentNonce = nonce; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java index cea2ee7758e..346a8edeb3b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALEdit.java @@ -99,7 +99,7 @@ public class WALEdit implements Writable, HeapSize { private final int VERSION_2 = -1; private final boolean isReplay; - private ArrayList cells = new ArrayList(1); + private ArrayList cells = null; public static final WALEdit EMPTY_WALEDIT = new WALEdit(); @@ -117,7 +117,16 @@ public class WALEdit implements Writable, HeapSize { } public WALEdit(boolean isReplay) { + this(1, isReplay); + } + + public WALEdit(int cellCount) { + this(cellCount, false); + } + + public WALEdit(int cellCount, boolean isReplay) { this.isReplay = isReplay; + cells = new ArrayList(cellCount); } /**