package org.apache.hadoop.hdfs.protocol;
/**
* This class provides a set of methods to check if two versions of a protocol
* is compatible or not.
*
*/
public class ProtocolCompatible {
/**
* Check if the client and NameNode have compatible ClientProtocol versions
*
* @param clientVersion the version of ClientProtocol that client has
* @param serverVersion the version of ClientProtocol that NameNode has
* @return true if two versions are compatible
*/
public static boolean isCompatibleClientProtocol(
long clientVersion, long serverVersion) {
return clientVersion == serverVersion ||
(
( clientVersion == ClientProtocol.OPTIMIZE_FILE_STATUS_VERSION-1 ||
clientVersion == ClientProtocol.OPTIMIZE_FILE_STATUS_VERSION ||
clientVersion == ClientProtocol.ITERATIVE_LISTING_VERSION ||
clientVersion == ClientProtocol.BULK_BLOCK_LOCATIONS_VERSION ||
clientVersion == ClientProtocol.CONCAT_VERSION ||
clientVersion == ClientProtocol.LIST_CORRUPT_FILEBLOCKS_VERSION ||
clientVersion == ClientProtocol.SAVENAMESPACE_FORCE ||
clientVersion == ClientProtocol.RECOVER_LEASE_VERSION ||
clientVersion == ClientProtocol.CLOSE_RECOVER_LEASE_VERSION
) &&
( serverVersion == ClientProtocol.OPTIMIZE_FILE_STATUS_VERSION-1 ||
serverVersion == ClientProtocol.OPTIMIZE_FILE_STATUS_VERSION ||
serverVersion == ClientProtocol.ITERATIVE_LISTING_VERSION ||
serverVersion == ClientProtocol.BULK_BLOCK_LOCATIONS_VERSION ||
serverVersion == ClientProtocol.CONCAT_VERSION ||
serverVersion == ClientProtocol.LIST_CORRUPT_FILEBLOCKS_VERSION ||
serverVersion == ClientProtocol.SAVENAMESPACE_FORCE ||
serverVersion == ClientProtocol.RECOVER_LEASE_VERSION ||
serverVersion == ClientProtocol.CLOSE_RECOVER_LEASE_VERSION
));
}
/**
* Check if the client and DataNode have compatible ClientDataNodeProtocol versions
*
* @param clientVersion the version of ClientDatanodeProtocol that client has
* @param serverVersion the version of ClientDatanodeProtocol that DataNode has
* @return true if two versions are compatible
*/
public static boolean isCompatibleClientDatanodeProtocol(
long clientVersion, long serverVersion) {
return clientVersion == serverVersion ||
(
( clientVersion == ClientDatanodeProtocol.GET_BLOCKINFO_VERSION-1 ||
clientVersion == ClientDatanodeProtocol.GET_BLOCKINFO_VERSION ||
clientVersion == ClientDatanodeProtocol.COPY_BLOCK_VERSION
) &&
( serverVersion == ClientDatanodeProtocol.GET_BLOCKINFO_VERSION-1 ||
serverVersion == ClientDatanodeProtocol.GET_BLOCKINFO_VERSION ||
serverVersion == ClientDatanodeProtocol.COPY_BLOCK_VERSION
));
}
}