Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 19D7C200C7F for ; Wed, 24 May 2017 09:03:41 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 18E76160B9C; Wed, 24 May 2017 07:03:41 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 605AA160BB4 for ; Wed, 24 May 2017 09:03:40 +0200 (CEST) Received: (qmail 67351 invoked by uid 500); 24 May 2017 07:03:36 -0000 Mailing-List: contact dev-help@drill.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@drill.apache.org Delivered-To: mailing list dev@drill.apache.org Received: (qmail 66014 invoked by uid 99); 24 May 2017 07:03:36 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 May 2017 07:03:36 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CC06EE3AA4; Wed, 24 May 2017 07:03:35 +0000 (UTC) From: sohami To: dev@drill.apache.org Reply-To: dev@drill.apache.org References: In-Reply-To: Subject: [GitHub] drill pull request #829: DRILL-5485: Remove WebServer dependency on DrillCli... Content-Type: text/plain Message-Id: <20170524070335.CC06EE3AA4@git1-us-west.apache.org> Date: Wed, 24 May 2017 07:03:35 +0000 (UTC) archived-at: Wed, 24 May 2017 07:03:41 -0000 Github user sohami commented on a diff in the pull request: https://github.com/apache/drill/pull/829#discussion_r118158248 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRestServer.java --- @@ -91,13 +102,140 @@ protected void configure() { bind(new UserAuthEnabled(isAuthEnabled)).to(UserAuthEnabled.class); if (isAuthEnabled) { bindFactory(DrillUserPrincipalProvider.class).to(DrillUserPrincipal.class); + bindFactory(AuthWebUserConnectionProvider.class).to(WebUserConnection.class); } else { bindFactory(AnonDrillUserPrincipalProvider.class).to(DrillUserPrincipal.class); + bindFactory(AnonWebUserConnectionProvider.class).to(WebUserConnection.class); } } }); } + public static class AuthWebUserConnectionProvider implements Factory { + + @Inject + HttpServletRequest request; + + @Inject + WorkManager workManager; + + @Override + public WebUserConnection provide() { + final HttpSession session = request.getSession(); + final Principal sessionUserPrincipal = request.getUserPrincipal(); + + // If there is no valid principal this means user is not logged in yet. + if (sessionUserPrincipal == null) { + return null; + } + + // User is logged in, let's check if we already have a valid UserSession. + UserSession drillUserSession = (UserSession) session.getAttribute(UserSession.class.getSimpleName()); + + // Get the close future and remote address. If user is logging in first time then these will be null and set + // below. Otherwise these will be valid instances which is re-used for the session lifetime. + ChannelPromise closeFuture = (ChannelPromise) session.getAttribute(ChannelPromise.class.getSimpleName()); + SocketAddress remoteAddress = (SocketAddress) session.getAttribute(SocketAddress.class.getSimpleName()); + + // User is login in for the first time + if (drillUserSession == null) { + final DrillbitContext drillbitContext = workManager.getContext(); + drillUserSession = UserSession.Builder.newBuilder() + .withCredentials(UserBitShared.UserCredentials.newBuilder() + .setUserName(sessionUserPrincipal.getName()) + .build()) + .withOptionManager(drillbitContext.getOptionManager()) + .setSupportComplexTypes(drillbitContext.getConfig().getBoolean(ExecConstants.CLIENT_SUPPORT_COMPLEX_TYPES)) --- End diff -- For [DrillClient](https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java#L161) by default this is set as true based on the config only. I looked into the usage and based on this property in session, if false planner will introduce a project node to convert complex types to JSON string. On WebServer when data batch is received we convert each data type to it's string format (even the complex types). Hence it does support complex types since WebClient now will see all the data in Json string format and should be fine. --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---