You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-dev@hadoop.apache.org by "Eric Sirianni (JIRA)" <ji...@apache.org> on 2013/11/04 18:09:17 UTC
[jira] [Created] (HDFS-5454) DataNode UUID should be assigned prior
to FsDataset initialization
Eric Sirianni created HDFS-5454:
-----------------------------------
Summary: DataNode UUID should be assigned prior to FsDataset initialization
Key: HDFS-5454
URL: https://issues.apache.org/jira/browse/HDFS-5454
Project: Hadoop HDFS
Issue Type: Bug
Components: datanode
Affects Versions: 2.2.0
Reporter: Eric Sirianni
Assignee: Arpit Agarwal
Priority: Minor
The DataNode's UUID ({{DataStorage.getDatanodeUuid()}} field) is NULL at the point where the {{FsDataset}} object is created ({{DataNode.initStorage()}}.
As the {{DataStorage}} object is an input to the {{FsDataset}} factory method, it is desirable for it to be fully populated with a UUID at this point. In particular, our {{FsDatasetSpi}} implementation relies upon the DataNode UUID as a key to access our underlying block storage device.
This also appears to be a regression compared to Hadoop 1.x - our 1.x {{FSDatasetInterface}} plugin has a non-NULL UUID on startup. I haven't fully traced through the code, but I suspect this came from the {{BPOfferService}}/{{BPServiceActor}} refactoring to support federated namenodes.
With HDFS-5448, the DataNode is now responsible for generating its own UUID. This greatly simplifies the fix. Move the UUID check/generation in from {{DataNode.createBPRegistration()}} to {{DataNode.initStorage()}}. This more naturally co-locates UUID generation immediately subsequent to the read of the UUID from the {{DataStorage}} properties file.
{code}
private void initStorage(final NamespaceInfo nsInfo) throws IOException {
// ...
final String bpid = nsInfo.getBlockPoolID();
//read storage info, lock data dirs and transition fs state if necessary
storage.recoverTransitionRead(this, bpid, nsInfo, dataDirs, startOpt);
// SUGGESTED NEW PLACE TO CHECK DATANODE UUID
checkDatanodeUuid();
// ...
}
{code}
--
This message was sent by Atlassian JIRA
(v6.1#6144)