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: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to