Index: src/java/org/apache/hadoop/hbase/client/HTable.java =================================================================== --- src/java/org/apache/hadoop/hbase/client/HTable.java (revision 808310) +++ src/java/org/apache/hadoop/hbase/client/HTable.java (working copy) @@ -578,11 +578,15 @@ * @throws IOException */ public void flushCommits() throws IOException { + int last = 0; try { - connection.processBatchOfRows(writeBuffer, tableName); + last = connection.processBatchOfRows(writeBuffer, tableName); } finally { + writeBuffer.subList(0, last).clear(); currentWriteBufferSize = 0; - writeBuffer.clear(); + for (int i = 0; i < writeBuffer.size(); i++) { + currentWriteBufferSize += writeBuffer.get(i).heapSize(); + } } } Index: src/java/org/apache/hadoop/hbase/client/HConnectionManager.java =================================================================== --- src/java/org/apache/hadoop/hbase/client/HConnectionManager.java (revision 808310) +++ src/java/org/apache/hadoop/hbase/client/HConnectionManager.java (working copy) @@ -998,10 +998,10 @@ return location; } - public void processBatchOfRows(ArrayList list, byte[] tableName) + public int processBatchOfRows(ArrayList list, byte[] tableName) throws IOException { if (list.isEmpty()) { - return; + return 0; } boolean retryOnlyOne = false; if (list.size() > 1) { @@ -1015,6 +1015,7 @@ byte [] region = currentRegion; boolean isLastRow = false; Put [] putarray = new Put[0]; + int last = 0; for (int i = 0, tries = 0; i < list.size() && tries < this.numRetries; i++) { Put put = list.get(i); currentPuts.add(put); @@ -1071,8 +1072,10 @@ } currentRegion = region; currentPuts.clear(); + last = i; } } + return last; } void close(boolean stopProxy) { Index: src/java/org/apache/hadoop/hbase/client/HConnection.java =================================================================== --- src/java/org/apache/hadoop/hbase/client/HConnection.java (revision 808310) +++ src/java/org/apache/hadoop/hbase/client/HConnection.java (working copy) @@ -189,6 +189,6 @@ * @param tableName The name of the table * @throws IOException */ - public void processBatchOfRows(ArrayList list, byte[] tableName) + public int processBatchOfRows(ArrayList list, byte[] tableName) throws IOException; } \ No newline at end of file