HDFS-8995. Flaw in registration bookeeping can make DN die on reconnect. (Kihwal Lee via yliu)
This commit is contained in:
parent
015696fb81
commit
3ab43accaf
|
@ -35,6 +35,9 @@ Release 2.7.2 - UNRELEASED
|
|||
HDFS-8879. Quota by storage type usage incorrectly initialized upon namenode
|
||||
restart. (xyao)
|
||||
|
||||
HDFS-8995. Flaw in registration bookeeping can make DN die on reconnect.
|
||||
(Kihwal Lee via yliu)
|
||||
|
||||
Release 2.7.1 - 2015-07-06
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -350,9 +350,8 @@ class BPOfferService {
|
|||
reg.getStorageInfo().getNamespaceID(), "namespace ID");
|
||||
checkNSEquality(bpRegistration.getStorageInfo().getClusterID(),
|
||||
reg.getStorageInfo().getClusterID(), "cluster ID");
|
||||
} else {
|
||||
bpRegistration = reg;
|
||||
}
|
||||
bpRegistration = reg;
|
||||
|
||||
dn.bpRegistrationSucceeded(bpRegistration, getBlockPoolId());
|
||||
// Add the initial block token secret keys to the DN's secret manager.
|
||||
|
|
|
@ -744,15 +744,16 @@ class BPServiceActor implements Runnable {
|
|||
void register(NamespaceInfo nsInfo) throws IOException {
|
||||
// The handshake() phase loaded the block pool storage
|
||||
// off disk - so update the bpRegistration object from that info
|
||||
bpRegistration = bpos.createRegistration();
|
||||
DatanodeRegistration newBpRegistration = bpos.createRegistration();
|
||||
|
||||
LOG.info(this + " beginning handshake with NN");
|
||||
|
||||
while (shouldRun()) {
|
||||
try {
|
||||
// Use returned registration from namenode with updated fields
|
||||
bpRegistration = bpNamenode.registerDatanode(bpRegistration);
|
||||
bpRegistration.setNamespaceInfo(nsInfo);
|
||||
newBpRegistration = bpNamenode.registerDatanode(newBpRegistration);
|
||||
newBpRegistration.setNamespaceInfo(nsInfo);
|
||||
bpRegistration = newBpRegistration;
|
||||
break;
|
||||
} catch(EOFException e) { // namenode might have just restarted
|
||||
LOG.info("Problem connecting to server: " + nnAddr + " :"
|
||||
|
|
|
@ -1225,10 +1225,7 @@ public class DataNode extends ReconfigurableBase
|
|||
*/
|
||||
synchronized void bpRegistrationSucceeded(DatanodeRegistration bpRegistration,
|
||||
String blockPoolId) throws IOException {
|
||||
// Set the ID if we haven't already
|
||||
if (null == id) {
|
||||
id = bpRegistration;
|
||||
}
|
||||
id = bpRegistration;
|
||||
|
||||
if(!storage.getDatanodeUuid().equals(bpRegistration.getDatanodeUuid())) {
|
||||
throw new IOException("Inconsistent Datanode IDs. Name-node returned "
|
||||
|
|
Loading…
Reference in New Issue