You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by yc...@apache.org on 2019/01/26 05:27:50 UTC

hive git commit: HIVE-21045: Add HMS total api count stats and connection pool stats to metrics (Karthik Manamcheri, reviewed by Naveen Gangam and Yongzhi Chen)

Repository: hive
Updated Branches:
  refs/heads/master a3bac4d7e -> fd92d8865


HIVE-21045: Add HMS total api count stats and connection pool stats to metrics (Karthik Manamcheri, reviewed by Naveen Gangam and Yongzhi Chen)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/fd92d886
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/fd92d886
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/fd92d886

Branch: refs/heads/master
Commit: fd92d88655a93673f4cdebfa4bd46d059ea57e9c
Parents: a3bac4d
Author: Yongzhi Chen <yc...@apache.org>
Authored: Fri Jan 25 17:14:47 2019 -0500
Committer: Yongzhi Chen <yc...@apache.org>
Committed: Sat Jan 26 00:19:08 2019 -0500

----------------------------------------------------------------------
 .../metastore/PersistenceManagerProvider.java   |   5 +-
 .../datasource/BoneCPDataSourceProvider.java    | 107 ++++++++++++++++---
 .../datasource/DataSourceProvider.java          |  18 ++--
 .../datasource/DataSourceProviderFactory.java   |  48 +++------
 .../datasource/DbCPDataSourceProvider.java      |   7 +-
 .../datasource/HikariCPDataSourceProvider.java  |  23 ++--
 .../metastore/metrics/MetricsConstants.java     |   2 +
 .../hive/metastore/metrics/PerfLogger.java      |  17 ++-
 .../hadoop/hive/metastore/txn/TxnHandler.java   |   2 +-
 .../TestDataSourceProviderFactory.java          |  87 ++-------------
 10 files changed, 168 insertions(+), 148 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/PersistenceManagerProvider.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/PersistenceManagerProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/PersistenceManagerProvider.java
index dfd7abf..084ae83 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/PersistenceManagerProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/PersistenceManagerProvider.java
@@ -54,7 +54,6 @@ import javax.jdo.datastore.DataStoreCache;
 import javax.sql.DataSource;
 import java.io.IOException;
 import java.lang.reflect.Field;
-import java.lang.reflect.Method;
 import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collections;
