Skip to content

Commit

Permalink
HDFS-8995. Flaw in registration bookeeping can make DN die on reconne…
Browse files Browse the repository at this point in the history
…ct. (Kihwal Lee via yliu)
  • Loading branch information
y-liu committed Sep 2, 2015
1 parent 4620767 commit 5652131
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 9 deletions.
3 changes: 3 additions & 0 deletions hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
Expand Up @@ -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
Expand Down
Expand Up @@ -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.
Expand Down
Expand Up @@ -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 + " :"
Expand Down
Expand Up @@ -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 "
Expand Down

0 comments on commit 5652131

Please sign in to comment.