diff --git itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestHiveSessionImpl.java itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestHiveSessionImpl.java index c7fa5da..76059f8 100644 --- itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestHiveSessionImpl.java +++ itests/hive-unit/src/test/java/org/apache/hive/service/cli/session/TestHiveSessionImpl.java @@ -48,7 +48,7 @@ public void testLeakOperationHandle() throws HiveSQLException { String password = ""; HiveConf serverhiveConf = new HiveConf(); String ipAddress = null; - HiveSessionImpl session = new HiveSessionImpl(protocol, username, password, + HiveSessionImpl session = new HiveSessionImpl(null, protocol, username, password, serverhiveConf, ipAddress) { @Override protected synchronized void acquire(boolean userAccess, boolean isOperation) { diff --git service/src/java/org/apache/hive/service/AbstractService.java service/src/java/org/apache/hive/service/AbstractService.java index a583305..38d9a7e 100644 --- service/src/java/org/apache/hive/service/AbstractService.java +++ service/src/java/org/apache/hive/service/AbstractService.java @@ -50,7 +50,7 @@ /** * The configuration. Will be null until the service is initialized. */ - private HiveConf hiveConf; + protected HiveConf hiveConf; /** * List of state change listeners; it is final to ensure diff --git service/src/java/org/apache/hive/service/cli/CLIService.java service/src/java/org/apache/hive/service/cli/CLIService.java index 6d07d0c..de44ecb 100644 --- service/src/java/org/apache/hive/service/cli/CLIService.java +++ service/src/java/org/apache/hive/service/cli/CLIService.java @@ -62,7 +62,6 @@ private final Logger LOG = LoggerFactory.getLogger(CLIService.class.getName()); - private HiveConf hiveConf; private SessionManager sessionManager; private UserGroupInformation serviceUGI; private UserGroupInformation httpUGI; diff --git service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java index 8f5e92e..f939a93 100644 --- service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java +++ service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java @@ -145,12 +145,6 @@ public HiveSessionImpl(SessionHandle sessionHandle, TProtocolVersion protocol, sessionConf.setInt(SerDeUtils.LIST_SINK_OUTPUT_PROTOCOL, protocol.getValue()); } - public HiveSessionImpl(TProtocolVersion protocol, String username, String password, - HiveConf serverhiveConf, String ipAddress) { - this(null, protocol, username, password, serverhiveConf, ipAddress); - } - - @Override /** * Opens a new HiveServer2 session for the client connection. diff --git service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java index afed9e2..00a7e74 100644 --- service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java +++ service/src/java/org/apache/hive/service/cli/session/HiveSessionImplwithUGI.java @@ -49,11 +49,6 @@ private String hmsDelegationTokenStr = null; private HiveSession proxySession = null; - - public HiveSessionImplwithUGI(TProtocolVersion protocol, String username, - String password, HiveConf hiveConf, String ipAddress, String delegationToken) throws HiveSQLException { - this(null, protocol, username, password, hiveConf, ipAddress, delegationToken); - } public HiveSessionImplwithUGI(SessionHandle sessionHandle, TProtocolVersion protocol, String username, String password, HiveConf hiveConf, String ipAddress, String delegationToken) throws HiveSQLException { super(sessionHandle, protocol, username, password, hiveConf, ipAddress); diff --git service/src/test/org/apache/hive/service/cli/session/TestPluggableHiveSessionImpl.java service/src/test/org/apache/hive/service/cli/session/TestPluggableHiveSessionImpl.java index b1f3917..47f95c5 100644 --- service/src/test/org/apache/hive/service/cli/session/TestPluggableHiveSessionImpl.java +++ service/src/test/org/apache/hive/service/cli/session/TestPluggableHiveSessionImpl.java @@ -17,56 +17,100 @@ */ package org.apache.hive.service.cli.session; -import junit.framework.Assert; -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; + import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hive.service.cli.CLIService; import org.apache.hive.service.cli.HiveSQLException; import org.apache.hive.service.cli.SessionHandle; -import org.apache.hive.service.rpc.thrift.TProtocolVersion; import org.apache.hive.service.cli.thrift.ThriftBinaryCLIService; -import org.apache.hive.service.cli.thrift.ThriftCLIService; import org.apache.hive.service.cli.thrift.ThriftCLIServiceClient; -import org.junit.Before; +import org.apache.hive.service.rpc.thrift.TProtocolVersion; import org.junit.Test; -public class TestPluggableHiveSessionImpl extends TestCase { +public class TestPluggableHiveSessionImpl { - private HiveConf hiveConf; - private CLIService cliService; - private ThriftCLIServiceClient client; - private ThriftCLIService service; + @Test + public void testSessionImpl() throws Exception { + + HiveConf hiveConf = new HiveConf(); + hiveConf.setVar(HiveConf.ConfVars.HIVE_AUTHORIZATION_MANAGER, + HiveConf.ConfVars.HIVE_AUTHORIZATION_MANAGER.getDefaultValue()); + hiveConf.setVar(HiveConf.ConfVars.HIVE_SESSION_IMPL_CLASSNAME, + SampleHiveSessionImpl.class.getName()); + hiveConf.setBoolVar(HiveConf.ConfVars.HIVE_SERVER2_ENABLE_DOAS, false); - @Override - @Before - public void setUp() { - hiveConf = new HiveConf(); - hiveConf.setVar(HiveConf.ConfVars.HIVE_SESSION_IMPL_CLASSNAME, TestHiveSessionImpl.class.getName()); - cliService = new CLIService(null); - service = new ThriftBinaryCLIService(cliService, null); + CLIService cliService = new CLIService(null); + cliService.init(hiveConf); + ThriftBinaryCLIService service = new ThriftBinaryCLIService(cliService, null); service.init(hiveConf); - client = new ThriftCLIServiceClient(service); - } + ThriftCLIServiceClient client = new ThriftCLIServiceClient(service); + SessionHandle sessionHandle = null; + sessionHandle = client.openSession("tom", "password"); + assertEquals(SampleHiveSessionImpl.class.getName(), + service.getHiveConf().getVar(HiveConf.ConfVars.HIVE_SESSION_IMPL_CLASSNAME)); + HiveSession session = cliService.getSessionManager().getSession(sessionHandle); + + assertEquals(SampleHiveSessionImpl.MAGIC_RETURN_VALUE, session.getNoOperationTime()); + + client.closeSession(sessionHandle); + } @Test - public void testSessionImpl() { + public void testSessionImplWithUGI() throws Exception { + HiveConf hiveConf = new HiveConf(); + hiveConf.setVar(HiveConf.ConfVars.HIVE_AUTHORIZATION_MANAGER, + HiveConf.ConfVars.HIVE_AUTHORIZATION_MANAGER.getDefaultValue()); + hiveConf.setVar(HiveConf.ConfVars.HIVE_SESSION_IMPL_WITH_UGI_CLASSNAME, + SampleHiveSessionImplWithUGI.class.getName()); + hiveConf.setBoolVar(HiveConf.ConfVars.HIVE_SERVER2_ENABLE_DOAS, true); + + CLIService cliService = new CLIService(null); + cliService.init(hiveConf); + ThriftBinaryCLIService service = new ThriftBinaryCLIService(cliService, null); + service.init(hiveConf); + ThriftCLIServiceClient client = new ThriftCLIServiceClient(service); + SessionHandle sessionHandle = null; - try { - sessionHandle = client.openSession("tom", "password"); - Assert.assertEquals(TestHiveSessionImpl.class.getName(), - service.getHiveConf().getVar(HiveConf.ConfVars.HIVE_SESSION_IMPL_CLASSNAME)); - Assert.assertTrue(cliService.getSessionManager().getSession(sessionHandle) instanceof TestHiveSessionImpl); - client.closeSession(sessionHandle); - } catch (HiveSQLException e) { - e.printStackTrace(); + sessionHandle = client.openSession("tom", "password"); + assertEquals(SampleHiveSessionImplWithUGI.class.getName(), + service.getHiveConf().getVar(HiveConf.ConfVars.HIVE_SESSION_IMPL_WITH_UGI_CLASSNAME)); + HiveSession session = cliService.getSessionManager().getSession(sessionHandle); + + assertEquals(SampleHiveSessionImplWithUGI.MAGIC_RETURN_VALUE, session.getNoOperationTime()); + + client.closeSession(sessionHandle); + } + + public static class SampleHiveSessionImpl extends HiveSessionImpl { + public static final int MAGIC_RETURN_VALUE = 0xbeef0001; + + public SampleHiveSessionImpl(SessionHandle sessionHandle, TProtocolVersion protocol, + String username, String password, HiveConf serverhiveConf, String ipAddress) { + super(sessionHandle, protocol, username, password, serverhiveConf, ipAddress); + } + + @Override + public long getNoOperationTime() { + return MAGIC_RETURN_VALUE; } } - class TestHiveSessionImpl extends HiveSessionImpl { + public static class SampleHiveSessionImplWithUGI extends HiveSessionImplwithUGI { + + public static final int MAGIC_RETURN_VALUE = 0xbeef0002; + + public SampleHiveSessionImplWithUGI(SessionHandle sessionHandle, TProtocolVersion protocol, + String username, String password, HiveConf serverhiveConf, String ipAddress, + String delegationToken) throws HiveSQLException { + super(sessionHandle, protocol, username, password, serverhiveConf, ipAddress, + delegationToken); + } - public TestHiveSessionImpl(TProtocolVersion protocol, String username, String password, HiveConf serverhiveConf, String ipAddress) { - super(protocol, username, password, serverhiveConf, ipAddress); + @Override + public long getNoOperationTime() { + return MAGIC_RETURN_VALUE; } } }