@@ -225,9 +224,7 @@ public class PersistenceManagerProvider {
   }
 
   private static void initPMF(Configuration conf) {
-    DataSourceProvider dsp = DataSourceProviderFactory
-        .hasProviderSpecificConfigurations(conf) ? DataSourceProviderFactory
-        .getDataSourceProvider(conf) : null;
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
 
     if (dsp == null) {
       pmf = JDOHelper.getPersistenceManagerFactory(prop);

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/BoneCPDataSourceProvider.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/BoneCPDataSourceProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/BoneCPDataSourceProvider.java
index 7e33c51..f3243c5 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/BoneCPDataSourceProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/BoneCPDataSourceProvider.java
@@ -17,17 +17,27 @@
  */
 package org.apache.hadoop.hive.metastore.datasource;
 
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Properties;
+import javax.sql.DataSource;
+
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.MetricSet;
 import com.jolbox.bonecp.BoneCPConfig;
 import com.jolbox.bonecp.BoneCPDataSource;
+import com.jolbox.bonecp.StatisticsMBean;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.metrics.Metrics;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.sql.DataSource;
-import java.sql.SQLException;
-import java.util.Properties;
-
 /**
  * DataSourceProvider for the BoneCP connection pool.
  */
@@ -61,15 +71,16 @@ public class BoneCPDataSourceProvider implements DataSourceProvider {
       throw new SQLException("Cannot create BoneCP configuration: ", e);
     }
     config.setJdbcUrl(driverUrl);
-    //if we are waiting for connection for a long time, something is really wrong
-    //better raise an error than hang forever
-    //see DefaultConnectionStrategy.getConnectionInternal()
+    // if we are waiting for connection for a long time, something is really wrong
+    // better raise an error than hang forever
+    // see DefaultConnectionStrategy.getConnectionInternal()
     config.setConnectionTimeoutInMs(connectionTimeout);
     config.setMaxConnectionsPerPartition(maxPoolSize);
     config.setPartitionCount(Integer.parseInt(partitionCount));
     config.setUser(user);
     config.setPassword(passwd);
-    return new BoneCPDataSource(config);
+
+    return initMetrics(new BoneCPDataSource(config));
   }
 
   @Override
@@ -79,9 +90,81 @@ public class BoneCPDataSourceProvider implements DataSourceProvider {
   }
 
   @Override
-  public boolean supports(Configuration configuration) {
-    String poolingType = MetastoreConf.getVar(configuration,
-            MetastoreConf.ConfVars.CONNECTION_POOLING_TYPE);
-    return BONECP.equalsIgnoreCase(poolingType);
+  public String getPoolingType() {
+    return BONECP;
+  }
+
+  private BoneCPDataSource initMetrics(BoneCPDataSource ds) {
+    final MetricRegistry registry = Metrics.getRegistry();
+    if (registry != null) {
+      registry.registerAll(new BoneCPMetrics(ds));
+    }
+    return ds;
+  }
+
+  private static class BoneCPMetrics implements MetricSet {
+    private BoneCPDataSource ds;
+    private Optional<String> poolName;
+
+    private BoneCPMetrics(final BoneCPDataSource ds) {
+      this.ds = ds;
+      this.poolName = Optional.ofNullable(ds.getPoolName());
+    }
+
+    private String name(final String gaugeName) {
+      return poolName.orElse("BoneCP") + ".pool." + gaugeName;
+    }
+
+    @Override
+    public Map<String, Metric> getMetrics() {
+      final Map<String, Metric> gauges = new HashMap<>();
+
+      gauges.put(name("TotalConnections"), new Gauge<Integer>() {
+        @Override
+        public Integer getValue() {
+          if (ds.getPool() != null) {
+            return ds.getPool().getStatistics().getTotalCreatedConnections();
+          } else {
+            return 0;
+          }
+        }
+      });
+
+      gauges.put(name("IdleConnections"), new Gauge<Integer>() {
+        @Override
+        public Integer getValue() {
+          if (ds.getPool() != null) {
+            return ds.getPool().getStatistics().getTotalFree();
+          } else {
+            return 0;
+          }
+        }
+      });
+
+      gauges.put(name("ActiveConnections"), new Gauge<Integer>() {
+        @Override
+        public Integer getValue() {
+          if (ds.getPool() != null) {
+            return ds.getPool().getStatistics().getTotalLeased();
+          } else {
+            return 0;
+          }
+        }
+      });
+
+      gauges.put(name("WaitTimeAvg"), new Gauge<Double>() {
+        @Override
+        public Double getValue() {
+          if (ds.getPool() != null) {
+            return ds.getPool().getStatistics().getConnectionWaitTimeAvg();
+          } else {
+            return 0.0;
+          }
+        }
+      });
+
+      return Collections.unmodifiableMap(gauges);
+    }
   }
+
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProvider.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProvider.java
index 6dc63fb..d71fa7d 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProvider.java
@@ -17,14 +17,14 @@
  */
 package org.apache.hadoop.hive.metastore.datasource;
 
-import com.google.common.collect.Iterables;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
-
-import javax.sql.DataSource;
 import java.io.IOException;
 import java.sql.SQLException;
 import java.util.Properties;
+import javax.sql.DataSource;
+
+import com.google.common.collect.Iterables;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
 
 public interface DataSourceProvider {
 
@@ -42,11 +42,11 @@ public interface DataSourceProvider {
   boolean mayReturnClosedConnection();
 
   /**
-   * @param configuration Hadoop configuration object
-   * @return factory able to create a connection pool for the implementation
-   * specified in the configuration
+   * Get the declared pooling type string. This is used to check against the constant in
+   * config options.
+   * @return The pooling type string associated with the data source.
    */
-  boolean supports(Configuration configuration);
+  String getPoolingType();
 
   /**
    * @param hdpConfig

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProviderFactory.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProviderFactory.java
index 5a92e10..bad12b2 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProviderFactory.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DataSourceProviderFactory.java
@@ -27,40 +27,26 @@ import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
  * Configuration object.
  */
 public abstract  class DataSourceProviderFactory {
-
-  private static final ImmutableList<DataSourceProvider> FACTORIES =
-      ImmutableList.<DataSourceProvider>builder().add(new HikariCPDataSourceProvider(), new BoneCPDataSourceProvider(),
-              new DbCPDataSourceProvider()).build();
+  private static final ImmutableList<DataSourceProvider> FACTORIES = ImmutableList.of(
+    new HikariCPDataSourceProvider(),
+    new BoneCPDataSourceProvider(),
+    new DbCPDataSourceProvider());
 
   /**
+   * The data source providers declare if they are supported or not based on the config.
+   * This function looks through all the data source providers and picks the first one which is
+   * supported. If no data source provider is found, returns a null.
+   *
    * @param hdpConfig hadoop configuration
-   * @return factory for the configured datanucleus.connectionPoolingType
+   * @return factory for the configured datanucleus.connectionPoolingType or null if no supported
+   *         data source providers are found.
    */
-  public static DataSourceProvider getDataSourceProvider(Configuration hdpConfig) {
-
-    for (DataSourceProvider factory : FACTORIES) {
-
-      if (factory.supports(hdpConfig)) {
-        return factory;
-      }
-    }
-    return null;
+  public static DataSourceProvider tryGetDataSourceProviderOrNull(Configuration hdpConfig) {
+    final String configuredPoolingType = MetastoreConf.getVar(hdpConfig,
+        MetastoreConf.ConfVars.CONNECTION_POOLING_TYPE);
+    return Iterables.tryFind(FACTORIES, factory -> {
+      String poolingType = factory.getPoolingType();
+      return poolingType != null && poolingType.equalsIgnoreCase(configuredPoolingType);
+    }).orNull();
   }
-
-  /**
-   * @param hdpConfig hadoop configuration
-   * @return true if the configuration contains settings specifically aimed for one
-   * of the supported conntection pool implementations.
-   */
-  public static boolean hasProviderSpecificConfigurations(Configuration hdpConfig) {
-
-    String poolingType = MetastoreConf.getVar(hdpConfig, MetastoreConf.ConfVars.CONNECTION_POOLING_TYPE).toLowerCase();
-
-    return Iterables.any(hdpConfig, entry ->
-    {
-      String key = entry.getKey();
-      return key != null && (key.startsWith(poolingType));
-    });
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DbCPDataSourceProvider.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DbCPDataSourceProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DbCPDataSourceProvider.java
index 7fe487b..1275e54 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DbCPDataSourceProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/DbCPDataSourceProvider.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hive.metastore.datasource;
 
+import com.codahale.metrics.MetricRegistry;
 import org.apache.commons.dbcp.ConnectionFactory;
 import org.apache.commons.dbcp.DriverManagerConnectionFactory;
 import org.apache.commons.dbcp.PoolableConnectionFactory;
@@ -109,9 +110,7 @@ public class DbCPDataSourceProvider implements DataSourceProvider {
   }
 
   @Override
-  public boolean supports(Configuration configuration) {
-    String poolingType = MetastoreConf.getVar(configuration,
-            MetastoreConf.ConfVars.CONNECTION_POOLING_TYPE);
-    return DBCP.equalsIgnoreCase(poolingType);
+  public String getPoolingType() {
+    return DBCP;
   }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/HikariCPDataSourceProvider.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/HikariCPDataSourceProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/HikariCPDataSourceProvider.java
index 8f6ae57..7fd78d6 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/HikariCPDataSourceProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/datasource/HikariCPDataSourceProvider.java
@@ -17,10 +17,12 @@
  */
 package org.apache.hadoop.hive.metastore.datasource;
 
+import com.codahale.metrics.MetricRegistry;
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.metrics.Metrics;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,8 +37,8 @@ public class HikariCPDataSourceProvider implements DataSourceProvider {
 
   private static final Logger LOG = LoggerFactory.getLogger(HikariCPDataSourceProvider.class);
 
-  public static final String HIKARI = "hikaricp";
-  private static final String CONNECTION_TIMEOUT_PROPERTY= HIKARI + ".connectionTimeout";
+  static final String HIKARI = "hikaricp";
+  private static final String CONNECTION_TIMEOUT_PROPERTY = HIKARI + ".connectionTimeout";
 
   @Override
   public DataSource create(Configuration hdpConfig) throws SQLException {
@@ -64,7 +66,8 @@ public class HikariCPDataSourceProvider implements DataSourceProvider {
     config.setPassword(passwd);
     //https://github.com/brettwooldridge/HikariCP
     config.setConnectionTimeout(connectionTimeout);
-    return new HikariDataSource(config);
+
+    return new HikariDataSource(initMetrics(config));
   }
 
   @Override
@@ -74,10 +77,8 @@ public class HikariCPDataSourceProvider implements DataSourceProvider {
   }
 
   @Override
-  public boolean supports(Configuration configuration) {
-    String poolingType = MetastoreConf.getVar(configuration,
-            MetastoreConf.ConfVars.CONNECTION_POOLING_TYPE);
-    return HIKARI.equalsIgnoreCase(poolingType);
+  public String getPoolingType() {
+    return HIKARI;
   }
 
   private Properties replacePrefix(Properties props) {
@@ -86,4 +87,12 @@ public class HikariCPDataSourceProvider implements DataSourceProvider {
         newProps.put(key.toString().replaceFirst(HIKARI + ".", ""), value));
     return newProps;
   }
+
+  private static HikariConfig initMetrics(final HikariConfig config) {
+    final MetricRegistry registry = Metrics.getRegistry();
+    if (registry != null) {
+      config.setMetricRegistry(registry);
+    }
+    return config;
+  }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/MetricsConstants.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/MetricsConstants.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/MetricsConstants.java
index 3b188f8..24c8c4c 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/MetricsConstants.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/MetricsConstants.java
@@ -21,6 +21,8 @@ public class MetricsConstants {
   public static final String ACTIVE_CALLS = "active_calls_";
   public static final String API_PREFIX = "api_";
 
+  public static final String TOTAL_API_CALLS = "total_api_calls";
+
   public static final String CREATE_TOTAL_DATABASES = "create_total_count_dbs";
   public static final String CREATE_TOTAL_TABLES = "create_total_count_tables";
   public static final String CREATE_TOTAL_PARTITIONS = "create_total_count_partitions";

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/PerfLogger.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/PerfLogger.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/PerfLogger.java
index a2def26..c111343 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/PerfLogger.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/PerfLogger.java
@@ -164,15 +164,19 @@ public class PerfLogger {
     return ImmutableMap.copyOf(endTimes);
   }
 
-  //Methods for metrics integration.  Each thread-local PerfLogger will open/close scope during each perf-log method.
-  protected transient Map<String, Timer.Context> timerContexts = new HashMap<>();
+  // Methods for metrics integration.  Each thread-local PerfLogger will open/close scope during each perf-log method.
+  private transient Map<String, Timer.Context> timerContexts = new HashMap<>();
+  private transient Timer.Context totalApiCallsTimerContext = null;
 
   private void beginMetrics(String method) {
     Timer timer = Metrics.getOrCreateTimer(MetricsConstants.API_PREFIX + method);
     if (timer != null) {
       timerContexts.put(method, timer.time());
     }
-
+    timer = Metrics.getOrCreateTimer(MetricsConstants.TOTAL_API_CALLS);
+    if (timer != null) {
+      totalApiCallsTimerContext = timer.time();
+    }
   }
 
   private void endMetrics(String method) {
@@ -180,6 +184,9 @@ public class PerfLogger {
     if (context != null) {
       context.close();
     }
+    if (totalApiCallsTimerContext != null) {
+      totalApiCallsTimerContext.close();
+    }
   }
 
   /**
@@ -190,5 +197,9 @@ public class PerfLogger {
       context.close();
     }
     timerContexts.clear();
+    if (totalApiCallsTimerContext != null) {
+      totalApiCallsTimerContext.close();
+      totalApiCallsTimerContext = null;
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
index a17abfc..7520922 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
@@ -5013,7 +5013,7 @@ abstract class TxnHandler implements TxnStore, TxnStore.MutexAPI {
   }
 
   private static synchronized DataSource setupJdbcConnectionPool(Configuration conf, int maxPoolSize, long getConnectionTimeoutMs) throws SQLException {
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     if (dsp != null) {
       doRetryOnConnPool = dsp.mayReturnClosedConnection();
       return dsp.create(conf);

http://git-wip-us.apache.org/repos/asf/hive/blob/fd92d886/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/datasource/TestDataSourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/datasource/TestDataSourceProviderFactory.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/datasource/TestDataSourceProviderFactory.java
index 6ae7f50..f3b6f9f 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/datasource/TestDataSourceProviderFactory.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/datasource/TestDataSourceProviderFactory.java
@@ -50,29 +50,16 @@ public class TestDataSourceProviderFactory {
 
     MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, "dummy");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNull(dsp);
   }
 
   @Test
-  public void testCanCreateDataSourceForSpecificProp() throws SQLException {
-
-    Assert.assertFalse(
-            DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, BoneCPDataSourceProvider.BONECP);
-    conf.set(BoneCPDataSourceProvider.BONECP + ".dummy.var", "dummy");
-
-    Assert.assertTrue(
-            DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-  }
-
-  @Test
   public void testCreateBoneCpDataSource() throws SQLException {
 
     MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, BoneCPDataSourceProvider.BONECP);
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -85,7 +72,7 @@ public class TestDataSourceProviderFactory {
     MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, BoneCPDataSourceProvider.BONECP);
     conf.set(BoneCPDataSourceProvider.BONECP + ".initSQL", "select 1 from dual");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -99,7 +86,7 @@ public class TestDataSourceProviderFactory {
     MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, BoneCPDataSourceProvider.BONECP);
     conf.set(BoneCPDataSourceProvider.BONECP + ".acquireRetryDelayInMs", "599");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -113,7 +100,7 @@ public class TestDataSourceProviderFactory {
     MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, BoneCPDataSourceProvider.BONECP);
     conf.set(BoneCPDataSourceProvider.BONECP + ".disableJMX", "true");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -128,7 +115,7 @@ public class TestDataSourceProviderFactory {
     // This is needed to prevent the HikariDataSource from trying to connect to the DB
     conf.set(HikariCPDataSourceProvider.HIKARI + ".initializationFailTimeout", "-1");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -142,7 +129,7 @@ public class TestDataSourceProviderFactory {
     conf.set(HikariCPDataSourceProvider.HIKARI + ".connectionInitSql", "select 1 from dual");
     conf.set(HikariCPDataSourceProvider.HIKARI + ".initializationFailTimeout", "-1");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -157,7 +144,7 @@ public class TestDataSourceProviderFactory {
     conf.set(HikariCPDataSourceProvider.HIKARI + ".idleTimeout", "59999");
     conf.set(HikariCPDataSourceProvider.HIKARI + ".initializationFailTimeout", "-1");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -172,7 +159,7 @@ public class TestDataSourceProviderFactory {
     conf.set(HikariCPDataSourceProvider.HIKARI + ".allowPoolSuspension", "false");
     conf.set(HikariCPDataSourceProvider.HIKARI + ".initializationFailTimeout", "-1");
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
@@ -185,64 +172,10 @@ public class TestDataSourceProviderFactory {
 
     MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, DbCPDataSourceProvider.DBCP);
 
-    DataSourceProvider dsp = DataSourceProviderFactory.getDataSourceProvider(conf);
+    DataSourceProvider dsp = DataSourceProviderFactory.tryGetDataSourceProviderOrNull(conf);
     Assert.assertNotNull(dsp);
 
     DataSource ds = dsp.create(conf);
     Assert.assertTrue(ds instanceof PoolingDataSource);
   }
-
-  @Test
-  public void testHasProviderSpecificConfigurationBonecp() throws SQLException {
-
-    MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, BoneCPDataSourceProvider.BONECP);
-
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("dbcp.dummyConf", "dummyValue");
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("hikaricp.dummyConf", "dummyValue");
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("bonecp.dummyConf", "dummyValue");
-    Assert.assertTrue(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-  }
-
-  @Test
-  public void testHasProviderSpecificConfigurationHikaricp() throws SQLException {
-
-    MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, HikariCPDataSourceProvider.HIKARI);
-
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("dbcp.dummyConf", "dummyValue");
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("bonecp.dummyConf", "dummyValue");
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("hikaricp.dummyConf", "dummyValue");
-    Assert.assertTrue(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-  }
-
-  @Test
-  public void testHasProviderSpecificConfigurationDbcp() throws SQLException {
-
-    MetastoreConf.setVar(conf, ConfVars.CONNECTION_POOLING_TYPE, DbCPDataSourceProvider.DBCP);
-
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("hikaricp.dummyConf", "dummyValue");
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("bonecp.dummyConf", "dummyValue");
-    Assert.assertFalse(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-    conf.set("dbcp.dummyConf", "dummyValue");
-    Assert.assertTrue(DataSourceProviderFactory.hasProviderSpecificConfigurations(conf));
-
-  }
 }