Index: src/main/java/org/apache/hadoop/hbase/client/Mutation.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/client/Mutation.java (revision 1445399) +++ src/main/java/org/apache/hadoop/hbase/client/Mutation.java (working copy) @@ -34,6 +34,7 @@ public abstract class Mutation extends OperationWithAttributes implements Row { // Attribute used in Mutations to indicate the originating cluster. private static final String CLUSTER_ID_ATTR = "_c.id_"; + private static final String DEFER_FLUSH_ATTR = "_d.f_"; protected byte [] row = null; protected long ts = HConstants.LATEST_TIMESTAMP; @@ -126,6 +127,20 @@ } /** + * Indicate for this mutation we can defer the log flush. + * @param defer + */ + public void setDeferWALFlush(boolean defer) { + setAttribute(DEFER_FLUSH_ATTR, Bytes.toBytes(defer)); + } + + /** Get deferred flush setting */ + public boolean getDeferWALFlush() { + byte[] attr = getAttribute(DEFER_FLUSH_ATTR); + return attr == null ? false : Bytes.toBoolean(attr); + } + + /** * Method for retrieving the put's familyMap * @return familyMap */ Index: src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (revision 1445399) +++ src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (working copy) @@ -2279,6 +2279,7 @@ // ------------------------------------ // STEP 4. Build WAL edit // ---------------------------------- + boolean shouldSyncWal = false; for (int i = firstIndex; i < lastIndexExclusive; i++) { // Skip puts that were determined to be invalid during preprocessing if (batchOp.retCodeDetails[i].getOperationStatusCode() @@ -2293,6 +2294,8 @@ recordPutWithoutWal(m.getFamilyMap()); } continue; + } else if (!shouldSyncWal) { + shouldSyncWal |= !m.getDeferWALFlush(); } // Add WAL edits by CP WALEdit fromCP = batchOp.walEditsFromCoprocessors[i]; @@ -2327,7 +2330,7 @@ // ------------------------- // STEP 7. Sync wal. // ------------------------- - if (walEdit.size() > 0) { + if (walEdit.size() > 0 && shouldSyncWal) { syncOrDefer(txid); } walSyncSuccessful = true;