Xiaoqiao He created HDFS-15068:
----------------------------------
Summary: DataNode could meet deadlock if invoke refreshVolumes
when register
Key: HDFS-15068
URL: https://issues.apache.org/jira/browse/HDFS-15068
Project: Hadoop HDFS
Issue Type: Bug
Components: datanode
Reporter: Xiaoqiao He
Assignee: Aiphago
DataNode could meet deadlock when invoke `dfsadmin -reconfig datanode ip:host
start` to trigger #refreshVolumes.
1. DataNod#refreshVolumes hold datanode instance ownable {{synchronizer}} when
enter this method first, then try to hold BPOfferService {{readlock}} when
`bpos.getNamespaceInfo()` in following code segment.
{code:java}
for (BPOfferService bpos : blockPoolManager.getAllNamenodeThreads()) {
nsInfos.add(bpos.getNamespaceInfo());
}
{code}
2. BPOfferService#registrationSucceeded (which is invoked by #register when
DataNode start or #reregister when processCommandFromActor) hold BPOfferService
{{writelock}} first, then try to hold datanode instance ownable
{{synchronizer}} in following method.
{code:java}
synchronized void bpRegistrationSucceeded(DatanodeRegistration bpRegistration,
String blockPoolId) throws IOException {
id = bpRegistration;
if(!storage.getDatanodeUuid().equals(bpRegistration.getDatanodeUuid())) {
throw new IOException("Inconsistent Datanode IDs. Name-node returned "
+ bpRegistration.getDatanodeUuid()
+ ". Expecting " + storage.getDatanodeUuid());
}
registerBlockPoolWithSecretManager(bpRegistration, blockPoolId);
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]