diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index b80f7b5..682add5 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -714,7 +714,8 @@ private static void populateLlapDaemonVarsSet(Set llapDaemonVarsSetLocal "Defaults to all permissions for the hiveserver2/metastore process user."), METASTORE_CACHE_PINOBJTYPES("hive.metastore.cache.pinobjtypes", "Table,StorageDescriptor,SerDeInfo,Partition,Database,Type,FieldSchema,Order", "List of comma separated metastore object types that should be pinned in the cache"), - METASTORE_CONNECTION_POOLING_TYPE("datanucleus.connectionPoolingType", "BONECP", + METASTORE_CONNECTION_POOLING_TYPE("datanucleus.connectionPoolingType", "BONECP", new StringSet("BONECP", "DBCP", + "HikariCP", "NONE"), "Specify connection pool library for datanucleus"), // Workaround for DN bug on Postgres: // http://www.datanucleus.org/servlet/forum/viewthread_thread,7985_offset diff --git a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java index bfb9645..869207a 100644 --- a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java +++ b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java @@ -1705,6 +1705,7 @@ private void maskPatterns(Pattern[] patterns, String fname) throws Exception { "fk_-?[0-9]*_[0-9]*_[0-9]*", ".*at com\\.sun\\.proxy.*", ".*at com\\.jolbox.*", + ".*at com\\.zaxxer.*", "org\\.apache\\.hadoop\\.hive\\.metastore\\.model\\.MConstraint@([0-9]|[a-z])*", "(s3.?|swift|wasb.?):\\/\\/[\\w\\.\\/-]*" }); diff --git a/metastore/pom.xml b/metastore/pom.xml index 7f75d4db..c1b707a 100644 --- a/metastore/pom.xml +++ b/metastore/pom.xml @@ -81,6 +81,11 @@ ${bonecp.version} + com.zaxxer + HikariCP + ${hikaricp.version} + + commons-cli commons-cli ${commons-cli.version} diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java index 547ee98..468a725 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java @@ -20,6 +20,9 @@ import com.google.common.annotations.VisibleForTesting; import com.jolbox.bonecp.BoneCPConfig; import com.jolbox.bonecp.BoneCPDataSource; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; + import org.apache.commons.dbcp.ConnectionFactory; import org.apache.commons.dbcp.DriverManagerConnectionFactory; import org.apache.commons.dbcp.PoolableConnectionFactory; @@ -2936,6 +2939,13 @@ private static synchronized void setupJdbcConnectionPool(HiveConf conf) throws S PoolableConnectionFactory poolConnFactory = new PoolableConnectionFactory(connFactory, objectPool, null, null, false, true); connPool = new PoolingDataSource(objectPool); + } else if ("hikaricp".equals(connectionPooler)) { + HikariConfig config = new HikariConfig(); + config.setJdbcUrl(driverUrl); + config.setUsername(user); + config.setPassword(passwd); + + connPool = new HikariDataSource(config); } else if ("none".equals(connectionPooler)) { LOG.info("Choosing not to pool JDBC connections"); connPool = new NoPoolConnectionPool(conf); diff --git a/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestTxnHandlerNegative.java b/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestTxnHandlerNegative.java index ddee0fb..639669e 100644 --- a/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestTxnHandlerNegative.java +++ b/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestTxnHandlerNegative.java @@ -17,13 +17,14 @@ */ package org.apache.hadoop.hive.metastore.txn; -import org.apache.tools.ant.RuntimeConfigurable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.hive.metastore.api.MetaException; import org.junit.Test; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + public class TestTxnHandlerNegative { static final private Logger LOG = LoggerFactory.getLogger(TestTxnHandlerNegative.class); @@ -44,6 +45,10 @@ public void testBadConnection() throws Exception { LOG.info("Expected error: " + ex.getMessage(), ex); e = ex; } - assert e != null && e.getMessage().contains("No suitable driver found for blah") : "did not get exception"; + assertNotNull(e); + assertTrue( + e.getMessage().contains("No suitable driver found for blah") + || e.getMessage().contains("Failed to get driver instance for jdbcUrl=blah") + ); } } diff --git a/pom.xml b/pom.xml index 2e1d6ed..8c58f4c 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,7 @@ 2.4 2.4 2.4 - 2.2 + 2.4.3 2.19.1 2.4 2.8 @@ -144,6 +144,7 @@ 1.1.1 3.3.0 + 2.5.1 4.4 4.4 @@ -289,6 +290,11 @@ ${bonecp.version} + com.zaxxer + HikariCP + ${hikaricp.version} + + org.apache.parquet parquet ${parquet.version}