HDFS-9426. Rollingupgrade finalization is not backward compatible (Contributed by Kihwal Lee)

(cherry picked from commit c62d42cd8b)

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

(cherry picked from commit 9f256d1d71)
This commit is contained in:
Vinayakumar B 2015-11-26 09:33:21 +05:30
parent 165abe6c4f
commit 57e0c735f8
4 changed files with 19 additions and 3 deletions

View File

@ -1652,6 +1652,9 @@ Release 2.7.2 - UNRELEASED
HDFS-6481. DatanodeManager#getDatanodeStorageInfos() should check the HDFS-6481. DatanodeManager#getDatanodeStorageInfos() should check the
length of storageIDs. (szetszwo via Arpit Agarwal) 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 Release 2.7.1 - 2015-07-06
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -163,7 +163,10 @@ public class DatanodeProtocolClientSideTranslatorPB implements
index++; index++;
} }
RollingUpgradeStatus rollingUpdateStatus = null; 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()); rollingUpdateStatus = PBHelperClient.convert(resp.getRollingUpgradeStatus());
} }
return new HeartbeatResponse(cmds, PBHelper.convert(resp.getHaStatus()), return new HeartbeatResponse(cmds, PBHelper.convert(resp.getHaStatus()),

View File

@ -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.DatanodeProtocolProtos.StorageReceivedDeletedBlocksProto;
import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeIDProto; 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.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.VersionRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.HdfsServerProtos.VersionResponseProto; import org.apache.hadoop.hdfs.protocol.proto.HdfsServerProtos.VersionResponseProto;
import org.apache.hadoop.hdfs.server.protocol.DatanodeCommand; import org.apache.hadoop.hdfs.server.protocol.DatanodeCommand;
@ -132,9 +133,17 @@ public class DatanodeProtocolServerSideTranslatorPB implements
RollingUpgradeStatus rollingUpdateStatus = response RollingUpgradeStatus rollingUpdateStatus = response
.getRollingUpdateStatus(); .getRollingUpdateStatus();
if (rollingUpdateStatus != null) { if (rollingUpdateStatus != null) {
builder.setRollingUpgradeStatus(PBHelperClient // V2 is always set for newer datanodes.
.convertRollingUpgradeStatus(rollingUpdateStatus)); // 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()); builder.setFullBlockReportLeaseId(response.getFullBlockReportLeaseId());
return builder.build(); return builder.build();
} }

View File

@ -220,6 +220,7 @@ message HeartbeatResponseProto {
required NNHAStatusHeartbeatProto haStatus = 2; required NNHAStatusHeartbeatProto haStatus = 2;
optional RollingUpgradeStatusProto rollingUpgradeStatus = 3; optional RollingUpgradeStatusProto rollingUpgradeStatus = 3;
optional uint64 fullBlockReportLeaseId = 4 [ default = 0 ]; optional uint64 fullBlockReportLeaseId = 4 [ default = 0 ];
optional RollingUpgradeStatusProto rollingUpgradeStatusV2 = 5;
} }
/** /**