From 9f256d1d716a7e17606245fcfc619901a8fa299a Mon Sep 17 00:00:00 2001 From: Vinayakumar B Date: Thu, 26 Nov 2015 09:33:21 +0530 Subject: [PATCH] HDFS-9426. Rollingupgrade finalization is not backward compatible (Contributed by Kihwal Lee) (cherry picked from commit c62d42cd8bb09a5ffc0c5eefa2d87913e71b9e7e) Conflicts: hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolClientSideTranslatorPB.java hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolServerSideTranslatorPB.java hadoop-hdfs-project/hadoop-hdfs/src/main/proto/DatanodeProtocol.proto --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../DatanodeProtocolClientSideTranslatorPB.java | 5 ++++- .../DatanodeProtocolServerSideTranslatorPB.java | 13 +++++++++++-- .../src/main/proto/DatanodeProtocol.proto | 1 + 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 97801c877c2..d73dbd2605a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -2514,6 +2514,9 @@ Release 2.7.2 - UNRELEASED HDFS-6481. DatanodeManager#getDatanodeStorageInfos() should check the length of storageIDs. (szetszwo via Arpit Agarwal) + HDFS-9426. Rollingupgrade finalization is not backward compatible + (Kihwal Lee via vinayakumarb) + Release 2.7.1 - 2015-07-06 INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolClientSideTranslatorPB.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolClientSideTranslatorPB.java index 6b20af54655..fd421c266a1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolClientSideTranslatorPB.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolClientSideTranslatorPB.java @@ -163,7 +163,10 @@ public class DatanodeProtocolClientSideTranslatorPB implements index++; } RollingUpgradeStatus rollingUpdateStatus = null; - if (resp.hasRollingUpgradeStatus()) { + // Use v2 semantics if available. + if (resp.hasRollingUpgradeStatusV2()) { + rollingUpdateStatus = PBHelperClient.convert(resp.getRollingUpgradeStatusV2()); + } else if (resp.hasRollingUpgradeStatus()) { rollingUpdateStatus = PBHelperClient.convert(resp.getRollingUpgradeStatus()); } return new HeartbeatResponse(cmds, PBHelper.convert(resp.getHaStatus()), diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolServerSideTranslatorPB.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolServerSideTranslatorPB.java index 93c11ba7d85..63fd1abc1a9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolServerSideTranslatorPB.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/DatanodeProtocolServerSideTranslatorPB.java @@ -46,6 +46,7 @@ import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.StorageBlock import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.StorageReceivedDeletedBlocksProto; import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeIDProto; import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.LocatedBlockProto; +import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RollingUpgradeStatusProto; import org.apache.hadoop.hdfs.protocol.proto.HdfsServerProtos.VersionRequestProto; import org.apache.hadoop.hdfs.protocol.proto.HdfsServerProtos.VersionResponseProto; import org.apache.hadoop.hdfs.server.protocol.DatanodeCommand; @@ -132,9 +133,17 @@ public class DatanodeProtocolServerSideTranslatorPB implements RollingUpgradeStatus rollingUpdateStatus = response .getRollingUpdateStatus(); if (rollingUpdateStatus != null) { - builder.setRollingUpgradeStatus(PBHelperClient - .convertRollingUpgradeStatus(rollingUpdateStatus)); + // V2 is always set for newer datanodes. + // To be compatible with older datanodes, V1 is set to null + // if the RU was finalized. + RollingUpgradeStatusProto rus = PBHelperClient. + convertRollingUpgradeStatus(rollingUpdateStatus); + builder.setRollingUpgradeStatusV2(rus); + if (!rollingUpdateStatus.isFinalized()) { + builder.setRollingUpgradeStatus(rus); + } } + builder.setFullBlockReportLeaseId(response.getFullBlockReportLeaseId()); return builder.build(); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/DatanodeProtocol.proto b/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/DatanodeProtocol.proto index 6dd7b89a22f..05a68306f19 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/DatanodeProtocol.proto +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/DatanodeProtocol.proto @@ -227,6 +227,7 @@ message HeartbeatResponseProto { required NNHAStatusHeartbeatProto haStatus = 2; optional RollingUpgradeStatusProto rollingUpgradeStatus = 3; optional uint64 fullBlockReportLeaseId = 4 [ default = 0 ]; + optional RollingUpgradeStatusProto rollingUpgradeStatusV2 = 5; } /**