Repository: hbase Updated Branches: refs/heads/branch-1 330b3b281 -> 0ee3ca2a7
HBASE-15714 We are calling checkRow() twice in doMiniBatchMutation() Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/0ee3ca2a Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0ee3ca2a Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0ee3ca2a Branch: refs/heads/branch-1 Commit: 0ee3ca2a781f60cdaa9433a0a4f20bf3a146e4e6 Parents: 330b3b2 Author: chenheng <chenh...@apache.org> Authored: Tue May 3 12:45:18 2016 +1000 Committer: chenheng <chenh...@apache.org> Committed: Tue May 3 22:34:09 2016 +1000 ---------------------------------------------------------------------- .../hadoop/hbase/regionserver/HRegion.java | 22 ++++++++++++-------- .../hbase/regionserver/TestAtomicOperation.java | 4 ++-- 2 files changed, 15 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/0ee3ca2a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java ---------------------------------------------------------------------- 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 a9ca483..e578c8c 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 @@ -3104,7 +3104,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi // get the next one. RowLock rowLock = null; try { - rowLock = getRowLock(mutation.getRow(), true); + rowLock = getRowLockInternal(mutation.getRow(), true); } catch (IOException ioe) { LOG.warn("Failed getting lock in batch put, row=" + Bytes.toStringBinary(mutation.getRow()), ioe); @@ -3455,9 +3455,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi Get get = new Get(row); checkFamily(family); get.addColumn(family, qualifier); - + checkRow(row, "checkAndMutate"); // Lock row - note that doBatchMutate will relock this row if called - RowLock rowLock = getRowLock(get.getRow()); + RowLock rowLock = getRowLockInternal(get.getRow(), false); // wait for all previous transactions to complete (with lock held) mvcc.await(); try { @@ -3565,9 +3565,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi Get get = new Get(row); checkFamily(family); get.addColumn(family, qualifier); - + checkRow(row, "checkAndRowMutate"); // Lock row - note that doBatchMutate will relock this row if called - RowLock rowLock = getRowLock(get.getRow()); + RowLock rowLock = getRowLockInternal(get.getRow(), false); // wait for all previous transactions to complete (with lock held) mvcc.await(); try { @@ -5202,6 +5202,10 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi public RowLock getRowLock(byte[] row, boolean readLock) throws IOException { // Make sure the row is inside of this region before getting the lock for it. checkRow(row, "row lock"); + return getRowLockInternal(row, readLock); + } + + protected RowLock getRowLockInternal(byte[] row, boolean readLock) throws IOException { // create an object to use a a key in the row lock map HashedBytes rowKey = new HashedBytes(row); @@ -7022,7 +7026,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi for (byte[] row : rowsToLock) { // Attempt to lock all involved rows, throw if any lock times out // use a writer lock for mixed reads and writes - acquiredRowLocks.add(getRowLock(row)); + acquiredRowLocks.add(getRowLockInternal(row, false)); } // 3. Region lock lock(this.updatesLock.readLock(), acquiredRowLocks.size() == 0 ? 1 : acquiredRowLocks.size()); @@ -7259,7 +7263,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi WALKey walKey = null; boolean doRollBackMemstore = false; try { - rowLock = getRowLock(row); + rowLock = getRowLockInternal(row, false); assert rowLock != null; try { lock(this.updatesLock.readLock()); @@ -7549,7 +7553,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi // changing it. These latter increments by zero are NOT added to the WAL. List<Cell> allKVs = new ArrayList<Cell>(increment.size()); Durability effectiveDurability = getEffectiveDurability(increment.getDurability()); - RowLock rowLock = getRowLock(increment.getRow()); + RowLock rowLock = getRowLockInternal(increment.getRow(), false); try { lock(this.updatesLock.readLock()); try { @@ -7645,7 +7649,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi List<Cell> memstoreCells = new ArrayList<Cell>(); Durability effectiveDurability = getEffectiveDurability(increment.getDurability()); try { - rowLock = getRowLock(increment.getRow()); + rowLock = getRowLockInternal(increment.getRow(), false); long txid = 0; try { lock(this.updatesLock.readLock()); http://git-wip-us.apache.org/repos/asf/hbase/blob/0ee3ca2a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java index 4763c55..e49c265 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java @@ -685,11 +685,11 @@ public class TestAtomicOperation { } @Override - public RowLock getRowLock(final byte[] row, boolean readLock) throws IOException { + public RowLock getRowLockInternal(final byte[] row, boolean readLock) throws IOException { if (testStep == TestStep.CHECKANDPUT_STARTED) { latch.countDown(); } - return new WrappedRowLock(super.getRowLock(row, readLock)); + return new WrappedRowLock(super.getRowLockInternal(row, readLock)); } public class WrappedRowLock implements RowLock {