Index: src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (revision 1511018) +++ src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (working copy) @@ -2233,8 +2233,6 @@ boolean deletesCfSetConsistent = true; long startTimeMs = EnvironmentEdgeManager.currentTimeMillis(); - WALEdit walEdit = new WALEdit(); - MultiVersionConsistencyControl.WriteEntry w = null; long txid = 0; boolean walSyncSuccessful = false; @@ -2414,6 +2412,9 @@ // ---------------------------------- Durability durability = Durability.USE_DEFAULT; + // group WALEdits by cluster id + Map walEdits = new HashMap(); + for (int i = firstIndex; i < lastIndexExclusive; i++) { // Skip puts that were determined to be invalid during preprocessing if (batchOp.retCodeDetails[i].getOperationStatusCode() @@ -2434,6 +2435,12 @@ continue; } + WALEdit walEdit = walEdits.get(m.getClusterId()); + if (walEdit == null) { + walEdit = new WALEdit(); + walEdits.put(m.getClusterId(), walEdit); + } + // Add WAL edits by CP WALEdit fromCP = batchOp.walEditsFromCoprocessors[i]; if (fromCP != null) { @@ -2447,9 +2454,12 @@ // ------------------------- // STEP 5. Append the edit to WAL. Do not sync wal. // ------------------------- - Mutation first = batchOp.operations[firstIndex].getFirst(); - txid = this.log.appendNoSync(regionInfo, this.htableDescriptor.getName(), - walEdit, first.getClusterId(), now, this.htableDescriptor); + for (Map.Entry entry : walEdits.entrySet()) { + UUID clusterId = entry.getKey(); + WALEdit walEdit = entry.getValue(); + txid = this.log.appendNoSync(regionInfo, this.htableDescriptor.getName(), + walEdit, clusterId, now, this.htableDescriptor); + } // ------------------------------- // STEP 6. Release row locks, etc. @@ -2468,7 +2478,7 @@ // ------------------------- // STEP 7. Sync wal. // ------------------------- - if (walEdit.size() > 0) { + if (!walEdits.isEmpty()) { syncOrDefer(txid, durability); } walSyncSuccessful = true;