Jeffrey Zhong created HBASE-12588:
-------------------------------------
Summary: Need to fail writes when row lock can't be acquired
Key: HBASE-12588
URL: https://issues.apache.org/jira/browse/HBASE-12588
Project: HBase
Issue Type: Bug
Affects Versions: 0.99.1, 0.98.8
Reporter: Jeffrey Zhong
Assignee: Jeffrey Zhong
Currently we don't fail write operations when can't acquiring row locks as
shown below in HRegion#doMiniBatchMutation.
{code}
...
RowLock rowLock = null;
try {
rowLock = getRowLock(mutation.getRow(), shouldBlock);
} catch (IOException ioe) {
LOG.warn("Failed getting lock in batch put, row="
+ Bytes.toStringBinary(mutation.getRow()), ioe);
}
if (rowLock == null) {
// We failed to grab another lock
assert !shouldBlock : "Should never fail to get lock when blocking";
break; // stop acquiring more rows for this batch
} else {
acquiredRowLocks.add(rowLock);
}
...
{code}
We saw this issue when there is meta corruption problem and checkRow fails with
error:
{noformat}
org.apache.hadoop.hbase.regionserver.WrongRegionException: Requested row out of
range for row lock on HRegion
{noformat}
While current code still continues with writes. In all cases, this is so
dangerous because row locks have to be acquired before update operations to
guarantee row update atomicity.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)