HDFS-8995. Flaw in registration bookeeping can make DN die on reconnect. (Kihwal Lee via yliu)
This commit is contained in:
parent
4620767156
commit
5652131d2e
@ -1302,6 +1302,9 @@ Release 2.7.2 - UNRELEASED
|
||||
|
||||
HDFS-8891. HDFS concat should keep srcs order. (Yong Zhang via jing9)
|
||||
|
||||
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
|
||||
|
@ -351,9 +351,8 @@ void registrationSucceeded(BPServiceActor bpServiceActor,
|
||||
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.
|
||||
|
@ -767,15 +767,16 @@ private void offerService() throws Exception {
|
||||
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 + " :"
|
||||
|
@ -1261,10 +1261,7 @@ DatanodeRegistration createBPRegistration(NamespaceInfo nsInfo) {
|
||||
*/
|
||||
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
Block a user