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 78ce608..3b44228 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 @@ -3023,6 +3023,8 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi // * batchMutate with single mutation - put/delete, separate or from checkAndMutate. // * coprocessor calls (see ex. BulkDeleteEndpoint). // So nonces are not really ever used by HBase. They could be by coprocs, and checkAnd... + //sort to improve lock efficiency + Arrays.sort(mutations); return batchMutate(new MutationBatch(mutations, nonceGroup, nonce)); } @@ -3052,6 +3054,8 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi } return statuses; } + //sort to improve lock efficiency + Arrays.sort(mutations); return batchMutate(new ReplayBatch(mutations, replaySeqId)); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java index 77c2d1c..428a438 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALSplitter.java @@ -2279,7 +2279,7 @@ public class WALSplitter { } /** A struct used by getMutationsFromWALEntry */ - public static class MutationReplay { + public static class MutationReplay implements Comparable { public MutationReplay(MutationType type, Mutation mutation, long nonceGroup, long nonce) { this.type = type; this.mutation = mutation; @@ -2295,6 +2295,12 @@ public class WALSplitter { public final Mutation mutation; public final long nonceGroup; public final long nonce; + + @Override + public int compareTo(final MutationReplay d) { + return this.mutation.compareTo(d.mutation); + } + } /**