HBASE-13216 Add version info in RPC connection header (Liu Shaohui)
This commit is contained in:
parent
6605dda7b4
commit
7e1e5a60fb
|
@ -50,6 +50,7 @@ import org.apache.commons.logging.LogFactory;
|
|||
import org.apache.hadoop.hbase.HConstants;
|
||||
import org.apache.hadoop.hbase.classification.InterfaceAudience;
|
||||
import org.apache.hadoop.hbase.exceptions.ConnectionClosingException;
|
||||
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.AuthenticationProtos;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.RPCProtos;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.TracingProtos;
|
||||
|
@ -379,6 +380,7 @@ public class AsyncRpcChannel {
|
|||
headerBuilder.setCellBlockCompressorClass(client.compressor.getClass().getCanonicalName());
|
||||
}
|
||||
|
||||
headerBuilder.setVersionInfo(ProtobufUtil.getVersionInfo());
|
||||
RPCProtos.ConnectionHeader header = headerBuilder.build();
|
||||
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.ServerName;
|
|||
import org.apache.hadoop.hbase.classification.InterfaceAudience;
|
||||
import org.apache.hadoop.hbase.codec.Codec;
|
||||
import org.apache.hadoop.hbase.exceptions.ConnectionClosingException;
|
||||
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.AuthenticationProtos;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.CellBlockMeta;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader;
|
||||
|
@ -357,6 +358,7 @@ public class RpcClientImpl extends AbstractRpcClient {
|
|||
if (this.compressor != null) {
|
||||
builder.setCellBlockCompressorClass(this.compressor.getClass().getCanonicalName());
|
||||
}
|
||||
builder.setVersionInfo(ProtobufUtil.getVersionInfo());
|
||||
this.header = builder.build();
|
||||
|
||||
this.setName("IPC Client (" + socketFactory.hashCode() +") connection to " +
|
||||
|
|
|
@ -67,6 +67,7 @@ import org.apache.hadoop.hbase.exceptions.DeserializationException;
|
|||
import org.apache.hadoop.hbase.filter.ByteArrayComparable;
|
||||
import org.apache.hadoop.hbase.filter.Filter;
|
||||
import org.apache.hadoop.hbase.io.TimeRange;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.RPCProtos;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService;
|
||||
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;
|
||||
|
@ -140,6 +141,7 @@ import org.apache.hadoop.hbase.util.DynamicClassLoader;
|
|||
import org.apache.hadoop.hbase.util.ExceptionUtil;
|
||||
import org.apache.hadoop.hbase.util.Methods;
|
||||
import org.apache.hadoop.hbase.util.Pair;
|
||||
import org.apache.hadoop.hbase.util.VersionInfo;
|
||||
import org.apache.hadoop.io.Text;
|
||||
import org.apache.hadoop.ipc.RemoteException;
|
||||
import org.apache.hadoop.security.token.Token;
|
||||
|
@ -2908,4 +2910,19 @@ public final class ProtobufUtil {
|
|||
return rlsList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a protocol buffer VersionInfo
|
||||
*
|
||||
* @return the converted protocol buffer VersionInfo
|
||||
*/
|
||||
public static RPCProtos.VersionInfo getVersionInfo() {
|
||||
RPCProtos.VersionInfo.Builder builder = RPCProtos.VersionInfo.newBuilder();
|
||||
builder.setVersion(VersionInfo.getVersion());
|
||||
builder.setUrl(VersionInfo.getUrl());
|
||||
builder.setRevision(VersionInfo.getRevision());
|
||||
builder.setUser(VersionInfo.getUser());
|
||||
builder.setDate(VersionInfo.getDate());
|
||||
builder.setSrcChecksum(VersionInfo.getSrcChecksum());
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -76,6 +76,16 @@ message UserInformation {
|
|||
optional string real_user = 2;
|
||||
}
|
||||
|
||||
// Rpc client version info proto. Included in ConnectionHeader on connection setup
|
||||
message VersionInfo {
|
||||
required string version = 1;
|
||||
required string url = 2;
|
||||
required string revision = 3;
|
||||
required string user = 4;
|
||||
required string date = 5;
|
||||
required string src_checksum = 6;
|
||||
}
|
||||
|
||||
// This is sent on connection setup after the connection preamble is sent.
|
||||
message ConnectionHeader {
|
||||
optional UserInformation user_info = 1;
|
||||
|
@ -86,6 +96,7 @@ message ConnectionHeader {
|
|||
// Compressor we will use if cell block is compressed. Server will throw exception if not supported.
|
||||
// Class must implement hadoop's CompressionCodec Interface. Can't compress if no codec.
|
||||
optional string cell_block_compressor_class = 4;
|
||||
optional VersionInfo version_info = 5;
|
||||
}
|
||||
|
||||
// Optional Cell block Message. Included in client RequestHeader
|
||||
|
|
|
@ -1500,7 +1500,7 @@ public class RpcServer implements RpcServerInterface {
|
|||
// Else it will be length of the data to read (or -1 if a ping). We catch the integer
|
||||
// length into the 4-byte this.dataLengthBuffer.
|
||||
int count = read4Bytes();
|
||||
if (count < 0 || dataLengthBuffer.remaining() > 0 ){
|
||||
if (count < 0 || dataLengthBuffer.remaining() > 0 ) {
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -1630,6 +1630,14 @@ public class RpcServer implements RpcServerInterface {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (connectionHeader.hasVersionInfo()) {
|
||||
AUDITLOG.info("Connection from " + this.hostAddress + " port: " + this.remotePort
|
||||
+ " with version info: "
|
||||
+ TextFormat.shortDebugString(connectionHeader.getVersionInfo()));
|
||||
} else {
|
||||
AUDITLOG.info("Connection from " + this.hostAddress + " port: " + this.remotePort
|
||||
+ " with unknown version info");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue