Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.4.0, 1.3.1, 1.2.6, 2.0.0
-
None
-
Reviewed
Description
HRegion.java
try { // STEP 2. Acquire the row lock(s) acquiredRowLocks = new ArrayList<RowLock>(rowsToLock.size()); 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(getRowLockInternal(row, false)); } // STEP 3. Region lock lock(this.updatesLock.readLock(), acquiredRowLocks.size() == 0 ? 1 : acquiredRowLocks.size()); locked = true; boolean success = false; long now = EnvironmentEdgeManager.currentTime(); try {
We should lock all involved rows in the second try-finally. Otherwise, we won’t release the previous locks if any subsequent lock times out.
Attachments
Attachments
Issue Links
- is related to
-
HBASE-18464 Backport HBASE-17131 (Avoid livelock caused by HRegion#processRowsWithLocks) into branch-1.3 and branch-1.2
- Resolved