[ https://issues.apache.org/jira/browse/HIVE-21456?focusedWorklogId=758180&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-758180 ]
ASF GitHub Bot logged work on HIVE-21456: ----------------------------------------- Author: ASF GitHub Bot Created on: 19/Apr/22 00:33 Start Date: 19/Apr/22 00:33 Worklog Time Spent: 10m Work Description: sourabh912 commented on code in PR #3105: URL: https://github.com/apache/hive/pull/3105#discussion_r852503704 ########## standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java: ########## @@ -343,21 +366,162 @@ public static void startMetaStore(int port, HadoopThriftAuthBridge bridge, startMetaStore(port, bridge, conf, false, null); } - /** - * Start Metastore based on a passed {@link HadoopThriftAuthBridge}. - * - * @param port The port on which the Thrift server will start to serve - * @param bridge - * @param conf Configuration overrides - * @param startMetaStoreThreads Start the background threads (initiator, cleaner, statsupdater, etc.) - * @param startedBackgroundThreads If startMetaStoreThreads is true, this AtomicBoolean will be switched to true, - * when all of the background threads are scheduled. Useful for testing purposes to wait - * until the MetaStore is fully initialized. - * @throws Throwable - */ - public static void startMetaStore(int port, HadoopThriftAuthBridge bridge, - Configuration conf, boolean startMetaStoreThreads, AtomicBoolean startedBackgroundThreads) throws Throwable { - isMetaStoreRemote = true; + public static boolean isThriftServerRunning() { + return thriftServer != null && thriftServer.isRunning(); + } + + // TODO: Is it worth trying to use a server that supports HTTP/2? + // Does the Thrift http client support this? + + public static ThriftServer startHttpMetastore(int port, Configuration conf) + throws Exception { + LOG.info("Attempting to start http metastore server on port: {}", port); + + // This check is likely pointless, especially with the current state of the http + // servlet which respects whatever comes in. Putting this in place for the moment + // only to enable testing on an otherwise secure cluster. + LOG.info(" Checking if security is enabled"); + if (UserGroupInformation.isSecurityEnabled()) { + LOG.info("Logging in via keytab while starting HTTP metastore"); + // Handle renewal + String kerberosName = SecurityUtil.getServerPrincipal(MetastoreConf.getVar(conf, ConfVars.KERBEROS_PRINCIPAL), "0.0.0.0"); + String keyTabFile = MetastoreConf.getVar(conf, ConfVars.KERBEROS_KEYTAB_FILE); + UserGroupInformation.loginUserFromKeytab(kerberosName, keyTabFile); + } else { + LOG.info("Security is not enabled. Not logging in via keytab"); + } + + // TODO Bunch of http specific variables need to be defined here. + long maxMessageSize = MetastoreConf.getLongVar(conf, ConfVars.SERVER_MAX_MESSAGE_SIZE); + int minWorkerThreads = MetastoreConf.getIntVar(conf, ConfVars.SERVER_MIN_THREADS); + int maxWorkerThreads = MetastoreConf.getIntVar(conf, ConfVars.SERVER_MAX_THREADS); + + boolean useCompactProtocol = MetastoreConf.getBoolVar(conf, ConfVars.USE_THRIFT_COMPACT_PROTOCOL); + + // Server thread pool + // Start with minWorkerThreads, expand till maxWorkerThreads and reject + // subsequent requests + String threadPoolName = "HiveServer2-HttpHandler-Pool"; + ExecutorService executorService = new ThreadPoolExecutor( + minWorkerThreads, maxWorkerThreads, 60, TimeUnit.SECONDS, + new SynchronousQueue<>()); + + ExecutorThreadPool threadPool = new ExecutorThreadPool((ThreadPoolExecutor) executorService); + + // HTTP Server + org.eclipse.jetty.server.Server server = new Server(threadPool); + server.setStopAtShutdown(true); + + ServerConnector connector; + + final HttpConfiguration httpServerConf = new HttpConfiguration(); + // TODO: Read from Configuration Review Comment: Done. Issue Time Tracking ------------------- Worklog Id: (was: 758180) Time Spent: 5h 50m (was: 5h 40m) > Hive Metastore Thrift over HTTP > ------------------------------- > > Key: HIVE-21456 > URL: https://issues.apache.org/jira/browse/HIVE-21456 > Project: Hive > Issue Type: New Feature > Components: Metastore, Standalone Metastore > Reporter: Amit Khanna > Assignee: Sourabh Goyal > Priority: Major > Labels: pull-request-available > Attachments: HIVE-21456.2.patch, HIVE-21456.3.patch, > HIVE-21456.4.patch, HIVE-21456.patch > > Time Spent: 5h 50m > Remaining Estimate: 0h > > Hive Metastore currently doesn't have support for HTTP transport because of > which it is not possible to access it via Knox. Adding support for Thrift > over HTTP transport will allow the clients to access via Knox -- This message was sent by Atlassian Jira (v8.20.1#820001)