[
https://issues.apache.org/jira/browse/HADOOP-6904?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hairong Kuang updated HADOOP-6904:
----------------------------------
Attachment: rpcCompatible-trunk10.patch
RpcCompatible-trunk10.patch has a few more changes. Most of then are done
either to allow less code change to the rest of Hadoop code or make less
disruptive to the current Hadoop depoyment.
1. VersionedProtocol keeps the old API: getProtocolVersion for backwards
compatibility purpose. I just found out that HBase RPC uses VersionedProtocol
too. So keeping the old API would allow the old Hadoop RPC client to continue
to talk to the new RPC server.
2. Change PROTOCOL_FINGERPRINT_CACHE to be HashMap and instead make
getSigFingerprint to be synchronized on the hashmap.
3. Add a new static method in ProtocolSignature which all RPC servers could use:
{code}
public static ProtocolSignature getProtocolSigature(VersionedProtocol server,
String protocol,
long clientVersion, int clientMethodsHash) throws IOException;
{code}
4. keep the old getProxy/waitProxy APIs to allow less code change to the rest
of the Hadoop code.
> A baby step towards inter-version RPC communications
> ----------------------------------------------------
>
> Key: HADOOP-6904
> URL: https://issues.apache.org/jira/browse/HADOOP-6904
> Project: Hadoop Common
> Issue Type: New Feature
> Components: ipc
> Affects Versions: 0.22.0
> Reporter: Hairong Kuang
> Assignee: Hairong Kuang
> Fix For: 0.23.0
>
> Attachments: majorMinorVersion.patch, majorMinorVersion1.patch,
> rpcCompatible-trunk.patch, rpcCompatible-trunk1.patch,
> rpcCompatible-trunk10.patch, rpcCompatible-trunk2.patch,
> rpcCompatible-trunk4.patch, rpcCompatible-trunk5.patch,
> rpcCompatible-trunk6.patch, rpcCompatible-trunk7.patch,
> rpcCompatible-trunk8.patch, rpcCompatible-trunk9.patch, rpcVersion.patch,
> rpcVersion1.patch
>
>
> Currently RPC communications in Hadoop is very strict. If a client has a
> different version from that of the server, a VersionMismatched exception is
> thrown and the client can not connect to the server. This force us to update
> both client and server all at once if a RPC protocol is changed. But sometime
> different versions do not mean the client & server are not compatible. It
> would be nice if we could relax this restriction and allows us to support
> inter-version communications.
> My idea is that DfsClient catches VersionMismatched exception when it
> connects to NameNode. It then checks if the client & the server is
> compatible. If yes, it sets the NameNode version in the dfs client and allows
> the client to continue talking to NameNode. Otherwise, rethrow the
> VersionMismatch exception.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.