HDFS-9290. DFSClient#callAppend() is not backward compatible for slightly older NameNodes. Contributed by Tony Wu.

(cherry picked from commit b9e0417bdf)
This commit is contained in:
Kihwal Lee 2015-10-23 16:38:47 -05:00
parent 1c468c2346
commit d24d0fd981
2 changed files with 10 additions and 1 deletions

View File

@ -1364,8 +1364,14 @@ public class DFSClient implements java.io.Closeable, RemotePeerFactory,
try {
LastBlockWithStatus blkWithStatus = namenode.append(src, clientName,
new EnumSetWritable<>(flag, CreateFlag.class));
HdfsFileStatus status = blkWithStatus.getFileStatus();
if (status == null) {
DFSClient.LOG.debug("NameNode is on an older version, request file " +
"info with additional RPC call for file: " + src);
status = getFileInfo(src);
}
return DFSOutputStream.newStreamForAppend(this, src, flag, progress,
blkWithStatus.getLastBlock(), blkWithStatus.getFileStatus(),
blkWithStatus.getLastBlock(), status,
dfsClientConf.createChecksum(null), favoredNodes);
} catch(RemoteException re) {
throw re.unwrapRemoteException(AccessControlException.class,

View File

@ -1357,6 +1357,9 @@ Release 2.7.2 - UNRELEASED
HDFS-9220. Reading small file (< 512 bytes) that is open for append fails
due to incorrect checksum (Jing Zhao via kihwal)
HDFS-9290. DFSClient#callAppend() is not backward compatible for slightly
older NameNodes. (Tony Wu via kihwal)
Release 2.7.1 - 2015-07-06
INCOMPATIBLE CHANGES