RATIS-1661. Support configurable hostname in GrpcService (#707)
diff --git a/ratis-grpc/src/main/java/org/apache/ratis/grpc/GrpcConfigKeys.java b/ratis-grpc/src/main/java/org/apache/ratis/grpc/GrpcConfigKeys.java
index b227dfb..8163d18 100644
--- a/ratis-grpc/src/main/java/org/apache/ratis/grpc/GrpcConfigKeys.java
+++ b/ratis-grpc/src/main/java/org/apache/ratis/grpc/GrpcConfigKeys.java
@@ -97,6 +97,16 @@
interface Admin {
String PREFIX = GrpcConfigKeys.PREFIX + ".admin";
+ String HOST_KEY = PREFIX + ".host";
+ String HOST_DEFAULT = null;
+ static String host(RaftProperties properties) {
+ final String fallbackServerHost = Server.host(properties, null);
+ return get(properties::get, HOST_KEY, HOST_DEFAULT, Server.HOST_KEY, fallbackServerHost, getDefaultLog());
+ }
+ static void setHost(RaftProperties properties, String host) {
+ set(properties::set, HOST_KEY, host);
+ }
+
String PORT_KEY = PREFIX + ".port";
int PORT_DEFAULT = -1;
static int port(RaftProperties properties) {
@@ -121,6 +131,16 @@
interface Client {
String PREFIX = GrpcConfigKeys.PREFIX + ".client";
+ String HOST_KEY = PREFIX + ".host";
+ String HOST_DEFAULT = null;
+ static String host(RaftProperties properties) {
+ final String fallbackServerHost = Server.host(properties, null);
+ return get(properties::get, HOST_KEY, HOST_DEFAULT, Server.HOST_KEY, fallbackServerHost, getDefaultLog());
+ }
+ static void setHost(RaftProperties properties, String host) {
+ set(properties::set, HOST_KEY, host);
+ }
+
String PORT_KEY = PREFIX + ".port";
int PORT_DEFAULT = -1;
static int port(RaftProperties properties) {
@@ -145,6 +165,20 @@
interface Server {
String PREFIX = GrpcConfigKeys.PREFIX + ".server";
+ String HOST_KEY = PREFIX + ".host";
+ String HOST_DEFAULT = null;
+ static String host(RaftProperties properties) {
+ return host(properties, getDefaultLog());
+ }
+
+ static String host(RaftProperties properties, Consumer<String> logger) {
+ return get(properties::get, HOST_KEY, HOST_DEFAULT, logger);
+ }
+
+ static void setHost(RaftProperties properties, String host) {
+ set(properties::set, HOST_KEY, host);
+ }
+
String PORT_KEY = PREFIX + ".port";
int PORT_DEFAULT = 0;
static int port(RaftProperties properties) {
diff --git a/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcService.java b/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcService.java
index 9d65cba..40e4139 100644
--- a/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcService.java
+++ b/ratis-grpc/src/main/java/org/apache/ratis/grpc/server/GrpcService.java
@@ -120,9 +120,15 @@
private GrpcService(RaftServer server,
GrpcTlsConfig adminTlsConfig, GrpcTlsConfig clientTlsConfig, GrpcTlsConfig serverTlsConfig) {
this(server, server::getId,
- GrpcConfigKeys.Admin.port(server.getProperties()), adminTlsConfig,
- GrpcConfigKeys.Client.port(server.getProperties()), clientTlsConfig,
- GrpcConfigKeys.Server.port(server.getProperties()), serverTlsConfig,
+ GrpcConfigKeys.Admin.host(server.getProperties()),
+ GrpcConfigKeys.Admin.port(server.getProperties()),
+ adminTlsConfig,
+ GrpcConfigKeys.Client.host(server.getProperties()),
+ GrpcConfigKeys.Client.port(server.getProperties()),
+ clientTlsConfig,
+ GrpcConfigKeys.Server.host(server.getProperties()),
+ GrpcConfigKeys.Server.port(server.getProperties()),
+ serverTlsConfig,
GrpcConfigKeys.messageSizeMax(server.getProperties(), LOG::info),
RaftServerConfigKeys.Log.Appender.bufferByteLimit(server.getProperties()),
GrpcConfigKeys.flowControlWindow(server.getProperties(), LOG::info),
@@ -132,9 +138,9 @@
@SuppressWarnings("checkstyle:ParameterNumber") // private constructor
private GrpcService(RaftServer raftServer, Supplier<RaftPeerId> idSupplier,
- int adminPort, GrpcTlsConfig adminTlsConfig,
- int clientPort, GrpcTlsConfig clientTlsConfig,
- int serverPort, GrpcTlsConfig serverTlsConfig,
+ String adminHost, int adminPort, GrpcTlsConfig adminTlsConfig,
+ String clientHost, int clientPort, GrpcTlsConfig clientTlsConfig,
+ String serverHost, int serverPort, GrpcTlsConfig serverTlsConfig,
SizeInBytes grpcMessageSizeMax, SizeInBytes appenderBufferSize,
SizeInBytes flowControlWindow,TimeDuration requestTimeoutDuration,
boolean useSeparateHBChannel) {
@@ -163,7 +169,7 @@
final boolean separateClientServer = clientPort != serverPort && clientPort > 0;
final NettyServerBuilder serverBuilder =
- startBuildingNettyServer(serverPort, serverTlsConfig, grpcMessageSizeMax, flowControlWindow);
+ startBuildingNettyServer(serverHost, serverPort, serverTlsConfig, grpcMessageSizeMax, flowControlWindow);
serverBuilder.addService(ServerInterceptors.intercept(
new GrpcServerProtocolService(idSupplier, raftServer), serverInterceptor));
if (!separateAdminServer) {
@@ -179,7 +185,7 @@
if (separateAdminServer) {
final NettyServerBuilder builder =
- startBuildingNettyServer(adminPort, adminTlsConfig, grpcMessageSizeMax, flowControlWindow);
+ startBuildingNettyServer(adminHost, adminPort, adminTlsConfig, grpcMessageSizeMax, flowControlWindow);
addAdminService(raftServer, builder);
final Server adminServer = builder.build();
servers.put(GrpcAdminProtocolService.class.getName(), adminServer);
@@ -190,7 +196,7 @@
if (separateClientServer) {
final NettyServerBuilder builder =
- startBuildingNettyServer(clientPort, clientTlsConfig, grpcMessageSizeMax, flowControlWindow);
+ startBuildingNettyServer(clientHost, clientPort, clientTlsConfig, grpcMessageSizeMax, flowControlWindow);
addClientService(builder);
final Server clientServer = builder.build();
servers.put(GrpcClientProtocolService.class.getName(), clientServer);
@@ -214,9 +220,11 @@
serverInterceptor));
}
- private static NettyServerBuilder startBuildingNettyServer(int port, GrpcTlsConfig tlsConfig,
+ private static NettyServerBuilder startBuildingNettyServer(String hostname, int port, GrpcTlsConfig tlsConfig,
SizeInBytes grpcMessageSizeMax, SizeInBytes flowControlWindow) {
- NettyServerBuilder nettyServerBuilder = NettyServerBuilder.forPort(port)
+ InetSocketAddress address = hostname == null || hostname.isEmpty() ?
+ new InetSocketAddress(port) : new InetSocketAddress(hostname, port);
+ NettyServerBuilder nettyServerBuilder = NettyServerBuilder.forAddress(address)
.withChildOption(ChannelOption.SO_REUSEADDR, true)
.maxInboundMessageSize(grpcMessageSizeMax.getSizeInt())
.flowControlWindow(flowControlWindow.getSizeInt());