cuijianwei created HBASE-13814:
----------------------------------
Summary: AssignmentManager does not write the correct server name
into Zookeeper when unassign region
Key: HBASE-13814
URL: https://issues.apache.org/jira/browse/HBASE-13814
Project: HBase
Issue Type: Bug
Components: Region Assignment
Affects Versions: 0.94.27
Reporter: cuijianwei
Priority: Minor
When moving region, the region will firstly be unassigned from corresponding
region server by the method AssignmentManager#unassign(). AssignmentManager
will write the region info and the server name into Zookeeper by the following
code:
{code}
versionOfClosingNode = ZKAssign.createNodeClosing(
master.getZooKeeper(), region, master.getServerName());
{code}
It seems that the AssignmentManager misuses the master's name as the server
name. If the ROOT region is being moved and the region server holding the ROOT
region is just crashed. The Master will try to start a
MetaServerShutdownHandler if the server is judged as holding meta region. The
judgment will be done by the method AssignmentManager#isCarryingRegion, and the
method will firstly check the server name in Zookeeper:
{code}
ServerName addressFromZK = (data != null && data.getOrigin() != null) ?
data.getOrigin() : null;
if (addressFromZK != null) {
// if we get something from ZK, we will use the data
boolean matchZK = (addressFromZK != null &&
addressFromZK.equals(serverName));
{code}
The wrong server name from Zookeeper will make the server not be judged as
holding the ROOT region. Then, the master will start a ServerShutdownHandler.
Unlike MetaServerShutdownHandler, the ServerShutdownHandler won't assign ROOT
region firstly, making the ROOT region won't be assigned forever. In our test
environment, we encounter this problem when moving ROOT region and stopping the
region server concurrently.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)