nrg4878 commented on a change in pull request #2037:
URL: https://github.com/apache/hive/pull/2037#discussion_r606340774



##########
File path: 
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/DataConnectorProviderFactory.java
##########
@@ -0,0 +1,101 @@
+package org.apache.hadoop.hive.metastore.dataconnector;
+
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static 
org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.*;
+
+public class DataConnectorProviderFactory {
+  Logger LOG = LoggerFactory.getLogger(DataConnectorProviderFactory.class);
+
+  private static Map<String, IDataConnectorProvider> cache = null;
+  private static DataConnectorProviderFactory singleton = null;
+  private static IHMSHandler hmsHandler = null;
+
+  private DataConnectorProviderFactory(IHMSHandler hmsHandler) {
+    cache = new HashMap<String, IDataConnectorProvider>();
+    this.hmsHandler = hmsHandler;
+  }
+
+  public static synchronized DataConnectorProviderFactory 
getInstance(IHMSHandler hmsHandler) {
+    if (singleton == null) {
+      singleton = new DataConnectorProviderFactory(hmsHandler);
+    }
+    return singleton;
+  }
+
+  public static synchronized IDataConnectorProvider 
getDataConnectorProvider(Database db) throws MetaException {
+    IDataConnectorProvider provider = null;
+    DataConnector connector = null;
+    if (db.getType() == DatabaseType.NATIVE) {
+      throw new MetaException("Database " + db.getName() + " is of type 
NATIVE, no connector available");
+    }
+
+    String scopedDb = (db.getRemote_dbname() != null) ? db.getRemote_dbname() 
: db.getName();
+    if (cache.containsKey(db.getConnector_name().toLowerCase())) {
+      provider = cache.get(db.getConnector_name().toLowerCase());
+      if (provider != null) {
+        provider.setScope(scopedDb);
+      }
+      return provider;
+    }
+
+    try {
+      connector = hmsHandler.get_dataconnector_core(db.getConnector_name());
+    } catch (NoSuchObjectException notexists) {
+      throw new MetaException("Data connector " + db.getConnector_name() + " 
associated with database "
+          + db.getName() + " does not exist");
+    }
+    String type = connector.getType();
+    switch (type) {
+    case DERBY_TYPE:
+    case MSSQL_TYPE:
+    case MYSQL_TYPE:
+    case ORACLE_TYPE:
+    case POSTGRES_TYPE:
+      try {
+        provider = JDBCConnectorProviderFactory.get(scopedDb, connector);
+      } catch (Exception e) {
+        throw new MetaException("Could not instantiate a provider for database 
" + db.getName());
+      }
+      break;
+    default:
+      throw new MetaException("Data connector of type " + connector.getType() 
+ " not implemented yet");
+    }
+    cache.put(connector.getName().toLowerCase(), provider);
+    return provider;
+  }
+
+  IDataConnectorProvider getDataConnectorProvider(String connectorName) {
+    if (connectorName == null || connectorName.isEmpty()) {
+      return null;
+    }
+
+    if (cache.containsKey(connectorName.toLowerCase() != null)) {
+      return cache.get(connectorName.toLowerCase());
+    }
+    return null;
+    // return getDataConnectorProvider();

Review comment:
       this method is currently not used at all, but removing it makes sense 
because without the Database object, the returned provided will not have a 
scope. So I think we can delete this method entirely.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to