Github user sohami commented on a diff in the pull request:
https://github.com/apache/drill/pull/950#discussion_r140132632
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserClient.java ---
@@ -102,19 +115,78 @@
// these are used for authentication
private volatile List<String> serverAuthMechanisms = null;
private volatile boolean authComplete = true;
+ private SSLConfig sslConfig;
+ private Channel sslChannel;
+ private DrillbitEndpoint endpoint;
public UserClient(String clientName, DrillConfig config, boolean
supportComplexTypes,
- BufferAllocator allocator, EventLoopGroup eventLoopGroup, Executor
eventExecutor) {
- super(
- UserRpcConfig.getMapping(config, eventExecutor),
- allocator.getAsByteBufAllocator(),
- eventLoopGroup,
- RpcType.HANDSHAKE,
- BitToUserHandshake.class,
- BitToUserHandshake.PARSER);
+ BufferAllocator allocator, EventLoopGroup eventLoopGroup, Executor
eventExecutor,
+ DrillbitEndpoint endpoint) throws NonTransientRpcException {
+ super(UserRpcConfig.getMapping(config, eventExecutor),
allocator.getAsByteBufAllocator(),
+ eventLoopGroup, RpcType.HANDSHAKE, BitToUserHandshake.class,
BitToUserHandshake.PARSER);
+ this.endpoint = endpoint; // save the endpoint; it might be needed by
SSL init.
this.clientName = clientName;
this.allocator = allocator;
this.supportComplexTypes = supportComplexTypes;
+ this.sslChannel = null;
+ try {
+ this.sslConfig = new
SSLConfigBuilder().config(config).mode(SSLFactory.Mode.CLIENT)
+ .initializeSSLContext(true).validateKeyStore(false).build();
+ } catch (DrillException e) {
--- End diff --
So based on comment in previous commit if we don't pass the info object
which contains the Connection URL parameters inside DrillConfig to keep both
separate then that will work well here as well. We can do the following:
1) Add a method in SSLConfigBuilder to accept Properties type config as
well not just DrillConfig.
2) For SSLFactory.Mode.CLIENT we will always pass an instance of Properties
type config whereas for SSLFactory.Mode.SERVER we will always pass an instance
of DrillConfig. This check can be enforced inside the builder.build()
3) Inside build() method when mode is client we are referencing all the
DrillProperties inside DrillConfig which actually is part of the instance of
Properties object passed to connect call. But with above change it will be
consistent.
---