ClientProtocol.java - version changed from 61 to 63
- Added boolean ClientProtocol#recoverLease(String src, String clientName). DistributedFileSystem#recoverLease() exposes this method to Applications
- Added LocatedBlock addBlock(String src, String clientName, DatanodeInfo excludedNodes)
- recoverLease() - Only used by HBase current. HBase currently checks for existence of this method before calling it. No backward compatibility issues.
- addBlock() - DFSClient tracks the support for this method using a flag serverSupportsHDFS630. The flag is set to false on getting exception from server. No backward compatibility issue.
DatanodeProtocol.java - version changed from 25 to 26
Changed method nextGenerationStamp(Block ) -> nextGenerationStamp(Block, boolean)
This method is used only by Datanode. Since the whole cluster is upgraded, datanodes will run newer version of the protocol. This does not affect client compatibility, as the client does not use this RPC call.
ClientDatanodeProtocol.java - version changed from 4 to 5
Added a new method getBlockInfo(Block block) used by the client.
When new client talks to old server, to read a file that is being written to, this will result in debug logs that print this exception.
Add a flag in DFSClient to detect no support for this method and handle it accordingly. This avoids having to make a method call all the way to the server, catch an exception and print an exception.
DataTransferProtocol.java - version changed from 17 to 19
The changes in this are compatible. The version change is unnecessary.
Given that the protocol changes does not affect the client, I propose reverting the changes to version number in the protocols.