This is an automated email from the ASF dual-hosted git repository. dragonyliu pushed a commit to branch branch-2 in repository https://gitbox.apache.org/repos/asf/ratis.git
commit 396d696540d9acb8f959b594f8dcb44bc27cbbe1 Author: William Song <[email protected]> AuthorDate: Tue Aug 9 01:02:47 2022 +0800 RATIS-1661. Support configurable hostname in GrpcService (#707) (cherry picked from commit 485c7eccd036ea9afb3750ba77ab325bc76b0037) --- .../java/org/apache/ratis/grpc/GrpcConfigKeys.java | 34 ++++++++++++++++++++++ .../org/apache/ratis/grpc/server/GrpcService.java | 30 ++++++++++++------- 2 files changed, 53 insertions(+), 11 deletions(-) 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 b227dfb37..8163d18de 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 @@ public interface GrpcConfigKeys { 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 @@ public interface GrpcConfigKeys { 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 @@ public interface GrpcConfigKeys { 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 9d65cba39..40e413915 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 @@ public final class GrpcService extends RaftServerRpcWithProxy<GrpcServerProtocol 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 @@ public final class GrpcService extends RaftServerRpcWithProxy<GrpcServerProtocol @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 @@ public final class GrpcService extends RaftServerRpcWithProxy<GrpcServerProtocol 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 @@ public final class GrpcService extends RaftServerRpcWithProxy<GrpcServerProtocol 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 @@ public final class GrpcService extends RaftServerRpcWithProxy<GrpcServerProtocol 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 @@ public final class GrpcService extends RaftServerRpcWithProxy<GrpcServerProtocol 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());
