[
https://issues.apache.org/jira/browse/HBASE-4351?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13103802#comment-13103802
]
Jean-Daniel Cryans commented on HBASE-4351:
-------------------------------------------
Why not just:
{code}
if (force) {
this.assignmentManager.clearRegionFromTransition(hri);
assignRegion(hri);
} else {
this.assignmentManager.unassign(hri, force);
}
cpPostUnassign(hri, force);
{code}
No return, no double cpPostUnassign call.
> If from Admin we try to unassign a region forcefully, though a valid region
> name is given the master is not able to identify the region to unassign.
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-4351
> URL: https://issues.apache.org/jira/browse/HBASE-4351
> Project: HBase
> Issue Type: Bug
> Environment: Linux
> Reporter: ramkrishna.s.vasudevan
> Assignee: ramkrishna.s.vasudevan
> Fix For: 0.92.0, 0.90.5
>
> Attachments: HBASE-4351.patch, HBASE-4351_1.patch, HBASE-4351_2.patch
>
>
> The following is the problem
> Get the exact region name from UI and call
> HBaseAdmin.unassign(regionname, true).
> Here true is forceful option.
> As part of unassign api
> {code}
> public void unassign(final byte [] regionName, final boolean force)
> throws IOException {
> Pair<HRegionInfo, HServerAddress> pair =
> MetaReader.getRegion(this.catalogTracker, regionName);
> if (pair == null) throw new
> UnknownRegionException(Bytes.toStringBinary(regionName));
> HRegionInfo hri = pair.getFirst();
> if (force) this.assignmentManager.clearRegionFromTransition(hri);
> this.assignmentManager.unassign(hri, force);
> }
> {code}
> As part of clearRegionFromTransition()
> {code}
> synchronized (this.regions) {
> this.regions.remove(hri);
> for (Set<HRegionInfo> regions : this.servers.values()) {
> regions.remove(hri);
> }
> }
> {code}
> the region is also removed. Hence when the master tries to identify the
> region
> {code}
> if (!regions.containsKey(region)) {
> debugLog(region, "Attempted to unassign region " +
> region.getRegionNameAsString() + " but it is not " +
> "currently assigned anywhere");
> return;
> }
> {code}
> It is not able to identify the region. It exists in trunk and 0.90.x also.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira