Jingyun Tian created HBASE-18619:
------------------------------------
Summary: Should we add a postOpenDeployTasks after open splited or
merged region?
Key: HBASE-18619
URL: https://issues.apache.org/jira/browse/HBASE-18619
Project: HBase
Issue Type: Bug
Components: Region Assignment
Affects Versions: 1.1.11, 1.2.6, 0.98.6, 1.4.0
Reporter: Jingyun Tian
Assignee: Jingyun Tian
I have a question that why we skip postOpenDeployTasks() when we not using zk
for assignment?
{code:java}
if (services != null) {
try {
if (useZKForAssignment) {
// add 2nd daughter first (see HBASE-4335)
services.postOpenDeployTasks(b);
} else if (!services.reportRegionStateTransition(TransitionCode.SPLIT,
parent.getRegionInfo(), hri_a, hri_b)) {
throw new IOException("Failed to report split region to master: "
+ parent.getRegionInfo().getShortNameToLog());
}
// Should add it to OnlineRegions
services.addToOnlineRegions(b);
if (useZKForAssignment) {
services.postOpenDeployTasks(a);
}
services.addToOnlineRegions(a);
} catch (KeeperException ke) {
throw new IOException(ke);
}
}
{code}
It causes a new splitted region or new merged region will not compact their
reference files. Then if the normalizer thread want to split this region, it
will get stuck.
{code:java}
public boolean canSplit() {
this.lock.readLock().lock();
try {
// Not split-able if we find a reference store file present in the store.
boolean result = !hasReferences();
if (!result && LOG.isDebugEnabled()) {
LOG.debug("Cannot split region due to reference files being there");
}
return result;
} finally {
this.lock.readLock().unlock();
}
}
{code}
According to the code, should we add a services.postOpenDeployTasks after
successfully _*reportRegionStateTransition(TransitionCode.SPLIT,
parent.getRegionInfo(), hri_a, hri_b)*_
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)