Prior to the heterogeneous storage feature, each Datanode had a single storage ID which was generated by the Namenode on first registration. The storage ID used fixed Datanode identifiers like IP address and port, so that in a federated cluster, for example, all NameNodes would generate the same storage ID.
With Heterogeneous storage, we have replaced the storage ID with a per-datanode identifier called the Datanode-UUID. The Datanode UUID is also assigned by a NameNode on first registration. In a federated cluster with multiple namenodes, there are two ways to ensure a unique Datanode UUID allocation:
- Synchronize initial registration requests from the BPServiceActors. If a Datanode UUID is already assigned we don't need to synchronize.
- The datanode assigns itself a UUID on initialization.