Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
This bug occurs in following scenario.
1. For some reason, the regionLocation isn't set in .META. table for some regions. Perhaps createTable didn't complete successfully.
1. The table of those regions is being disabled.
2. HMaster restarted.
3. At HMaster startup, it tries to transition from disabling to disabled state. It got the following exception.
java.lang.NullPointerException: Passed server is null
at
org.apache.hadoop.hbase.master.ServerManager.sendRegionClose(ServerManager.
java:581)
at
org.apache.hadoop.hbase.master.AssignmentManager.unassign(AssignmentManager
.java:1093)
at
org.apache.hadoop.hbase.master.AssignmentManager.unassign(AssignmentManager
.java:1040)
at
org.apache.hadoop.hbase.master.handler.DisableTableHandler$BulkDisabler$1.r
un(DisableTableHandler.java:132)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.j
ava:886)
In AssignmentManager.rebuildUserRegions, it added such regions to its regions list,
if (regionLocation == null) {
// Region not being served, add to region map with no assignment
// If this needs to be assigned out, it will also be in ZK as RIT
// add if the table is not in disabled and enabling state
if (false == checkIfRegionBelongsToDisabled(regionInfo)
&& false == checkIfRegionsBelongsToEnabling(regionInfo))
Perhaps, it should be
if (regionLocation == null) {
// Region not being served, add to region map with no assignment
// If this needs to be assigned out, it will also be in ZK as RIT
// add if the table is not in disabled and enabling state
if (true == checkIfRegionBelongsToEnabled(regionInfo) { regions.put(regionInfo, regionLocation); }