This is an automated email from the ASF dual-hosted git repository.
gsaihemanth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new f61efe666f0 HIVE-27440: Improve data connector cache (#4418) (Butao
Zhang, Reviewed by Akshat Mathur, Naveen Gangam, Sai Hemanth Gantasala)
f61efe666f0 is described below
commit f61efe666f0e5432c87daeb0b8c6c5b4d2aeb47b
Author: Butao Zhang
AuthorDate: Fri Jul 14 05:28:59 2023 +0800
HIVE-27440: Improve data connector cache (#4418) (Butao Zhang, Reviewed by
Akshat Mathur, Naveen Gangam, Sai Hemanth Gantasala)
---
.../apache/hadoop/hive/metastore/HMSHandler.java | 2 +
.../DataConnectorProviderFactory.java | 68 +++---
2 files changed, 49 insertions(+), 21 deletions(-)
diff --git
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
index e0cc6486676..a8f888f3a40 100644
---
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
+++
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
@@ -1941,6 +1941,7 @@ public class HMSHandler extends FacebookBase implements
IHMSHandler {
ms.openTransaction();
ms.alterDataConnector(dcName, newDC);
+ DataConnectorProviderFactory.invalidateDataConnectorFromCache(dcName);
/*
if (!transactionalListeners.isEmpty()) {
@@ -1999,6 +2000,7 @@ public class HMSHandler extends FacebookBase implements
IHMSHandler {
RawStore ms = getMS();
try {
connector = getMS().getDataConnector(dcName);
+ DataConnectorProviderFactory.invalidateDataConnectorFromCache(dcName);
} catch (NoSuchObjectException e) {
if (!ifNotExists) {
throw new NoSuchObjectException("DataConnector " + dcName + " doesn't
exist");
diff --git
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/DataConnectorProviderFactory.java
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/DataConnectorProviderFactory.java
index a0cf8b50b78..6a24fb0f85d 100644
---
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/DataConnectorProviderFactory.java
+++
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/DataConnectorProviderFactory.java
@@ -18,29 +18,53 @@
package org.apache.hadoop.hive.metastore.dataconnector;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import com.github.benmanes.caffeine.cache.RemovalCause;
+import com.github.benmanes.caffeine.cache.RemovalListener;
+import java.util.concurrent.TimeUnit;
import org.apache.hadoop.hive.metastore.IHMSHandler;
import org.apache.hadoop.hive.metastore.api.DataConnector;
import org.apache.hadoop.hive.metastore.api.Database;
import org.apache.hadoop.hive.metastore.api.DatabaseType;
import org.apache.hadoop.hive.metastore.api.MetaException;
import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.checker.nullness.qual.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.HashMap;
-import java.util.Map;
-
-import static
org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.*;
+import static
org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.DERBY_TYPE;
+import static
org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.MSSQL_TYPE;
+import static
org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.MYSQL_TYPE;
+import static
org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.ORACLE_TYPE;
+import static
org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.POSTGRES_TYPE;
public class DataConnectorProviderFactory {
- Logger LOG = LoggerFactory.getLogger(DataConnectorProviderFactory.class);
+ static final Logger LOG =
LoggerFactory.getLogger(DataConnectorProviderFactory.class);
- private static Map cache = null;
+ private static Cache dataConnectorCache =
null;
private static DataConnectorProviderFactory singleton = null;
private static IHMSHandler hmsHandler = null;
+ private static class CacheRemoveListener implements RemovalListener {
+@Override
+public void onRemoval(@Nullable String dcName, @Nullable
IDataConnectorProvider dataConnectorProvider,
+ @NonNull RemovalCause cause) {
+ try {
+LOG.info("Closing dataConnectorProvider :{}", dcName);
+dataConnectorProvider.close();
+ } catch