HIVE-17980 Move HiveMetaStoreClient plus a few remaining classes. This closes #272...
authorAlan Gates <gates@hortonworks.com>
Wed, 6 Dec 2017 21:19:00 +0000 (13:19 -0800)
committerAlan Gates <gates@hortonworks.com>
Wed, 6 Dec 2017 21:19:00 +0000 (13:19 -0800)
124 files changed:
accumulo-handler/src/java/org/apache/hadoop/hive/accumulo/AccumuloStorageHandler.java
druid-handler/src/java/org/apache/hadoop/hive/druid/DruidStorageHandler.java
hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseMetaHook.java
hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseStorageHandler.java
hcatalog/core/pom.xml
hcatalog/core/src/main/java/org/apache/hive/hcatalog/common/HiveClientCache.java
hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/FileOutputCommitterContainer.java
hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/FileOutputFormatContainer.java
hcatalog/core/src/main/java/org/apache/hive/hcatalog/mapreduce/InternalUtil.java
hcatalog/core/src/test/java/org/apache/hive/hcatalog/cli/TestPermsGrp.java
hcatalog/core/src/test/java/org/apache/hive/hcatalog/mapreduce/TestHCatPartitionPublish.java
hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java
hcatalog/streaming/src/java/org/apache/hive/hcatalog/streaming/DelimitedInputWriter.java
hcatalog/streaming/src/java/org/apache/hive/hcatalog/streaming/StrictJsonWriter.java
hcatalog/streaming/src/java/org/apache/hive/hcatalog/streaming/StrictRegexWriter.java
hcatalog/webhcat/java-client/pom.xml
hcatalog/webhcat/java-client/src/main/java/org/apache/hive/hcatalog/api/HCatClientHMSImpl.java
hcatalog/webhcat/svr/pom.xml
itests/hcatalog-unit/pom.xml
itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/hbase/ManyMiniCluster.java
itests/hive-blobstore/pom.xml
itests/hive-minikdc/pom.xml
itests/hive-unit-hadoop2/pom.xml
itests/hive-unit/pom.xml
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/AbstractTestAuthorizationApiAuthorizer.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestFilterHooks.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStoreWithEnvironmentContext.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMarkPartitionRemote.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreAuthorization.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEndFunctionListener.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEventListener.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEventListenerOnlyOnCommit.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreInitListener.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreListenersError.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreMetrics.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestRemoteHiveMetaStore.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestRemoteHiveMetaStoreIpAddress.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestRetryingHMSHandler.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenarios.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/TestMetastoreAuthorizationProvider.java
itests/hive-unit/src/test/java/org/apache/hadoop/hive/serde2/TestSerdeWithFieldComments.java
itests/hive-unit/src/test/java/org/apache/hive/service/cli/thrift/TestThriftCliServiceMessageSize.java
itests/qtest-accumulo/pom.xml
itests/qtest-spark/pom.xml
itests/qtest/pom.xml
itests/util/pom.xml
llap-server/pom.xml
metastore/pom.xml
metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreUtils.java [new file with mode: 0644]
metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java [deleted file]
metastore/src/java/org/apache/hadoop/hive/metastore/SerDeStorageSchemaReader.java
ql/pom.xml
ql/src/java/org/apache/hadoop/hive/ql/Driver.java
ql/src/java/org/apache/hadoop/hive/ql/QueryState.java
ql/src/java/org/apache/hadoop/hive/ql/exec/ArchiveUtils.java
ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java
ql/src/java/org/apache/hadoop/hive/ql/exec/MoveTask.java
ql/src/java/org/apache/hadoop/hive/ql/exec/StatsTask.java
ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
ql/src/java/org/apache/hadoop/hive/ql/exec/tez/DagUtils.java
ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java
ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
ql/src/java/org/apache/hadoop/hive/ql/metadata/Partition.java
ql/src/java/org/apache/hadoop/hive/ql/metadata/SessionHiveMetaStoreClient.java
ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java
ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/TextMetaDataFormatter.java
ql/src/java/org/apache/hadoop/hive/ql/optimizer/AbstractBucketJoinProc.java
ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketingSortingReduceSinkOptimizer.java
ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java
ql/src/java/org/apache/hadoop/hive/ql/optimizer/StatsOptimizer.java
ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SamplingOptimizer.java
ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
ql/src/java/org/apache/hadoop/hive/ql/parse/ExportSemanticAnalyzer.java
ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java
ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java
ql/src/java/org/apache/hadoop/hive/ql/plan/FileSinkDesc.java
ql/src/java/org/apache/hadoop/hive/ql/plan/LoadTableDesc.java
ql/src/java/org/apache/hadoop/hive/ql/plan/PartitionDesc.java
ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/AuthorizationPreEventListener.java
ql/src/java/org/apache/hadoop/hive/ql/stats/BasicStatsTask.java
ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Initiator.java
ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
service/pom.xml
service/src/java/org/apache/hive/service/cli/thrift/EmbeddedThriftBinaryCLIService.java
service/src/java/org/apache/hive/service/server/HiveServer2.java
service/src/test/org/apache/hive/service/cli/thrift/ThriftCliServiceTestWithCookie.java
standalone-metastore/pom.xml
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ColumnType.java
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java with 93% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java with 99% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/RawStoreProxy.java
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/RetryingMetaStoreClient.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/RetryingMetaStoreClient.java with 84% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/EventUtils.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/messaging/EventUtils.java with 97% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/event/filters/AndFilter.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/messaging/event/filters/AndFilter.java with 99% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/event/filters/BasicFilter.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/messaging/event/filters/BasicFilter.java with 99% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/event/filters/DatabaseAndTableFilter.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/messaging/event/filters/DatabaseAndTableFilter.java with 99% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/event/filters/EventBoundaryFilter.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/messaging/event/filters/EventBoundaryFilter.java with 99% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/event/filters/MessageFormatFilter.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/messaging/event/filters/MessageFormatFilter.java with 99% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/tools/HiveMetaTool.java [moved from metastore/src/java/org/apache/hadoop/hive/metastore/tools/HiveMetaTool.java with 95% similarity]
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/utils/FileUtils.java
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/utils/MetaStoreUtils.java
standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/utils/SecurityUtils.java
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/AlternateFailurePreListener.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/AlternateFailurePreListener.java with 99% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyEndFunctionListener.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/DummyEndFunctionListener.java with 95% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyListener.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/DummyListener.java with 99% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyMetaStoreInitListener.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/DummyMetaStoreInitListener.java with 85% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyPreListener.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/DummyPreListener.java with 98% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java with 99% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/InjectableBehaviourObjectStore.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/InjectableBehaviourObjectStore.java with 99% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/IpAddressListener.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/IpAddressListener.java with 98% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/MetaStoreTestUtils.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/MetaStoreTestUtils.java with 85% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/MockPartitionExpressionForMetastore.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/MockPartitionExpressionForMetastore.java with 96% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStoreGetMetaConf.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStoreGetMetaConf.java with 66% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStorePartitionSpecs.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStorePartitionSpecs.java with 90% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStoreTimeout.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStoreTimeout.java with 77% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreConnectionUrlHook.java
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestOldSchema.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/TestOldSchema.java with 91% similarity]
standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/VerifyingObjectStore.java [moved from metastore/src/test/org/apache/hadoop/hive/metastore/VerifyingObjectStore.java with 99% similarity]

index 5391a99..872f12b 100644 (file)
@@ -32,10 +32,10 @@ import org.apache.hadoop.hive.accumulo.serde.AccumuloIndexParameters;
 import org.apache.hadoop.hive.accumulo.serde.AccumuloSerDe;
 import org.apache.hadoop.hive.accumulo.serde.AccumuloSerDeParameters;
 import org.apache.hadoop.hive.metastore.HiveMetaHook;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.metadata.DefaultStorageHandler;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.HiveStoragePredicateHandler;
index 8117633..fe66a44 100644 (file)
@@ -42,10 +42,10 @@ import org.apache.hadoop.hive.druid.security.KerberosHttpClient;
 import org.apache.hadoop.hive.druid.serde.DruidSerDe;
 import org.apache.hadoop.hive.metastore.DefaultHiveMetaHook;
 import org.apache.hadoop.hive.metastore.HiveMetaHook;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.HiveStorageHandler;
 import org.apache.hadoop.hive.ql.plan.TableDesc;
index 9fe07af..cd19a4f 100644 (file)
@@ -28,9 +28,9 @@ import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hive.metastore.HiveMetaHook;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.util.StringUtils;
 
 import java.io.Closeable;
index 0a3788f..276ffcf 100644 (file)
@@ -42,6 +42,7 @@ import org.apache.hadoop.hive.hbase.ColumnMappings.ColumnMapping;
 import org.apache.hadoop.hive.metastore.HiveMetaHook;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
 import org.apache.hadoop.hive.ql.index.IndexPredicateAnalyzer;
 import org.apache.hadoop.hive.ql.index.IndexSearchCondition;
index 94e9fbe..560e438 100644 (file)
@@ -69,7 +69,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
index c1b63d9..3569ffc 100644 (file)
@@ -76,7 +76,7 @@ class HiveClientCache {
 
   // Since HiveMetaStoreClient is not threadsafe, hive clients are not  shared across threads.
   // Thread local variable containing each thread's unique ID, is used as one of the keys for the cache
-  // causing each thread to get a different client even if the hiveConf is same.
+  // causing each thread to get a different client even if the conf is same.
   private static final ThreadLocal<Integer> threadId =
     new ThreadLocal<Integer>() {
       @Override
index 04d78ee..39a4d2d 100644 (file)
@@ -38,7 +38,6 @@ import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.IMetaStoreClient;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.InvalidOperationException;
@@ -610,7 +609,8 @@ class FileOutputCommitterContainer extends OutputCommitterContainer {
           }
 
         } else {
-          if(immutable && fs.exists(finalOutputPath) && !MetaStoreUtils.isDirEmpty(fs, finalOutputPath)) {
+          if(immutable && fs.exists(finalOutputPath) &&
+              !org.apache.hadoop.hive.metastore.utils.FileUtils.isDirEmpty(fs, finalOutputPath)) {
 
             throw new HCatException(ErrorType.ERROR_DUPLICATE_PARTITION, "Data already exists in " + finalOutputPath
                 + ", duplicate publish not possible.");
index 3ecb608..10eda77 100644 (file)
@@ -23,7 +23,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.IMetaStoreClient;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.utils.FileUtils;
 import org.apache.hadoop.hive.ql.metadata.HiveStorageHandler;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.MetaException;
@@ -202,7 +202,7 @@ class FileOutputFormatContainer extends OutputFormatContainer {
       Path tablePath = new Path(table.getTTable().getSd().getLocation());
       FileSystem fs = tablePath.getFileSystem(context.getConfiguration());
 
-      if (!MetaStoreUtils.isDirEmpty(fs,tablePath)){
+      if (!FileUtils.isDirEmpty(fs,tablePath)){
         throw new HCatException(ErrorType.ERROR_NON_EMPTY_TABLE,
             table.getDbName() + "." + table.getTableName());
       }
index 8fd676f..6c4c5e1 100644 (file)
 package org.apache.hive.hcatalog.mapreduce;
 
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Partition;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.Deserializer;
index e5aa2b8..bce246f 100644 (file)
@@ -32,7 +32,6 @@ import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
 import org.apache.hadoop.hive.metastore.MetaStoreTestUtils;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.AlreadyExistsException;
 import org.apache.hadoop.hive.metastore.api.Database;
index 6711a3e..091efb6 100644 (file)
@@ -37,7 +37,6 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
 import org.apache.hadoop.hive.metastore.MetaStoreTestUtils;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.SerDeInfo;
index ec5d1c4..67fc34d 100644 (file)
@@ -27,7 +27,6 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.PathFilter;
-import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.HiveMetaStore.HMSHandler;
 import org.apache.hadoop.hive.metastore.MetaStoreEventListenerConstants;
 import org.apache.hadoop.hive.metastore.RawStore;
@@ -46,6 +45,8 @@ import org.apache.hadoop.hive.metastore.api.SQLNotNullConstraint;
 import org.apache.hadoop.hive.metastore.api.SQLPrimaryKey;
 import org.apache.hadoop.hive.metastore.api.SQLUniqueConstraint;
 import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
 import org.apache.hadoop.hive.metastore.events.AddForeignKeyEvent;
 import org.apache.hadoop.hive.metastore.events.AddIndexEvent;
 import org.apache.hadoop.hive.metastore.events.AddNotNullConstraintEvent;
@@ -92,27 +93,22 @@ public class DbNotificationListener extends TransactionalMetaStoreEventListener
   private static final Logger LOG = LoggerFactory.getLogger(DbNotificationListener.class.getName());
   private static CleanerThread cleaner = null;
 
-  // This is the same object as super.conf, but it's convenient to keep a copy of it as a
-  // HiveConf rather than a Configuration.
-  private HiveConf hiveConf;
+  private Configuration conf;
   private MessageFactory msgFactory;
 
-  private synchronized void init(HiveConf conf) throws MetaException {
+  private synchronized void init(Configuration conf) throws MetaException {
     if (cleaner == null) {
       cleaner =
           new CleanerThread(conf, RawStoreProxy.getProxy(conf, conf,
-              conf.getVar(HiveConf.ConfVars.METASTORE_RAW_STORE_IMPL), 999999));
+              MetastoreConf.getVar(conf, ConfVars.RAW_STORE_IMPL), 999999));
       cleaner.start();
     }
   }
 
   public DbNotificationListener(Configuration config) throws MetaException {
     super(config);
-    // The code in MetastoreUtils.getMetaStoreListeners() that calls this looks for a constructor
-    // with a Configuration parameter, so we have to declare config as Configuration.  But it
-    // actually passes a HiveConf, which we need.  So we'll do this ugly down cast.
-    hiveConf = (HiveConf)config;
-    init(hiveConf);
+    conf = config;
+    init(conf);
     msgFactory = MessageFactory.getInstance();
   }
 
@@ -123,14 +119,17 @@ public class DbNotificationListener extends TransactionalMetaStoreEventListener
   @Override
   public void onConfigChange(ConfigChangeEvent tableEvent) throws MetaException {
     String key = tableEvent.getKey();
-    if (key.equals(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL.toString())) {
-      // This weirdness of setting it in our hiveConf and then reading back does two things.
+    if (key.equals(ConfVars.EVENT_DB_LISTENER_TTL.toString()) ||
+        key.equals(ConfVars.EVENT_DB_LISTENER_TTL.getHiveName())) {
+      // This weirdness of setting it in our conf and then reading back does two things.
       // One, it handles the conversion of the TimeUnit.  Two, it keeps the value around for
       // later in case we need it again.
-      hiveConf.set(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL.name(),
-          tableEvent.getNewValue());
-      cleaner.setTimeToLive(hiveConf.getTimeVar(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL,
-          TimeUnit.SECONDS));
+      long time = MetastoreConf.convertTimeStr(tableEvent.getNewValue(), TimeUnit.SECONDS,
+          TimeUnit.SECONDS);
+      MetastoreConf.setTimeVar(getConf(), MetastoreConf.ConfVars.EVENT_DB_LISTENER_TTL, time,
+          TimeUnit.SECONDS);
+      cleaner.setTimeToLive(MetastoreConf.getTimeVar(getConf(),
+          MetastoreConf.ConfVars.EVENT_DB_LISTENER_TTL, TimeUnit.SECONDS));
     }
   }
 
@@ -205,7 +204,7 @@ public class DbNotificationListener extends TransactionalMetaStoreEventListener
       try {
         if (locString != null) {
           Path loc = new Path(locString);
-          fs = loc.getFileSystem(hiveConf);
+          fs = loc.getFileSystem(conf);
           files = fs.listStatus(loc, VALID_FILES_FILTER);
         }
       } catch (IOException e) {
@@ -573,7 +572,7 @@ public class DbNotificationListener extends TransactionalMetaStoreEventListener
     event.setMessageFormat(msgFactory.getMessageFormat());
     LOG.debug("DbNotificationListener: Processing : {}:{}", event.getEventId(),
         event.getMessage());
-    HMSHandler.getMSForConf(hiveConf).addNotificationEvent(event);
+    HMSHandler.getMSForConf(conf).addNotificationEvent(event);
 
       // Set the DB_NOTIFICATION_EVENT_ID for future reference by other listeners.
       if (event.isSetEventId()) {
@@ -588,10 +587,10 @@ public class DbNotificationListener extends TransactionalMetaStoreEventListener
     private int ttl;
     static private long sleepTime = 60000;
 
-    CleanerThread(HiveConf conf, RawStore rs) {
+    CleanerThread(Configuration conf, RawStore rs) {
       super("CleanerThread");
       this.rs = rs;
-      setTimeToLive(conf.getTimeVar(HiveConf.ConfVars.METASTORE_EVENT_DB_LISTENER_TTL,
+      setTimeToLive(MetastoreConf.getTimeVar(conf, ConfVars.EVENT_DB_LISTENER_TTL,
           TimeUnit.SECONDS));
       setDaemon(true);
     }
index 58fba4f..bd73f29 100644 (file)
@@ -20,11 +20,10 @@ package org.apache.hive.hcatalog.streaming;
 
 
 import com.google.common.annotations.VisibleForTesting;
-import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.serde2.AbstractSerDe;
index 13756e2..7cfddfa 100644 (file)
@@ -19,8 +19,8 @@
 package org.apache.hive.hcatalog.streaming;
 
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.serde2.AbstractSerDe;
 import org.apache.hadoop.hive.serde2.SerDeException;
 import org.apache.hadoop.hive.serde2.SerDeUtils;
index 78987ab..736893b 100644 (file)
@@ -25,9 +25,9 @@ import java.util.Properties;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.AbstractSerDe;
 import org.apache.hadoop.hive.serde2.RegexSerDe;
index ea51854..5693157 100644 (file)
@@ -76,7 +76,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
index 17b9d03..5f7128d 100644 (file)
@@ -29,7 +29,6 @@ import javax.annotation.Nullable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hive.common.ObjectPair;
 import org.apache.hadoop.hive.common.classification.InterfaceAudience;
 import org.apache.hadoop.hive.common.classification.InterfaceStability;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -52,6 +51,7 @@ import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
 import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.metastore.api.UnknownDBException;
 import org.apache.hadoop.hive.metastore.api.UnknownTableException;
+import org.apache.hadoop.hive.metastore.utils.ObjectPair;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
 import org.apache.hadoop.hive.ql.exec.SerializationUtilities;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
@@ -584,8 +584,7 @@ public class HCatClientHMSImpl extends HCatClient {
       throws SemanticException, TException {
     LOG.info("HCatClient: Dropping partitions using partition-predicate Expressions.");
     ExprNodeGenericFuncDesc partitionExpression = new ExpressionBuilder(table, partitionSpec).build();
-    ObjectPair<Integer, byte[]> serializedPartitionExpression =
-        new ObjectPair<Integer, byte[]>(partitionSpec.size(),
+    ObjectPair<Integer, byte[]> serializedPartitionExpression = new ObjectPair<>(partitionSpec.size(),
             SerializationUtilities.serializeExpressionToKryo(partitionExpression));
     hmsClient.dropPartitions(table.getDbName(), table.getTableName(), Arrays.asList(serializedPartitionExpression),
         deleteData && !isExternal(table),  // Delete data?
index 6bceee1..a22bc22 100644 (file)
     <!-- test inter-project -->
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
index 2a2f845..433147a 100644 (file)
@@ -98,7 +98,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
index ad44bc2..2fe4045 100644 (file)
@@ -310,8 +310,8 @@ public class ManyMiniCluster {
     System.setProperty("derby.stream.error.file", derbyLogFile.getPath());
 
 
-//    Driver driver = new Driver(hiveConf);
-//    SessionState.start(new CliSessionState(hiveConf));
+//    Driver driver = new Driver(conf);
+//    SessionState.start(new CliSessionState(conf));
 
     hiveMetaStoreClient = new HiveMetaStoreClient(hiveConf);
   }
index d1c732d..fadb4f2 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <classifier>tests</classifier>
       <scope>test</scope>
index 689e679..337535a 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
       <classifier>tests</classifier>
index f862dac..ebf81c9 100644 (file)
@@ -76,7 +76,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <classifier>tests</classifier>
     </dependency>
index 3a435a8..73a454f 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <classifier>tests</classifier>
     </dependency>
index bd8332c..f8ed419 100644 (file)
@@ -32,6 +32,7 @@ import org.apache.hadoop.hive.metastore.api.PrincipalType;
 import org.apache.hadoop.hive.metastore.api.PrivilegeBag;
 import org.apache.hadoop.hive.metastore.api.Role;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly;
 import org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener;
 import org.junit.Test;
index 8366fab..91fc706 100644 (file)
@@ -37,6 +37,7 @@ import org.apache.hadoop.hive.metastore.api.Partition;
 import org.apache.hadoop.hive.metastore.api.PartitionSpec;
 import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.junit.AfterClass;
@@ -44,8 +45,11 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import com.google.common.collect.Lists;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class TestFilterHooks {
+  private static final Logger LOG = LoggerFactory.getLogger(TestFilterHooks.class);
 
   public static class DummyMetaStoreFilterHookImpl extends DefaultMetaStoreFilterHookImpl {
     public static boolean blockResults = false;
index 98dad7a..f344c47 100644 (file)
@@ -81,6 +81,7 @@ import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.metastore.api.Type;
 import org.apache.hadoop.hive.metastore.api.UnknownDBException;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.io.HiveInputFormat;
 import org.apache.hadoop.hive.ql.io.HiveOutputFormat;
@@ -1270,7 +1271,7 @@ public abstract class TestHiveMetaStore extends TestCase {
           new FieldSchema("name", serdeConstants.STRING_TYPE_NAME, ""));
       fam.getFields().add(
           new FieldSchema("members",
-              MetaStoreUtils.getListType(typ1.getName()), ""));
+              ColumnType.getListType(typ1.getName()), ""));
 
       ret = client.createType(fam);
       assertTrue("Unable to create type " + fam.getName(), ret);
index 5267dca..c29a34d 100644 (file)
@@ -43,6 +43,7 @@ import org.apache.hadoop.hive.metastore.events.DropPartitionEvent;
 import org.apache.hadoop.hive.metastore.events.DropTableEvent;
 import org.apache.hadoop.hive.metastore.events.ListenerEvent;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.io.HiveInputFormat;
 import org.apache.hadoop.hive.ql.io.HiveOutputFormat;
 import org.apache.hadoop.hive.ql.session.SessionState;
index e3c9a4e..c541193 100644 (file)
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hive.metastore;
 
 import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 
 public class TestMarkPartitionRemote extends TestMarkPartition {
 
index 1bf76b5..e7b899b 100644 (file)
@@ -33,6 +33,7 @@ import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 
 
 public class TestMetaStoreAuthorization extends TestCase {
index 3bb340e..e44cfca 100644 (file)
@@ -28,6 +28,7 @@ import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
 import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 
 /**
  * TestMetaStoreEventListener. Test case for
index 7219774..e803106 100644 (file)
@@ -64,6 +64,7 @@ import org.apache.hadoop.hive.metastore.events.PreDropTableEvent;
 import org.apache.hadoop.hive.metastore.events.PreEventContext;
 import org.apache.hadoop.hive.metastore.events.PreLoadPartitionDoneEvent;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.processors.SetProcessor;
 import org.apache.hadoop.hive.ql.session.SessionState;
index a905324..9623fed 100644 (file)
@@ -26,6 +26,7 @@ import org.apache.hadoop.hive.cli.CliSessionState;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.events.ListenerEvent;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.session.SessionState;
 
index 3d58819..4982313 100644 (file)
@@ -23,6 +23,7 @@ import junit.framework.TestCase;
 import org.apache.hadoop.hive.cli.CliSessionState;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.session.SessionState;
 
index b4d258c..11ebf4d 100644 (file)
@@ -23,6 +23,7 @@ import junit.framework.TestCase;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 
 /**
  * Test for unwrapping InvocationTargetException, which is thrown from
index 9d241a8..6f5a963 100644 (file)
@@ -22,6 +22,7 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.metrics.Metrics;
 import org.apache.hadoop.hive.metastore.metrics.MetricsConstants;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.junit.Assert;
index d4a809f..ec84e66 100644 (file)
@@ -21,6 +21,7 @@ package org.apache.hadoop.hive.metastore;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 
 
 public class TestRemoteHiveMetaStore extends TestHiveMetaStore {
index 9ba1d75..c7c35f3 100644 (file)
@@ -24,6 +24,7 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.util.StringUtils;
 
 /**
index 2b7c5a1..dfd80bc 100644 (file)
@@ -34,6 +34,7 @@ import org.apache.hadoop.hive.metastore.api.SerDeInfo;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
 import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.io.HiveInputFormat;
 import org.apache.hadoop.hive.ql.io.HiveOutputFormat;
 import org.apache.hadoop.hive.serde.serdeConstants;
index 5854116..55acd1d 100644 (file)
@@ -48,6 +48,7 @@ import org.apache.hadoop.hive.metastore.messaging.event.filters.AndFilter;
 import org.apache.hadoop.hive.metastore.messaging.event.filters.DatabaseAndTableFilter;
 import org.apache.hadoop.hive.metastore.messaging.event.filters.EventBoundaryFilter;
 import org.apache.hadoop.hive.metastore.messaging.event.filters.MessageFormatFilter;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.CommandNeedRetryException;
 import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.exec.repl.ReplDumpWork;
index 871cf3d..edb46fd 100644 (file)
@@ -48,6 +48,8 @@ import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.shims.Utils;
 import org.apache.hadoop.security.UserGroupInformation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * TestHiveMetastoreAuthorizationProvider. Test case for
@@ -65,6 +67,8 @@ import org.apache.hadoop.security.UserGroupInformation;
  * authorization providers like StorageBasedAuthorizationProvider
  */
 public class TestMetastoreAuthorizationProvider extends TestCase {
+  private static final Logger LOG = LoggerFactory.getLogger(TestMetastoreAuthorizationProvider.class);
+
   protected HiveConf clientHiveConf;
   protected HiveMetaStoreClient msc;
   protected Driver driver;
index bb96a89..63f48f0 100644 (file)
@@ -18,7 +18,7 @@
 package org.apache.hadoop.hive.serde2;
 
 import junit.framework.TestCase;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
@@ -61,7 +61,7 @@ public class TestSerdeWithFieldComments extends TestCase {
     Deserializer mockDe = mock(Deserializer.class);
     when(mockDe.getObjectInspector()).thenReturn(mockSOI);
     List<FieldSchema> result =
-        MetaStoreUtils.getFieldsFromDeserializer("testTable", mockDe);
+        HiveMetaStoreUtils.getFieldsFromDeserializer("testTable", mockDe);
 
     assertEquals(2, result.size());
     assertEquals("first", result.get(0).getName());
index 0948efc..147f53b 100644 (file)
  */
 package org.apache.hive.service.cli.thrift;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
+
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.MetaStoreTestUtils;
@@ -28,13 +35,6 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.Statement;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
 public class TestThriftCliServiceMessageSize {
   protected static int port;
   protected static String host = "localhost";
index 29ea428..eae436b 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <classifier>tests</classifier>
       <scope>test</scope>
index b9b17b6..4b25223 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <classifier>tests</classifier>
       <scope>test</scope>
index 7f7d5f3..1ac6b30 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <classifier>tests</classifier>
       <scope>test</scope>
index 16118b5..d311507 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
     </dependency>
index 176110d..61ccbd4 100644 (file)
     <!-- test intra-project -->
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
index 12c01b6..21c607f 100644 (file)
     <plugins>
       <!-- plugins are always listed in sorted order by groupId, artifectId -->
       <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>build-helper-maven-plugin</artifactId>
         <executions>
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreUtils.java
new file mode 100644 (file)
index 0000000..a66c135
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.metastore;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.serde2.Deserializer;
+import org.apache.hadoop.hive.serde2.SerDeException;
+import org.apache.hadoop.hive.serde2.SerDeUtils;
+import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.MapObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
+import org.apache.hadoop.hive.serde2.objectinspector.StructField;
+import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
+import org.apache.hive.common.util.ReflectionUtil;
+
+public class HiveMetaStoreUtils {
+
+  protected static final Logger LOG = LoggerFactory.getLogger("hive.log");
+
+  /**
+   * getDeserializer
+   *
+   * Get the Deserializer for a table.
+   *
+   * @param conf
+   *          - hadoop config
+   * @param table
+   *          the table
+   * @return
+   *   Returns instantiated deserializer by looking up class name of deserializer stored in
+   *   storage descriptor of passed in table. Also, initializes the deserializer with schema
+   *   of table.
+   * @exception MetaException
+   *              if any problems instantiating the Deserializer
+   *
+   *              todo - this should move somewhere into serde.jar
+   *
+   */
+  static public Deserializer getDeserializer(Configuration conf,
+      org.apache.hadoop.hive.metastore.api.Table table, boolean skipConfError) throws
+          MetaException {
+    String lib = table.getSd().getSerdeInfo().getSerializationLib();
+    if (lib == null) {
+      return null;
+    }
+    return getDeserializer(conf, table, skipConfError, lib);
+  }
+
+  public static Deserializer getDeserializer(Configuration conf,
+      org.apache.hadoop.hive.metastore.api.Table table, boolean skipConfError,
+      String lib) throws MetaException {
+    try {
+      Deserializer deserializer = ReflectionUtil.newInstance(conf.getClassByName(lib).
+              asSubclass(Deserializer.class), conf);
+      if (skipConfError) {
+        SerDeUtils.initializeSerDeWithoutErrorCheck(deserializer, conf,
+                MetaStoreUtils.getTableMetadata(table), null);
+      } else {
+        SerDeUtils.initializeSerDe(deserializer, conf, MetaStoreUtils.getTableMetadata(table), null);
+      }
+      return deserializer;
+    } catch (RuntimeException e) {
+      throw e;
+    } catch (Throwable e) {
+      LOG.error("error in initSerDe: " + e.getClass().getName() + " "
+          + e.getMessage(), e);
+      throw new MetaException(e.getClass().getName() + " " + e.getMessage());
+    }
+  }
+
+  public static Class<? extends Deserializer> getDeserializerClass(
+      Configuration conf, org.apache.hadoop.hive.metastore.api.Table table) throws Exception {
+    String lib = table.getSd().getSerdeInfo().getSerializationLib();
+    return lib == null ? null : conf.getClassByName(lib).asSubclass(Deserializer.class);
+  }
+
+  /**
+   * getDeserializer
+   *
+   * Get the Deserializer for a partition.
+   *
+   * @param conf
+   *          - hadoop config
+   * @param part
+   *          the partition
+   * @param table the table
+   * @return
+   *   Returns instantiated deserializer by looking up class name of deserializer stored in
+   *   storage descriptor of passed in partition. Also, initializes the deserializer with
+   *   schema of partition.
+   * @exception MetaException
+   *              if any problems instantiating the Deserializer
+   *
+   */
+  static public Deserializer getDeserializer(Configuration conf,
+      org.apache.hadoop.hive.metastore.api.Partition part,
+      org.apache.hadoop.hive.metastore.api.Table table) throws MetaException {
+    String lib = part.getSd().getSerdeInfo().getSerializationLib();
+    try {
+      Deserializer deserializer = ReflectionUtil.newInstance(conf.getClassByName(lib).
+        asSubclass(Deserializer.class), conf);
+      SerDeUtils.initializeSerDe(deserializer, conf, MetaStoreUtils.getTableMetadata(table),
+                                 MetaStoreUtils.getPartitionMetadata(part, table));
+      return deserializer;
+    } catch (RuntimeException e) {
+      throw e;
+    } catch (Throwable e) {
+      LOG.error("error in initSerDe: " + e.getClass().getName() + " "
+          + e.getMessage(), e);
+      throw new MetaException(e.getClass().getName() + " " + e.getMessage());
+    }
+  }
+
+  /**
+   * @param tableName name of the table
+   * @param deserializer deserializer to use
+   * @return the list of fields
+   * @throws SerDeException if the serde throws an exception
+   * @throws MetaException if one of the fields or types in the table is invalid
+   */
+  public static List<FieldSchema> getFieldsFromDeserializer(String tableName,
+      Deserializer deserializer) throws SerDeException, MetaException {
+    ObjectInspector oi = deserializer.getObjectInspector();
+    String[] names = tableName.split("\\.");
+    String last_name = names[names.length - 1];
+    for (int i = 1; i < names.length; i++) {
+
+      if (oi instanceof StructObjectInspector) {
+        StructObjectInspector soi = (StructObjectInspector) oi;
+        StructField sf = soi.getStructFieldRef(names[i]);
+        if (sf == null) {
+          throw new MetaException("Invalid Field " + names[i]);
+        } else {
+          oi = sf.getFieldObjectInspector();
+        }
+      } else if (oi instanceof ListObjectInspector
+          && names[i].equalsIgnoreCase("$elem$")) {
+        ListObjectInspector loi = (ListObjectInspector) oi;
+        oi = loi.getListElementObjectInspector();
+      } else if (oi instanceof MapObjectInspector
+          && names[i].equalsIgnoreCase("$key$")) {
+        MapObjectInspector moi = (MapObjectInspector) oi;
+        oi = moi.getMapKeyObjectInspector();
+      } else if (oi instanceof MapObjectInspector
+          && names[i].equalsIgnoreCase("$value$")) {
+        MapObjectInspector moi = (MapObjectInspector) oi;
+        oi = moi.getMapValueObjectInspector();
+      } else {
+        throw new MetaException("Unknown type for " + names[i]);
+      }
+    }
+
+    ArrayList<FieldSchema> str_fields = new ArrayList<>();
+    // rules on how to recurse the ObjectInspector based on its type
+    if (oi.getCategory() != Category.STRUCT) {
+      str_fields.add(new FieldSchema(last_name, oi.getTypeName(),
+          FROM_SERIALIZER));
+    } else {
+      List<? extends StructField> fields = ((StructObjectInspector) oi)
+          .getAllStructFieldRefs();
+      for (int i = 0; i < fields.size(); i++) {
+        StructField structField = fields.get(i);
+        String fieldName = structField.getFieldName();
+        String fieldTypeName = structField.getFieldObjectInspector().getTypeName();
+        String fieldComment = determineFieldComment(structField.getFieldComment());
+
+        str_fields.add(new FieldSchema(fieldName, fieldTypeName, fieldComment));
+      }
+    }
+    return str_fields;
+  }
+
+  private static final String FROM_SERIALIZER = "from deserializer";
+  private static String determineFieldComment(String comment) {
+    return (comment == null) ? FROM_SERIALIZER : comment;
+  }
+
+  /**
+   * Convert TypeInfo to FieldSchema.
+   */
+  public static FieldSchema getFieldSchemaFromTypeInfo(String fieldName,
+      TypeInfo typeInfo) {
+    return new FieldSchema(fieldName, typeInfo.getTypeName(),
+        "generated by TypeInfoUtils.getFieldSchemaFromTypeInfo");
+  }
+
+}
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
deleted file mode 100644 (file)
index 15bd803..0000000
+++ /dev/null
@@ -1,1095 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.hive.metastore;
-
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import com.google.common.base.Predicates;
-import com.google.common.collect.Maps;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
-import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.fs.PathFilter;
-import org.apache.hadoop.hive.common.JavaUtils;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.HiveMetaStore.HMSHandler;
-import org.apache.hadoop.hive.metastore.api.EnvironmentContext;
-import org.apache.hadoop.hive.metastore.api.FieldSchema;
-import org.apache.hadoop.hive.metastore.api.MetaException;
-import org.apache.hadoop.hive.metastore.api.Partition;
-import org.apache.hadoop.hive.metastore.api.Table;
-import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
-import org.apache.hadoop.hive.serde.serdeConstants;
-import org.apache.hadoop.hive.serde2.Deserializer;
-import org.apache.hadoop.hive.serde2.SerDeException;
-import org.apache.hadoop.hive.serde2.SerDeUtils;
-import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
-import org.apache.hadoop.hive.serde2.objectinspector.MapObjectInspector;
-import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
-import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
-import org.apache.hadoop.hive.serde2.objectinspector.StructField;
-import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
-import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
-import org.apache.hadoop.security.SaslRpcServer;
-import org.apache.hive.common.util.ReflectionUtil;
-
-public class MetaStoreUtils {
-
-  private static final Logger LOG = LoggerFactory.getLogger("hive.log");
-
-  // Right now we only support one special character '/'.
-  // More special characters can be added accordingly in the future.
-  // NOTE:
-  // If the following array is updated, please also be sure to update the
-  // configuration parameter documentation
-  // HIVE_SUPPORT_SPECICAL_CHARACTERS_IN_TABLE_NAMES in HiveConf as well.
-  public static final char[] specialCharactersInTableNames = new char[] { '/' };
-
-  public static void populateQuickStats(FileStatus[] fileStatus, Map<String, String> params) {
-    org.apache.hadoop.hive.metastore.utils.MetaStoreUtils.populateQuickStats(fileStatus, params);
-  }
-
-  public static boolean updateTableStatsFast(Table tbl, FileStatus[] fileStatus, boolean newDir,
-                                             boolean forceRecompute, EnvironmentContext environmentContext) throws MetaException {
-    return org.apache.hadoop.hive.metastore.utils.MetaStoreUtils.updateTableStatsFast(
-        tbl, fileStatus, newDir, forceRecompute, environmentContext);
-  }
-
-  public static boolean updatePartitionStatsFast(Partition part, Warehouse wh, EnvironmentContext environmentContext)
-      throws MetaException {
-    return org.apache.hadoop.hive.metastore.utils.MetaStoreUtils.updatePartitionStatsFast(
-        part, wh, environmentContext);
-  }
-
-  /**
-   * getDeserializer
-   *
-   * Get the Deserializer for a table.
-   *
-   * @param conf
-   *          - hadoop config
-   * @param table
-   *          the table
-   * @return
-   *   Returns instantiated deserializer by looking up class name of deserializer stored in
-   *   storage descriptor of passed in table. Also, initializes the deserializer with schema
-   *   of table.
-   * @exception MetaException
-   *              if any problems instantiating the Deserializer
-   *
-   *              todo - this should move somewhere into serde.jar
-   *
-   */
-  static public Deserializer getDeserializer(Configuration conf,
-      org.apache.hadoop.hive.metastore.api.Table table, boolean skipConfError) throws
-          MetaException {
-    String lib = table.getSd().getSerdeInfo().getSerializationLib();
-    if (lib == null) {
-      return null;
-    }
-    return getDeserializer(conf, table, skipConfError, lib);
-  }
-
-  public static Deserializer getDeserializer(Configuration conf,
-      org.apache.hadoop.hive.metastore.api.Table table, boolean skipConfError,
-      String lib) throws MetaException {
-    try {
-      Deserializer deserializer = ReflectionUtil.newInstance(conf.getClassByName(lib).
-              asSubclass(Deserializer.class), conf);
-      if (skipConfError) {
-        SerDeUtils.initializeSerDeWithoutErrorCheck(deserializer, conf,
-                MetaStoreUtils.getTableMetadata(table), null);
-      } else {
-        SerDeUtils.initializeSerDe(deserializer, conf, MetaStoreUtils.getTableMetadata(table), null);
-      }
-      return deserializer;
-    } catch (RuntimeException e) {
-      throw e;
-    } catch (Throwable e) {
-      LOG.error("error in initSerDe: " + e.getClass().getName() + " "
-          + e.getMessage(), e);
-      throw new MetaException(e.getClass().getName() + " " + e.getMessage());
-    }
-  }
-
-  public static Class<? extends Deserializer> getDeserializerClass(
-      Configuration conf, org.apache.hadoop.hive.metastore.api.Table table) throws Exception {
-    String lib = table.getSd().getSerdeInfo().getSerializationLib();
-    return lib == null ? null : conf.getClassByName(lib).asSubclass(Deserializer.class);
-  }
-
-  /**
-   * getDeserializer
-   *
-   * Get the Deserializer for a partition.
-   *
-   * @param conf
-   *          - hadoop config
-   * @param part
-   *          the partition
-   * @param table the table
-   * @return
-   *   Returns instantiated deserializer by looking up class name of deserializer stored in
-   *   storage descriptor of passed in partition. Also, initializes the deserializer with
-   *   schema of partition.
-   * @exception MetaException
-   *              if any problems instantiating the Deserializer
-   *
-   */
-  static public Deserializer getDeserializer(Configuration conf,
-      org.apache.hadoop.hive.metastore.api.Partition part,
-      org.apache.hadoop.hive.metastore.api.Table table) throws MetaException {
-    String lib = part.getSd().getSerdeInfo().getSerializationLib();
-    try {
-      Deserializer deserializer = ReflectionUtil.newInstance(conf.getClassByName(lib).
-        asSubclass(Deserializer.class), conf);
-      SerDeUtils.initializeSerDe(deserializer, conf, MetaStoreUtils.getTableMetadata(table),
-                                 MetaStoreUtils.getPartitionMetadata(part, table));
-      return deserializer;
-    } catch (RuntimeException e) {
-      throw e;
-    } catch (Throwable e) {
-      LOG.error("error in initSerDe: " + e.getClass().getName() + " "
-          + e.getMessage(), e);
-      throw new MetaException(e.getClass().getName() + " " + e.getMessage());
-    }
-  }
-
-  /**
-   * Given a list of partition columns and a partial mapping from
-   * some partition columns to values the function returns the values
-   * for the column.
-   * @param partCols the list of table partition columns
-   * @param partSpec the partial mapping from partition column to values
-   * @return list of values of for given partition columns, any missing
-   *         values in partSpec is replaced by an empty string
-   */
-  public static List<String> getPvals(List<FieldSchema> partCols,
-      Map<String, String> partSpec) {
-    List<String> pvals = new ArrayList<String>(partCols.size());
-    for (FieldSchema field : partCols) {
-      String val = StringUtils.defaultString(partSpec.get(field.getName()));
-      pvals.add(val);
-    }
-    return pvals;
-  }
-
-  /**
-   * validateName
-   *
-   * Checks the name conforms to our standars which are: "[a-zA-z_0-9]+". checks
-   * this is just characters and numbers and _
-   *
-   * @param name
-   *          the name to validate
-   * @param conf
-   *          hive configuration
-   * @return true or false depending on conformance
-   *              if it doesn't match the pattern.
-   */
-  static public boolean validateName(String name, Configuration conf) {
-    Pattern tpat = null;
-    String allowedCharacters = "\\w_";
-    if (conf != null
-        && HiveConf.getBoolVar(conf,
-            HiveConf.ConfVars.HIVE_SUPPORT_SPECICAL_CHARACTERS_IN_TABLE_NAMES)) {
-      for (Character c : specialCharactersInTableNames) {
-        allowedCharacters += c;
-      }
-    }
-    tpat = Pattern.compile("[" + allowedCharacters + "]+");
-    Matcher m = tpat.matcher(name);
-    return m.matches();
-  }
-
-  /*
-   * At the Metadata level there are no restrictions on Column Names.
-   */
-  public static boolean validateColumnName(String name) {
-    return true;
-  }
-
-  public static final String TYPE_FROM_DESERIALIZER = "<derived from deserializer>";
-
-  public static String getListType(String t) {
-    return "array<" + t + ">";
-  }
-
-  static HashMap<String, String> typeToThriftTypeMap;
-  static {
-    typeToThriftTypeMap = new HashMap<String, String>();
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.BOOLEAN_TYPE_NAME, "bool");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.TINYINT_TYPE_NAME, "byte");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.SMALLINT_TYPE_NAME, "i16");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.INT_TYPE_NAME, "i32");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.BIGINT_TYPE_NAME, "i64");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.DOUBLE_TYPE_NAME, "double");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.FLOAT_TYPE_NAME, "float");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.LIST_TYPE_NAME, "list");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.MAP_TYPE_NAME, "map");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.STRING_TYPE_NAME, "string");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.BINARY_TYPE_NAME, "binary");
-    // These 4 types are not supported yet.
-    // We should define a complex type date in thrift that contains a single int
-    // member, and DynamicSerDe
-    // should convert it to date type at runtime.
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.DATE_TYPE_NAME, "date");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.DATETIME_TYPE_NAME, "datetime");
-    typeToThriftTypeMap
-        .put(org.apache.hadoop.hive.serde.serdeConstants.TIMESTAMP_TYPE_NAME,
-            "timestamp");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.DECIMAL_TYPE_NAME, "decimal");
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.INTERVAL_YEAR_MONTH_TYPE_NAME,
-        org.apache.hadoop.hive.serde.serdeConstants.INTERVAL_YEAR_MONTH_TYPE_NAME);
-    typeToThriftTypeMap.put(
-        org.apache.hadoop.hive.serde.serdeConstants.INTERVAL_DAY_TIME_TYPE_NAME,
-        org.apache.hadoop.hive.serde.serdeConstants.INTERVAL_DAY_TIME_TYPE_NAME);
-  }
-
-  private static Set<String> hiveThriftTypeMap; //for validation
-  static {
-    hiveThriftTypeMap = new HashSet<String>();
-    hiveThriftTypeMap.addAll(serdeConstants.PrimitiveTypes);
-    hiveThriftTypeMap.addAll(org.apache.hadoop.hive.serde.serdeConstants.CollectionTypes);
-    hiveThriftTypeMap.add(org.apache.hadoop.hive.serde.serdeConstants.UNION_TYPE_NAME);
-    hiveThriftTypeMap.add(org.apache.hadoop.hive.serde.serdeConstants.STRUCT_TYPE_NAME);
-  }
-
-  /**
-   * Convert type to ThriftType. We do that by tokenizing the type and convert
-   * each token.
-   */
-  public static String typeToThriftType(String type) {
-    StringBuilder thriftType = new StringBuilder();
-    int last = 0;
-    boolean lastAlphaDigit = Character.isLetterOrDigit(type.charAt(last));
-    for (int i = 1; i <= type.length(); i++) {
-      if (i == type.length()
-          || Character.isLetterOrDigit(type.charAt(i)) != lastAlphaDigit) {
-        String token = type.substring(last, i);
-        last = i;
-        String thriftToken = typeToThriftTypeMap.get(token);
-        thriftType.append(thriftToken == null ? token : thriftToken);
-        lastAlphaDigit = !lastAlphaDigit;
-      }
-    }
-    return thriftType.toString();
-  }
-
-  /**
-   * Convert FieldSchemas to Thrift DDL.
-   */
-  public static String getDDLFromFieldSchema(String structName,
-      List<FieldSchema> fieldSchemas) {
-    StringBuilder ddl = new StringBuilder();
-    ddl.append("struct ");
-    ddl.append(structName);
-    ddl.append(" { ");
-    boolean first = true;
-    for (FieldSchema col : fieldSchemas) {
-      if (first) {
-        first = false;
-      } else {
-        ddl.append(", ");
-      }
-      ddl.append(typeToThriftType(col.getType()));
-      ddl.append(' ');
-      ddl.append(col.getName());
-    }
-    ddl.append("}");
-
-    LOG.trace("DDL: {}", ddl);
-    return ddl.toString();
-  }
-
-  public static Properties getTableMetadata(
-      org.apache.hadoop.hive.metastore.api.Table table) {
-    return MetaStoreUtils.getSchema(table.getSd(), table.getSd(), table
-        .getParameters(), table.getDbName(), table.getTableName(), table.getPartitionKeys());
-  }
-
-  public static Properties getPartitionMetadata(
-      org.apache.hadoop.hive.metastore.api.Partition partition,
-      org.apache.hadoop.hive.metastore.api.Table table) {
-    return MetaStoreUtils
-        .getSchema(partition.getSd(), partition.getSd(), partition
-            .getParameters(), table.getDbName(), table.getTableName(),
-            table.getPartitionKeys());
-  }
-
-  public static Properties getSchema(
-      org.apache.hadoop.hive.metastore.api.Partition part,
-      org.apache.hadoop.hive.metastore.api.Table table) {
-    return MetaStoreUtils.getSchema(part.getSd(), table.getSd(), table
-        .getParameters(), table.getDbName(), table.getTableName(), table.getPartitionKeys());
-  }
-
-  /**
-   * Get partition level schema from table level schema.
-   * This function will use the same column names, column types and partition keys for
-   * each partition Properties. Their values are copied from the table Properties. This
-   * is mainly to save CPU and memory. CPU is saved because the first time the
-   * StorageDescriptor column names are accessed, JDO needs to execute a SQL query to
-   * retrieve the data. If we know the data will be the same as the table level schema
-   * and they are immutable, we should just reuse the table level schema objects.
-   *
-   * @param sd The Partition level Storage Descriptor.
-   * @param tblsd The Table level Storage Descriptor.
-   * @param parameters partition level parameters
-   * @param databaseName DB name
-   * @param tableName table name
-   * @param partitionKeys partition columns
-   * @param tblSchema The table level schema from which this partition should be copied.
-   * @return the properties
-   */
-  public static Properties getPartSchemaFromTableSchema(
-      org.apache.hadoop.hive.metastore.api.StorageDescriptor sd,
-      org.apache.hadoop.hive.metastore.api.StorageDescriptor tblsd,
-      Map<String, String> parameters, String databaseName, String tableName,
-      List<FieldSchema> partitionKeys,
-      Properties tblSchema) {
-
-    // Inherent most properties from table level schema and overwrite some properties
-    // in the following code.
-    // This is mainly for saving CPU and memory to reuse the column names, types and
-    // partition columns in the table level schema.
-    Properties schema = (Properties) tblSchema.clone();
-
-    // InputFormat
-    String inputFormat = sd.getInputFormat();
-    if (inputFormat == null || inputFormat.length() == 0) {
-      String tblInput =
-        schema.getProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_INPUT_FORMAT);
-      if (tblInput == null) {
-        inputFormat = org.apache.hadoop.mapred.SequenceFileInputFormat.class.getName();
-      } else {
-        inputFormat = tblInput;
-      }
-    }
-    schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_INPUT_FORMAT,
-        inputFormat);
-
-    // OutputFormat
-    String outputFormat = sd.getOutputFormat();
-    if (outputFormat == null || outputFormat.length() == 0) {
-      String tblOutput =
-        schema.getProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_OUTPUT_FORMAT);
-      if (tblOutput == null) {
-        outputFormat = org.apache.hadoop.mapred.SequenceFileOutputFormat.class.getName();
-      } else {
-        outputFormat = tblOutput;
-      }
-    }
-    schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_OUTPUT_FORMAT,
-        outputFormat);
-
-    // Location
-    if (sd.getLocation() != null) {
-      schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_LOCATION,
-          sd.getLocation());
-    }
-
-    // Bucket count
-    schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_COUNT,
-        Integer.toString(sd.getNumBuckets()));
-
-    if (sd.getBucketCols() != null && sd.getBucketCols().size() > 0) {
-      schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_FIELD_NAME,
-          sd.getBucketCols().get(0));
-    }
-
-    // SerdeInfo
-    if (sd.getSerdeInfo() != null) {
-
-      // We should not update the following 3 values if SerDeInfo contains these.
-      // This is to keep backward compatible with getSchema(), where these 3 keys
-      // are updated after SerDeInfo properties got copied.
-      String cols = org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMNS;
-      String colTypes = org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMN_TYPES;
-      String parts = org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_PARTITION_COLUMNS;
-
-      for (Map.Entry<String,String> param : sd.getSerdeInfo().getParameters().entrySet()) {
-        String key = param.getKey();
-        if (schema.get(key) != null &&
-            (key.equals(cols) || key.equals(colTypes) || key.equals(parts))) {
-          continue;
-        }
-        schema.put(key, (param.getValue() != null) ? param.getValue() : StringUtils.EMPTY);
-      }
-
-      if (sd.getSerdeInfo().getSerializationLib() != null) {
-        schema.setProperty(org.apache.hadoop.hive.serde.serdeConstants.SERIALIZATION_LIB,
-            sd.getSerdeInfo().getSerializationLib());
-      }
-    }
-
-    // skipping columns since partition level field schemas are the same as table level's
-    // skipping partition keys since it is the same as table level partition keys
-
-    if (parameters != null) {
-      for (Entry<String, String> e : parameters.entrySet()) {
-        schema.setProperty(e.getKey(), e.getValue());
-      }
-    }
-
-    return schema;
-  }
-
-  public static Properties addCols(Properties schema, List<FieldSchema> cols) {
-
-    StringBuilder colNameBuf = new StringBuilder();
-    StringBuilder colTypeBuf = new StringBuilder();
-    StringBuilder colComment = new StringBuilder();
-
-    boolean first = true;
-    String columnNameDelimiter = getColumnNameDelimiter(cols);
-    for (FieldSchema col : cols) {
-      if (!first) {
-        colNameBuf.append(columnNameDelimiter);
-        colTypeBuf.append(":");
-        colComment.append('\0');
-      }
-      colNameBuf.append(col.getName());
-      colTypeBuf.append(col.getType());
-      colComment.append((null != col.getComment()) ? col.getComment() : StringUtils.EMPTY);
-      first = false;
-    }
-    schema.setProperty(
-        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMNS,
-        colNameBuf.toString());
-    schema.setProperty(serdeConstants.COLUMN_NAME_DELIMITER, columnNameDelimiter);
-    String colTypes = colTypeBuf.toString();
-    schema.setProperty(
-        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMN_TYPES,
-        colTypes);
-    schema.setProperty("columns.comments", colComment.toString());
-
-    return schema;
-
-  }
-
-  public static Properties getSchemaWithoutCols(org.apache.hadoop.hive.metastore.api.StorageDescriptor sd,
-      org.apache.hadoop.hive.metastore.api.StorageDescriptor tblsd,
-      Map<String, String> parameters, String databaseName, String tableName,
-      List<FieldSchema> partitionKeys) {
-    Properties schema = new Properties();
-    String inputFormat = sd.getInputFormat();
-    if (inputFormat == null || inputFormat.length() == 0) {
-      inputFormat = org.apache.hadoop.mapred.SequenceFileInputFormat.class
-        .getName();
-    }
-    schema.setProperty(
-      org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_INPUT_FORMAT,
-      inputFormat);
-    String outputFormat = sd.getOutputFormat();
-    if (outputFormat == null || outputFormat.length() == 0) {
-      outputFormat = org.apache.hadoop.mapred.SequenceFileOutputFormat.class
-        .getName();
-    }
-    schema.setProperty(
-      org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_OUTPUT_FORMAT,
-      outputFormat);
-
-    schema.setProperty(
-        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_NAME,
-        databaseName + "." + tableName);
-
-    if (sd.getLocation() != null) {
-      schema.setProperty(
-          org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_LOCATION,
-          sd.getLocation());
-    }
-    schema.setProperty(
-        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_COUNT, Integer
-            .toString(sd.getNumBuckets()));
-    if (sd.getBucketCols() != null && sd.getBucketCols().size() > 0) {
-      schema.setProperty(
-          org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_FIELD_NAME, sd
-              .getBucketCols().get(0));
-    }
-    if (sd.getSerdeInfo() != null) {
-      for (Map.Entry<String,String> param : sd.getSerdeInfo().getParameters().entrySet()) {
-        schema.put(param.getKey(), (param.getValue() != null) ? param.getValue() : StringUtils.EMPTY);
-      }
-
-      if (sd.getSerdeInfo().getSerializationLib() != null) {
-        schema.setProperty(
-            org.apache.hadoop.hive.serde.serdeConstants.SERIALIZATION_LIB, sd
-                .getSerdeInfo().getSerializationLib());
-      }
-    }
-
-    if (sd.getCols() != null) {
-      schema.setProperty(
-          org.apache.hadoop.hive.serde.serdeConstants.SERIALIZATION_DDL,
-          getDDLFromFieldSchema(tableName, sd.getCols()));
-    }
-
-    String partString = StringUtils.EMPTY;
-    String partStringSep = StringUtils.EMPTY;
-    String partTypesString = StringUtils.EMPTY;
-    String partTypesStringSep = StringUtils.EMPTY;
-    for (FieldSchema partKey : partitionKeys) {
-      partString = partString.concat(partStringSep);
-      partString = partString.concat(partKey.getName());
-      partTypesString = partTypesString.concat(partTypesStringSep);
-      partTypesString = partTypesString.concat(partKey.getType());
-      if (partStringSep.length() == 0) {
-        partStringSep = "/";
-        partTypesStringSep = ":";
-      }
-    }
-    if (partString.length() > 0) {
-      schema
-          .setProperty(
-              org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_PARTITION_COLUMNS,
-              partString);
-      schema
-      .setProperty(
-          org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_PARTITION_COLUMN_TYPES,
-          partTypesString);
-    }
-
-    if (parameters != null) {
-      for (Entry<String, String> e : parameters.entrySet()) {
-        // add non-null parameters to the schema
-        if ( e.getValue() != null) {
-          schema.setProperty(e.getKey(), e.getValue());
-        }
-      }
-    }
-
-    return schema;
-  }
-
-  public static Properties getSchema(
-      org.apache.hadoop.hive.metastore.api.StorageDescriptor sd,
-      org.apache.hadoop.hive.metastore.api.StorageDescriptor tblsd,
-      Map<String, String> parameters, String databaseName, String tableName,
-      List<FieldSchema> partitionKeys) {
-
-    return addCols(getSchemaWithoutCols(sd, tblsd, parameters, databaseName, tableName, partitionKeys), tblsd.getCols());
-  }
-
-  public static String getColumnNameDelimiter(List<FieldSchema> fieldSchemas) {
-    // we first take a look if any fieldSchemas contain COMMA
-    for (int i = 0; i < fieldSchemas.size(); i++) {
-      if (fieldSchemas.get(i).getName().contains(",")) {
-        return String.valueOf(SerDeUtils.COLUMN_COMMENTS_DELIMITER);
-      }
-    }
-    return String.valueOf(SerDeUtils.COMMA);
-  }
-
-  /**
-   * Convert FieldSchemas to columnNames.
-   */
-  public static String getColumnNamesFromFieldSchema(List<FieldSchema> fieldSchemas) {
-    String delimiter = getColumnNameDelimiter(fieldSchemas);
-    StringBuilder sb = new StringBuilder();
-    for (int i = 0; i < fieldSchemas.size(); i++) {
-      if (i > 0) {
-        sb.append(delimiter);
-      }
-      sb.append(fieldSchemas.get(i).getName());
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Convert FieldSchemas to columnTypes.
-   */
-  public static String getColumnTypesFromFieldSchema(
-      List<FieldSchema> fieldSchemas) {
-    StringBuilder sb = new StringBuilder();
-    for (int i = 0; i < fieldSchemas.size(); i++) {
-      if (i > 0) {
-        sb.append(",");
-      }
-      sb.append(fieldSchemas.get(i).getType());
-    }
-    return sb.toString();
-  }
-
-  public static String getColumnCommentsFromFieldSchema(List<FieldSchema> fieldSchemas) {
-    StringBuilder sb = new StringBuilder();
-    for (int i = 0; i < fieldSchemas.size(); i++) {
-      if (i > 0) {
-        sb.append(SerDeUtils.COLUMN_COMMENTS_DELIMITER);
-      }
-      sb.append(fieldSchemas.get(i).getComment());
-    }
-    return sb.toString();
-  }
-
-  public static int startMetaStore() throws Exception {
-    return startMetaStore(HadoopThriftAuthBridge.getBridge(), null);
-  }
-
-  public static int startMetaStore(final HadoopThriftAuthBridge bridge, HiveConf conf) throws Exception {
-    int port = findFreePort();
-    startMetaStore(port, bridge, conf);
-    return port;
-  }
-
-  public static int startMetaStore(HiveConf conf) throws Exception {
-    return startMetaStore(HadoopThriftAuthBridge.getBridge(), conf);
-  }
-
-  public static void startMetaStore(final int port, final HadoopThriftAuthBridge bridge) throws Exception {
-    startMetaStore(port, bridge, null);
-  }
-
-  public static void startMetaStore(final int port,
-      final HadoopThriftAuthBridge bridge, HiveConf hiveConf)
-      throws Exception{
-    if (hiveConf == null) {
-      hiveConf = new HiveConf(HMSHandler.class);
-    }
-    final HiveConf finalHiveConf = hiveConf;
-    Thread thread = new Thread(new Runnable() {
-      @Override
-      public void run() {
-        try {
-          HiveMetaStore.startMetaStore(port, bridge, finalHiveConf);
-        } catch (Throwable e) {
-          LOG.error("Metastore Thrift Server threw an exception...",e);
-        }
-      }
-    });
-    thread.setDaemon(true);
-    thread.start();
-    loopUntilHMSReady(port);
-  }
-
-  /**
-   * A simple connect test to make sure that the metastore is up
-   * @throws Exception
-   */
-  private static void loopUntilHMSReady(int port) throws Exception {
-    int retries = 0;
-    Exception exc = null;
-    while (true) {
-      try {
-        Socket socket = new Socket();
-        socket.connect(new InetSocketAddress(port), 5000);
-        socket.close();
-        return;
-      } catch (Exception e) {
-        if (retries++ > 60) { //give up
-          exc = e;
-          break;
-        }
-        Thread.sleep(1000);
-      }
-    }
-    // something is preventing metastore from starting
-    // print the stack from all threads for debugging purposes
-    LOG.error("Unable to connect to metastore server: " + exc.getMessage());
-    LOG.info("Printing all thread stack traces for debugging before throwing exception.");
-    LOG.info(getAllThreadStacksAsString());
-    throw exc;
-  }
-
-  private static String getAllThreadStacksAsString() {
-    Map<Thread, StackTraceElement[]> threadStacks = Thread.getAllStackTraces();
-    StringBuilder sb = new StringBuilder();
-    for (Map.Entry<Thread, StackTraceElement[]> entry : threadStacks.entrySet()) {
-      Thread t = entry.getKey();
-      sb.append(System.lineSeparator());
-      sb.append("Name: ").append(t.getName()).append(" State: ").append(t.getState());
-      addStackString(entry.getValue(), sb);
-    }
-    return sb.toString();
-  }
-
-  private static void addStackString(StackTraceElement[] stackElems, StringBuilder sb) {
-    sb.append(System.lineSeparator());
-    for (StackTraceElement stackElem : stackElems) {
-      sb.append(stackElem).append(System.lineSeparator());
-    }
-  }
-
-  /**
-   * Finds a free port on the machine.
-   *
-   * @return
-   * @throws IOException
-   */
-  public static int findFreePort() throws IOException {
-    ServerSocket socket= new ServerSocket(0);
-    int port = socket.getLocalPort();
-    socket.close();
-    return port;
-  }
-
-  /**
-   * Finds a free port on the machine, but allow the
-   * ability to specify a port number to not use, no matter what.
-   */
-  public static int findFreePortExcepting(int portToExclude) throws IOException {
-    ServerSocket socket1 = null;
-    ServerSocket socket2 = null;
-    try {
-      socket1 = new ServerSocket(0);
-      socket2 = new ServerSocket(0);
-      if (socket1.getLocalPort() != portToExclude) {
-        return socket1.getLocalPort();
-      }
-      // If we're here, then socket1.getLocalPort was the port to exclude
-      // Since both sockets were open together at a point in time, we're
-      // guaranteed that socket2.getLocalPort() is not the same.
-      return socket2.getLocalPort();
-    } finally {
-      if (socket1 != null){
-        socket1.close();
-      }
-      if (socket2 != null){
-        socket2.close();
-      }
-    }
-  }
-
-  /**
-   * Catches exceptions that can't be handled and bundles them to MetaException
-   *
-   * @param e
-   * @throws MetaException
-   */
-  static void logAndThrowMetaException(Exception e) throws MetaException {
-    String exInfo = "Got exception: " + e.getClass().getName() + " "
-        + e.getMessage();
-    LOG.error(exInfo, e);
-    LOG.error("Converting exception to MetaException");
-    throw new MetaException(exInfo);
-  }
-
-  /**
-   * @param tableName
-   * @param deserializer
-   * @return the list of fields
-   * @throws SerDeException
-   * @throws MetaException
-   */
-  public static List<FieldSchema> getFieldsFromDeserializer(String tableName,
-      Deserializer deserializer) throws SerDeException, MetaException {
-    ObjectInspector oi = deserializer.getObjectInspector();
-    String[] names = tableName.split("\\.");
-    String last_name = names[names.length - 1];
-    for (int i = 1; i < names.length; i++) {
-
-      if (oi instanceof StructObjectInspector) {
-        StructObjectInspector soi = (StructObjectInspector) oi;
-        StructField sf = soi.getStructFieldRef(names[i]);
-        if (sf == null) {
-          throw new MetaException("Invalid Field " + names[i]);
-        } else {
-          oi = sf.getFieldObjectInspector();
-        }
-      } else if (oi instanceof ListObjectInspector
-          && names[i].equalsIgnoreCase("$elem$")) {
-        ListObjectInspector loi = (ListObjectInspector) oi;
-        oi = loi.getListElementObjectInspector();
-      } else if (oi instanceof MapObjectInspector
-          && names[i].equalsIgnoreCase("$key$")) {
-        MapObjectInspector moi = (MapObjectInspector) oi;
-        oi = moi.getMapKeyObjectInspector();
-      } else if (oi instanceof MapObjectInspector
-          && names[i].equalsIgnoreCase("$value$")) {
-        MapObjectInspector moi = (MapObjectInspector) oi;
-        oi = moi.getMapValueObjectInspector();
-      } else {
-        throw new MetaException("Unknown type for " + names[i]);
-      }
-    }
-
-    ArrayList<FieldSchema> str_fields = new ArrayList<FieldSchema>();
-    // rules on how to recurse the ObjectInspector based on its type
-    if (oi.getCategory() != Category.STRUCT) {
-      str_fields.add(new FieldSchema(last_name, oi.getTypeName(),
-          FROM_SERIALIZER));
-    } else {
-      List<? extends StructField> fields = ((StructObjectInspector) oi)
-          .getAllStructFieldRefs();
-      for (int i = 0; i < fields.size(); i++) {
-        StructField structField = fields.get(i);
-        String fieldName = structField.getFieldName();
-        String fieldTypeName = structField.getFieldObjectInspector().getTypeName();
-        String fieldComment = determineFieldComment(structField.getFieldComment());
-
-        str_fields.add(new FieldSchema(fieldName, fieldTypeName, fieldComment));
-      }
-    }
-    return str_fields;
-  }
-
-  private static final String FROM_SERIALIZER = "from deserializer";
-  private static String determineFieldComment(String comment) {
-    return (comment == null) ? FROM_SERIALIZER : comment;
-  }
-
-  /**
-   * Convert TypeInfo to FieldSchema.
-   */
-  public static FieldSchema getFieldSchemaFromTypeInfo(String fieldName,
-      TypeInfo typeInfo) {
-    return new FieldSchema(fieldName, typeInfo.getTypeName(),
-        "generated by TypeInfoUtils.getFieldSchemaFromTypeInfo");
-  }
-
-  /**
-   * Determines whether a table is an external table.
-   *
-   * @param table table of interest
-   *
-   * @return true if external
-   */
-  public static boolean isExternalTable(Table table) {
-    if (table == null) {
-      return false;
-    }
-    Map<String, String> params = table.getParameters();
-    if (params == null) {
-      return false;
-    }
-
-    return "TRUE".equalsIgnoreCase(params.get("EXTERNAL"));
-  }
-
-  public static boolean isArchived(
-      org.apache.hadoop.hive.metastore.api.Partition part) {
-    Map<String, String> params = part.getParameters();
-    return "TRUE".equalsIgnoreCase(params.get(hive_metastoreConstants.IS_ARCHIVED));
-  }
-
-  /**
-   * Filter that filters out hidden files
-   */
-  private static final PathFilter hiddenFileFilter = new PathFilter() {
-    @Override
-    public boolean accept(Path p) {
-      String name = p.getName();
-      return !name.startsWith("_") && !name.startsWith(".");
-    }
-  };
-
-  /**
-   * Utility method that determines if a specified directory already has
-   * contents (non-hidden files) or not - useful to determine if an
-   * immutable table already has contents, for example.
-   *
-   * @param path
-   * @throws IOException
-   */
-  public static boolean isDirEmpty(FileSystem fs, Path path) throws IOException {
-
-    if (fs.exists(path)) {
-      FileStatus[] status = fs.globStatus(new Path(path, "*"), hiddenFileFilter);
-      if (status.length > 0) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  public static String getIndexTableName(String dbName, String baseTblName, String indexName) {
-    return dbName + "__" + baseTblName + "_" + indexName + "__";
-  }
-
-  public static boolean isIndexTable(Table table) {
-    if (table == null) {
-      return false;
-    }
-    return TableType.INDEX_TABLE.toString().equals(table.getTableType());
-  }
-
-  public static boolean isMaterializedViewTable(Table table) {
-    if (table == null) {
-      return false;
-    }
-    return TableType.MATERIALIZED_VIEW.toString().equals(table.getTableType());
-  }
-
-  public static boolean isView(Table table) {
-    if (table == null) {
-      return false;
-    }
-    return TableType.VIRTUAL_VIEW.toString().equals(table.getTableType());
-  }
-
-  @SuppressWarnings("unchecked")
-  public static Class<? extends RawStore> getClass(String rawStoreClassName)
-      throws MetaException {
-    try {
-      return (Class<? extends RawStore>)
-          Class.forName(rawStoreClassName, true, JavaUtils.getClassLoader());
-    } catch (ClassNotFoundException e) {
-      throw new MetaException(rawStoreClassName + " class not found");
-    }
-  }
-
-  /**
-   * Create an object of the given class.
-   * @param theClass
-   * @param parameterTypes
-   *          an array of parameterTypes for the constructor
-   * @param initargs
-   *          the list of arguments for the constructor
-   */
-  public static <T> T newInstance(Class<T> theClass, Class<?>[] parameterTypes,
-      Object[] initargs) {
-    // Perform some sanity checks on the arguments.
-    if (parameterTypes.length != initargs.length) {
-      throw new IllegalArgumentException(
-          "Number of constructor parameter types doesn't match number of arguments");
-    }
-    for (int i = 0; i < parameterTypes.length; i++) {
-      Class<?> clazz = parameterTypes[i];
-      if (initargs[i] != null && !(clazz.isInstance(initargs[i]))) {
-        throw new IllegalArgumentException("Object : " + initargs[i]
-            + " is not an instance of " + clazz);
-      }
-    }
-
-    try {
-      Constructor<T> meth = theClass.getDeclaredConstructor(parameterTypes);
-      meth.setAccessible(true);
-      return meth.newInstance(initargs);
-    } catch (Exception e) {
-      throw new RuntimeException("Unable to instantiate " + theClass.getName(), e);
-    }
-  }
-
-  /**
-   * @param schema1: The first schema to be compared
-   * @param schema2: The second schema to be compared
-   * @return true if the two schemas are the same else false
-   *         for comparing a field we ignore the comment it has
-   */
-  public static boolean compareFieldColumns(List<FieldSchema> schema1, List<FieldSchema> schema2) {
-    if (schema1.size() != schema2.size()) {
-      return false;
-    }
-    Iterator<FieldSchema> its1 = schema1.iterator();
-    Iterator<FieldSchema> its2 = schema2.iterator();
-    while (its1.hasNext()) {
-      FieldSchema f1 = its1.next();
-      FieldSchema f2 = its2.next();
-      // The default equals provided by thrift compares the comments too for
-      // equality, thus we need to compare the relevant fields here.
-      if (!StringUtils.equals(f1.getName(), f2.getName()) ||
-          !StringUtils.equals(f1.getType(), f2.getType())) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Read and return the meta store Sasl configuration. Currently it uses the default
-   * Hadoop SASL configuration and can be configured using "hadoop.rpc.protection"
-   * HADOOP-10211, made a backward incompatible change due to which this call doesn't
-   * work with Hadoop 2.4.0 and later.
-   * @param conf
-   * @return The SASL configuration
-   */
-  public static Map<String, String> getMetaStoreSaslProperties(HiveConf conf, boolean useSSL) {
-    // As of now Hive Meta Store uses the same configuration as Hadoop SASL configuration
-
-    // If SSL is enabled, override the given value of "hadoop.rpc.protection" and set it to "authentication"
-    // This disables any encryption provided by SASL, since SSL already provides it
-    String hadoopRpcProtectionVal = conf.get(CommonConfigurationKeysPublic.HADOOP_RPC_PROTECTION);
-    String hadoopRpcProtectionAuth = SaslRpcServer.QualityOfProtection.AUTHENTICATION.toString();
-
-    if (useSSL && hadoopRpcProtectionVal != null && !hadoopRpcProtectionVal.equals(hadoopRpcProtectionAuth)) {
-      LOG.warn("Overriding value of " + CommonConfigurationKeysPublic.HADOOP_RPC_PROTECTION + " setting it from "
-              + hadoopRpcProtectionVal + " to " + hadoopRpcProtectionAuth + " because SSL is enabled");
-      conf.set(CommonConfigurationKeysPublic.HADOOP_RPC_PROTECTION, hadoopRpcProtectionAuth);
-    }
-    return HadoopThriftAuthBridge.getBridge().getHadoopSaslProperties(conf);
-  }
-
-
-  public static String ARCHIVING_LEVEL = "archiving_level";
-  public static int getArchivingLevel(Partition part) throws MetaException {
-    if (!isArchived(part)) {
-      throw new MetaException("Getting level of unarchived partition");
-    }
-
-    String lv = part.getParameters().get(ARCHIVING_LEVEL);
-    if (lv != null) {
-      return Integer.parseInt(lv);
-    }
-     // partitions archived before introducing multiple archiving
-    return part.getValues().size();
-  }
-
-  public static String[] getQualifiedName(String defaultDbName, String tableName) {
-    String[] names = tableName.split("\\.");
-    if (names.length == 1) {
-      return new String[] { defaultDbName, tableName};
-    }
-    return names;
-  }
-
-  public static List<String> getColumnNames(List<FieldSchema> schema) {
-    List<String> cols = new ArrayList<>(schema.size());
-    for (FieldSchema fs : schema) {
-      cols.add(fs.getName());
-    }
-    return cols;
-  }
-}
index 80fae28..59bcd5c 100644 (file)
@@ -44,8 +44,8 @@ public class SerDeStorageSchemaReader implements StorageSchemaReader {
         }
       }
 
-      Deserializer s = MetaStoreUtils.getDeserializer(conf, tbl, false);
-      return MetaStoreUtils.getFieldsFromDeserializer(tbl.getTableName(), s);
+      Deserializer s = HiveMetaStoreUtils.getDeserializer(conf, tbl, false);
+      return HiveMetaStoreUtils.getFieldsFromDeserializer(tbl.getTableName(), s);
     } catch (Exception e) {
       StringUtils.stringifyException(e);
       throw new MetaException(e.getMessage());
index 7ed8f27..f35a4c8 100644 (file)
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
index 4d52d74..d3df015 100644 (file)
@@ -51,7 +51,8 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.conf.HiveVariableSource;
 import org.apache.hadoop.hive.conf.VariableSubstitution;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.ColumnType;
+import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Schema;
 import org.apache.hadoop.hive.ql.exec.ConditionalTask;
@@ -309,7 +310,7 @@ public class Driver implements CommandProcessor {
         String tableName = "result";
         List<FieldSchema> lst = null;
         try {
-          lst = MetaStoreUtils.getFieldsFromDeserializer(tableName, td.getDeserializer(conf));
+          lst = HiveMetaStoreUtils.getFieldsFromDeserializer(tableName, td.getDeserializer(conf));
         } catch (Exception e) {
           LOG.warn("Error getting schema: "
               + org.apache.hadoop.util.StringUtils.stringifyException(e));
@@ -338,7 +339,7 @@ public class Driver implements CommandProcessor {
         // Go over the schema and convert type to thrift type
         if (lst != null) {
           for (FieldSchema f : lst) {
-            f.setType(MetaStoreUtils.typeToThriftType(f.getType()));
+            f.setType(ColumnType.typeToThriftType(f.getType()));
           }
         }
       }
index 7d5aa8b..f3a46db 100644 (file)
@@ -138,8 +138,8 @@ public class QueryState {
 
     /**
      * The source HiveConf object used to create the QueryState. If runAsync is false, and the
-     * confOverLay is empty then we will reuse the hiveConf object as a backing datastore for the
-     * QueryState. We will create a clone of the hiveConf object otherwise.
+     * confOverLay is empty then we will reuse the conf object as a backing datastore for the
+     * QueryState. We will create a clone of the conf object otherwise.
      * @param hiveConf The source HiveConf
      * @return The builder
      */
@@ -153,7 +153,7 @@ public class QueryState {
      * - runAsync false
      * - confOverlay null
      * - generateNewQueryId false
-     * - hiveConf null
+     * - conf null
      * @return The generated QueryState object
      */
     public QueryState build() {
index f7fad94..a5912eb 100644 (file)
@@ -30,10 +30,10 @@ import java.util.Map;
 
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.metadata.Hive;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.Partition;
index d6bf746..55ef8de 100644 (file)
@@ -72,7 +72,7 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.DefaultHiveMetaHook;
 import org.apache.hadoop.hive.metastore.HiveMetaHook;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.PartitionDropOptions;
 import org.apache.hadoop.hive.metastore.StatObjectConverter;
 import org.apache.hadoop.hive.metastore.TableType;
@@ -111,6 +111,7 @@ import org.apache.hadoop.hive.metastore.api.WMFullResourcePlan;
 import org.apache.hadoop.hive.metastore.api.WMResourcePlan;
 import org.apache.hadoop.hive.metastore.api.WMResourcePlanStatus;
 import org.apache.hadoop.hive.metastore.txn.TxnStore;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.CompilationOpContext;
 import org.apache.hadoop.hive.ql.Context;
 import org.apache.hadoop.hive.ql.DriverContext;
@@ -4219,7 +4220,7 @@ public class DDLTask extends Task<DDLWork> implements Serializable {
           // the fields so that new SerDe could operate. Note that this may fail if some fields
           // from old SerDe are too long to be stored in metastore, but there's nothing we can do.
           try {
-            Deserializer oldSerde = MetaStoreUtils.getDeserializer(
+            Deserializer oldSerde = HiveMetaStoreUtils.getDeserializer(
                 conf, tbl.getTTable(), false, oldSerdeName);
             tbl.setFields(Hive.getFieldsFromDeserializer(tbl.getTableName(), oldSerde));
           } catch (MetaException ex) {
index b85a243..fb78bd8 100644 (file)
@@ -39,7 +39,6 @@ import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.ValidReadTxnList;
 import org.apache.hadoop.hive.common.ValidTxnList;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.mr.ExecMapperContext;
 import org.apache.hadoop.hive.ql.io.AcidUtils;
 import org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader;
index 6d13773..f5a5e71 100644 (file)
@@ -24,10 +24,10 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.HiveStatsUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.InvalidOperationException;
 import org.apache.hadoop.hive.metastore.api.Order;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.Context;
 import org.apache.hadoop.hive.ql.DriverContext;
 import org.apache.hadoop.hive.ql.ErrorMsg;
index 567126e..c1dbd24 100644 (file)
@@ -28,6 +28,8 @@ import java.util.concurrent.Executors;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.ql.CompilationOpContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.ql.DriverContext;
 import org.apache.hadoop.hive.ql.QueryPlan;
 import org.apache.hadoop.hive.ql.QueryState;
@@ -43,8 +45,6 @@ import org.apache.hadoop.hive.ql.stats.BasicStatsNoJobTask;
 import org.apache.hadoop.hive.ql.stats.BasicStatsTask;
 import org.apache.hadoop.hive.ql.stats.ColStatsProcessor;
 import org.apache.hadoop.hive.ql.stats.IStatsProcessor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
index f7850fd..d68d646 100644 (file)
@@ -104,11 +104,11 @@ import org.apache.hadoop.hive.common.StringInternUtils;
 import org.apache.hadoop.hive.common.ValidTxnList;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Order;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.Context;
 import org.apache.hadoop.hive.ql.Driver.LockedDriverState;
 import org.apache.hadoop.hive.ql.ErrorMsg;
index 5c338b8..6c1afa6 100644 (file)
@@ -1184,10 +1184,10 @@ public class DagUtils {
   /**
    * Creates and initializes a JobConf object that can be used to execute
    * the DAG. The configuration object will contain configurations from mapred-site
-   * overlaid with key/value pairs from the hiveConf object. Finally it will also
+   * overlaid with key/value pairs from the conf object. Finally it will also
    * contain some hive specific configurations that do not change from DAG to DAG.
    *
-   * @param hiveConf Current hiveConf for the execution
+   * @param hiveConf Current conf for the execution
    * @return JobConf base configuration for job execution
    * @throws IOException
    */
index 1beb839..b35df69 100755 (executable)
@@ -37,7 +37,6 @@ import org.apache.hadoop.hive.common.JavaUtils;
 import org.apache.hadoop.hive.common.StringInternUtils;
 import org.apache.hadoop.hive.common.ValidReadTxnList;
 import org.apache.hadoop.hive.common.ValidTxnList;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.SerializationUtilities;
 import org.apache.hive.common.util.Ref;
 import org.slf4j.Logger;
index fbcd579..50bdce8 100644 (file)
@@ -81,8 +81,8 @@ import org.apache.hadoop.hive.metastore.HiveMetaHook;
 import org.apache.hadoop.hive.metastore.HiveMetaHookLoader;
 import org.apache.hadoop.hive.metastore.HiveMetaStore;
 import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
+import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.IMetaStoreClient;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.PartitionDropOptions;
 import org.apache.hadoop.hive.metastore.RawStore;
 import org.apache.hadoop.hive.metastore.RetryingMetaStoreClient;
@@ -137,6 +137,7 @@ import org.apache.hadoop.hive.metastore.api.UniqueConstraintsRequest;
 import org.apache.hadoop.hive.metastore.api.WMMapping;
 import org.apache.hadoop.hive.metastore.api.WMPool;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.exec.AbstractFileMergeOperator;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
@@ -876,7 +877,7 @@ public class Hive {
         tbl.setDbName(SessionState.get().getCurrentDatabase());
       }
       if (tbl.getCols().size() == 0 || tbl.getSd().getColsSize() == 0) {
-        tbl.setFields(MetaStoreUtils.getFieldsFromDeserializer(tbl.getTableName(),
+        tbl.setFields(HiveMetaStoreUtils.getFieldsFromDeserializer(tbl.getTableName(),
             tbl.getDeserializer()));
       }
       tbl.checkValidity(conf);
@@ -918,7 +919,7 @@ public class Hive {
 
   public static List<FieldSchema> getFieldsFromDeserializerForMsStorage(
       Table tbl, Deserializer deserializer) throws SerDeException, MetaException {
-    List<FieldSchema> schema = MetaStoreUtils.getFieldsFromDeserializer(
+    List<FieldSchema> schema = HiveMetaStoreUtils.getFieldsFromDeserializer(
         tbl.getTableName(), deserializer);
     for (FieldSchema field : schema) {
       field.setType(MetaStoreUtils.TYPE_FROM_DESERIALIZER);
@@ -2762,10 +2763,10 @@ private void constructOneLBLocationMap(FileStatus fSta,
       List<DropTableDesc.PartSpec> partSpecs, PartitionDropOptions dropOptions) throws HiveException {
     try {
       Table tbl = getTable(dbName, tblName);
-      List<ObjectPair<Integer, byte[]>> partExprs =
-          new ArrayList<ObjectPair<Integer,byte[]>>(partSpecs.size());
+      List<org.apache.hadoop.hive.metastore.utils.ObjectPair<Integer, byte[]>> partExprs =
+          new ArrayList<>(partSpecs.size());
       for (DropTableDesc.PartSpec partSpec : partSpecs) {
-        partExprs.add(new ObjectPair<Integer, byte[]>(partSpec.getPrefixLength(),
+        partExprs.add(new org.apache.hadoop.hive.metastore.utils.ObjectPair<>(partSpec.getPrefixLength(),
             SerializationUtilities.serializeExpressionToKryo(partSpec.getPartSpec())));
       }
       List<org.apache.hadoop.hive.metastore.api.Partition> tParts = getMSC().dropPartitions(
@@ -4189,7 +4190,7 @@ private void constructOneLBLocationMap(FileStatus fSta,
   public static List<FieldSchema> getFieldsFromDeserializer(String name,
       Deserializer serde) throws HiveException {
     try {
-      return MetaStoreUtils.getFieldsFromDeserializer(name, serde);
+      return HiveMetaStoreUtils.getFieldsFromDeserializer(name, serde);
     } catch (SerDeException e) {
       throw new HiveException("Error in getting fields from serde. "
           + e.getMessage(), e);
index 44026fa..6d10c10 100644 (file)
@@ -28,13 +28,14 @@ import java.util.Map;
 import java.util.Properties;
 
 import org.apache.hadoop.hive.common.StringInternUtils;
+import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.MetaException;
@@ -228,7 +229,7 @@ public class Partition implements Serializable {
   final public Deserializer getDeserializer() {
     if (deserializer == null) {
       try {
-        deserializer = MetaStoreUtils.getDeserializer(SessionState.getSessionConf(),
+        deserializer = HiveMetaStoreUtils.getDeserializer(SessionState.getSessionConf(),
             tPartition, table.getTTable());
       } catch (MetaException e) {
         throw new RuntimeException(e);
@@ -246,8 +247,8 @@ public class Partition implements Serializable {
   }
 
   public Properties getSchemaFromTableSchema(Properties tblSchema) {
-    return MetaStoreUtils.getPartSchemaFromTableSchema(tPartition.getSd(), table.getTTable().getSd(),
-        tPartition.getParameters(), table.getDbName(), table.getTableName(), table.getPartitionKeys(),
+    return MetaStoreUtils.getPartSchemaFromTableSchema(tPartition.getSd(),
+        tPartition.getParameters(),
         tblSchema);
   }
 
@@ -493,7 +494,7 @@ public class Partition implements Serializable {
           SessionState.getSessionConf(), serializationLib, table.getParameters())) {
         return Hive.getFieldsFromDeserializerForMsStorage(table, getDeserializer());
       }
-      return MetaStoreUtils.getFieldsFromDeserializer(table.getTableName(), getDeserializer());
+      return HiveMetaStoreUtils.getFieldsFromDeserializer(table.getTableName(), getDeserializer());
     } catch (Exception e) {
       LOG.error("Unable to get cols from serde: " +
           tPartition.getSd().getSerdeInfo().getSerializationLib(), e);
index 1c26200..80c7804 100644 (file)
@@ -30,17 +30,16 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.StatsSetupConst;
-import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.io.HdfsUtils;
 import org.apache.hadoop.hive.metastore.HiveMetaHookLoader;
 import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
 import org.apache.hadoop.hive.metastore.IMetaStoreClient;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.AlreadyExistsException;
 import org.apache.hadoop.hive.metastore.api.ColumnStatistics;
@@ -61,6 +60,8 @@ import org.apache.hadoop.hive.metastore.api.TableMeta;
 import org.apache.hadoop.hive.metastore.api.UnknownDBException;
 import org.apache.hadoop.hive.metastore.api.UnknownTableException;
 import org.apache.hadoop.hive.ql.parse.SemanticAnalyzer;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.utils.SecurityUtils;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.hive.shims.HadoopShims;
 import org.apache.hadoop.hive.shims.ShimLoader;
@@ -69,12 +70,12 @@ import org.apache.thrift.TException;
 
 public class SessionHiveMetaStoreClient extends HiveMetaStoreClient implements IMetaStoreClient {
 
-  SessionHiveMetaStoreClient(HiveConf conf, Boolean allowEmbedded) throws MetaException {
+  SessionHiveMetaStoreClient(Configuration conf, Boolean allowEmbedded) throws MetaException {
     super(conf, null, allowEmbedded);
   }
 
   SessionHiveMetaStoreClient(
-      HiveConf conf, HiveMetaHookLoader hookLoader, Boolean allowEmbedded) throws MetaException {
+      Configuration conf, HiveMetaHookLoader hookLoader, Boolean allowEmbedded) throws MetaException {
     super(conf, hookLoader, allowEmbedded);
   }
 
@@ -618,7 +619,7 @@ public class SessionHiveMetaStoreClient extends HiveMetaStoreClient implements I
         tablePath = new Path(table.getSd().getLocation());
         if (!getWh().isWritable(tablePath.getParent())) {
           throw new MetaException("Table metadata not deleted since " + tablePath.getParent() +
-              " is not writable by " + conf.getUser());
+              " is not writable by " + SecurityUtils.getUser());
         }
       } catch (IOException err) {
         MetaException metaException =
index a1cad9e..0debff6 100644 (file)
@@ -39,7 +39,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
@@ -49,6 +49,7 @@ import org.apache.hadoop.hive.metastore.api.SerDeInfo;
 import org.apache.hadoop.hive.metastore.api.SkewedInfo;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.io.HiveFileFormatUtils;
 import org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat;
@@ -268,7 +269,7 @@ public class Table implements Serializable {
   }
 
   final public Class<? extends Deserializer> getDeserializerClass() throws Exception {
-    return MetaStoreUtils.getDeserializerClass(SessionState.getSessionConf(), tTable);
+    return HiveMetaStoreUtils.getDeserializerClass(SessionState.getSessionConf(), tTable);
   }
 
   final public Deserializer getDeserializer(boolean skipConfError) {
@@ -280,7 +281,7 @@ public class Table implements Serializable {
 
   final public Deserializer getDeserializerFromMetaStore(boolean skipConfError) {
     try {
-      return MetaStoreUtils.getDeserializer(SessionState.getSessionConf(), tTable, skipConfError);
+      return HiveMetaStoreUtils.getDeserializer(SessionState.getSessionConf(), tTable, skipConfError);
     } catch (MetaException e) {
       throw new RuntimeException(e);
     }
@@ -640,7 +641,7 @@ public class Table implements Serializable {
           SessionState.getSessionConf(), serializationLib, tTable.getParameters())) {
         return Hive.getFieldsFromDeserializerForMsStorage(this, getDeserializer());
       } else {
-        return MetaStoreUtils.getFieldsFromDeserializer(getTableName(), getDeserializer());
+        return HiveMetaStoreUtils.getFieldsFromDeserializer(getTableName(), getDeserializer());
       }
     } catch (Exception e) {
       LOG.error("Unable to get field from serde: " + serializationLib, e);
index 1b7b425..f3d878d 100644 (file)
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hive.common.util.HiveStringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,7 +38,6 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.WMResourcePlan;
index c62d98f..a7fc3e9 100644 (file)
@@ -34,7 +34,6 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.exec.MapJoinOperator;
 import org.apache.hadoop.hive.ql.exec.Operator;
index fc1d4f9..31d2b23 100644 (file)
@@ -26,7 +26,6 @@ import java.util.Map;
 import java.util.Stack;
 
 import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Order;
 import org.apache.hadoop.hive.ql.exec.FileSinkOperator;
index b5891ab..9100c92 100644 (file)
@@ -32,7 +32,6 @@ import org.slf4j.LoggerFactory;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.FilterOperator;
 import org.apache.hadoop.hive.ql.exec.TableScanOperator;
 import org.apache.hadoop.hive.ql.io.AcidUtils;
index a3a35ff..85f198b 100644 (file)
@@ -31,11 +31,11 @@ import java.util.Stack;
 
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData;
 import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj;
 import org.apache.hadoop.hive.metastore.api.DoubleColumnStatsData;
 import org.apache.hadoop.hive.metastore.api.LongColumnStatsData;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.ColumnInfo;
 import org.apache.hadoop.hive.ql.exec.FetchTask;
 import org.apache.hadoop.hive.ql.exec.FileSinkOperator;
index b28315a..6dd08d2 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.apache.hadoop.hive.ql.optimizer.physical;
 
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.GroupByOperator;
 import org.apache.hadoop.hive.ql.exec.Operator;
 import org.apache.hadoop.hive.ql.exec.OperatorUtils;
index a06a672..a09b796 100644 (file)
@@ -24,6 +24,7 @@ import com.google.common.collect.Lists;
 import org.antlr.runtime.tree.CommonTree;
 import org.antlr.runtime.tree.Tree;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.io.AcidUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,7 +34,6 @@ import org.apache.hadoop.hive.common.JavaUtils;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.Database;
index 2400f9c..b253236 100644 (file)
 package org.apache.hadoop.hive.ql.parse;
 
 
-import org.apache.hadoop.hive.ql.metadata.HiveException;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.URI;
-import java.util.HashSet;
-import java.util.List;
-
-import org.antlr.runtime.tree.Tree;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hive.common.FileUtils;
-import org.apache.hadoop.hive.common.ValidReadTxnList;
-import org.apache.hadoop.hive.common.ValidTxnList;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
-import org.apache.hadoop.hive.ql.Context;
-import org.apache.hadoop.hive.ql.ErrorMsg;
-import org.apache.hadoop.hive.ql.QueryState;
-import org.apache.hadoop.hive.ql.exec.ReplCopyTask;
-import org.apache.hadoop.hive.ql.exec.Task;
-import org.apache.hadoop.hive.ql.exec.TaskFactory;
-import org.apache.hadoop.hive.ql.exec.Utilities;
-import org.apache.hadoop.hive.ql.hooks.ReadEntity;
-import org.apache.hadoop.hive.ql.hooks.WriteEntity;
-import org.apache.hadoop.hive.ql.metadata.Hive;
 import org.antlr.runtime.tree.Tree;
 import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.QueryState;
 import org.apache.hadoop.hive.ql.exec.Task;
 import org.apache.hadoop.hive.ql.exec.TaskFactory;
 import org.apache.hadoop.hive.ql.metadata.InvalidTableException;
-import org.apache.hadoop.hive.ql.metadata.Partition;
-import org.apache.hadoop.hive.ql.metadata.PartitionIterable;
 import org.apache.hadoop.hive.ql.metadata.Table;
-import org.apache.hadoop.hive.ql.plan.CopyWork;
-import org.slf4j.Logger;
 import org.apache.hadoop.hive.ql.parse.repl.dump.TableExport;
 import org.apache.hadoop.hive.ql.plan.ExportWork;
 
index a1b6cda..83d53bc 100644 (file)
@@ -26,7 +26,6 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.Database;
index 07742e0..28e3621 100644 (file)
@@ -65,7 +65,6 @@ import org.apache.hadoop.hive.common.StatsSetupConst.StatDB;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.conf.HiveConf.StrictChecks;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.TransactionalValidationListener;
 import org.apache.hadoop.hive.metastore.Warehouse;
@@ -6816,6 +6815,24 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
 
       checkImmutableTable(qb, dest_tab, dest_path, false);
 
+      // check for partition
+      List<FieldSchema> parts = dest_tab.getPartitionKeys();
+      if (parts != null && parts.size() > 0) { // table is partitioned
+        if (partSpec == null || partSpec.size() == 0) { // user did NOT specify partition
+          throw new SemanticException(generateErrorMessage(
+              qb.getParseInfo().getDestForClause(dest),
+              ErrorMsg.NEED_PARTITION_ERROR.getMsg()));
+        }
+        dpCtx = qbm.getDPCtx(dest);
+        if (dpCtx == null) {
+          dest_tab.validatePartColumnNames(partSpec, false);
+          dpCtx = new DynamicPartitionCtx(dest_tab, partSpec,
+              conf.getVar(HiveConf.ConfVars.DEFAULTPARTITIONNAME),
+              conf.getIntVar(HiveConf.ConfVars.DYNAMICPARTITIONMAXPARTSPERNODE));
+          qbm.setDPCtx(dest, dpCtx);
+        }
+      }
+
       // Check for dynamic partitions.
       dpCtx = checkDynPart(qb, qbm, dest_tab, partSpec, dest);
       if (dpCtx != null && dpCtx.getSPPath() != null) {
@@ -7402,7 +7419,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
     }
     try {
       FileSystem fs = dest_path.getFileSystem(conf);
-      if (! MetaStoreUtils.isDirEmpty(fs,dest_path)){
+      if (! org.apache.hadoop.hive.metastore.utils.FileUtils.isDirEmpty(fs,dest_path)){
         LOG.warn("Attempted write into an immutable table : "
             + dest_tab.getTableName() + " : " + dest_path);
         throw new SemanticException(
index 9e130dc..f6fb42c 100644 (file)
@@ -28,7 +28,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Order;
@@ -36,6 +35,7 @@ import org.apache.hadoop.hive.metastore.api.SQLForeignKey;
 import org.apache.hadoop.hive.metastore.api.SQLNotNullConstraint;
 import org.apache.hadoop.hive.metastore.api.SQLPrimaryKey;
 import org.apache.hadoop.hive.metastore.api.SQLUniqueConstraint;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.exec.DDLTask;
 import org.apache.hadoop.hive.ql.exec.Utilities;
index 92c9768..7f536fe 100644 (file)
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Objects;
 
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.io.AcidUtils;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.plan.Explain.Level;
index 4683c9c..66a4aa1 100644 (file)
@@ -19,7 +19,6 @@
 package org.apache.hadoop.hive.ql.plan;
 
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.io.AcidUtils;
 import org.apache.hadoop.hive.ql.plan.Explain.Level;
index d3a43df..915bddc 100644 (file)
@@ -31,8 +31,8 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.CopyOnFirstWriteProperties;
 import org.apache.hadoop.hive.common.StringInternUtils;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.io.HiveFileFormatUtils;
 import org.apache.hadoop.hive.ql.io.HiveOutputFormat;
@@ -87,7 +87,7 @@ public class PartitionDesc implements Serializable, Cloneable {
     if (Utilities.isInputFileFormatSelfDescribing(this)) {
       // if IF is self describing no need to send column info per partition, since its not used anyway.
       Table tbl = part.getTable();
-      setProperties(MetaStoreUtils.getSchemaWithoutCols(part.getTPartition().getSd(), part.getTPartition().getSd(),
+      setProperties(MetaStoreUtils.getSchemaWithoutCols(part.getTPartition().getSd(),
           part.getParameters(), tbl.getDbName(), tbl.getTableName(), tbl.getPartitionKeys()));
     } else {
       setProperties(part.getMetadataFromPartitionSchema());
index 81cc279..226118a 100644 (file)
@@ -34,9 +34,10 @@ import org.apache.hadoop.hive.common.JavaUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.llap.LlapOutputFormat;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.exec.ColumnInfo;
 import org.apache.hadoop.hive.ql.exec.RowSchema;
 import org.apache.hadoop.hive.ql.exec.TableScanOperator;
@@ -591,7 +592,7 @@ public final class PlanUtils {
     // last one for union column.
     List<FieldSchema> schemas = new ArrayList<FieldSchema>(length + 1);
     for (int i = 0; i < length; i++) {
-      schemas.add(MetaStoreUtils.getFieldSchemaFromTypeInfo(
+      schemas.add(HiveMetaStoreUtils.getFieldSchemaFromTypeInfo(
           fieldPrefix + outputColumnNames.get(i), cols.get(i).getTypeInfo()));
     }
 
@@ -608,7 +609,7 @@ public final class PlanUtils {
       unionTypes.add(TypeInfoFactory.getStructTypeInfo(names, types));
     }
     if (outputColumnNames.size() - length > 0) {
-      schemas.add(MetaStoreUtils.getFieldSchemaFromTypeInfo(
+      schemas.add(HiveMetaStoreUtils.getFieldSchemaFromTypeInfo(
           fieldPrefix + outputColumnNames.get(length),
           TypeInfoFactory.getUnionTypeInfo(unionTypes)));
     }
@@ -624,7 +625,7 @@ public final class PlanUtils {
       String fieldPrefix) {
     List<FieldSchema> schemas = new ArrayList<FieldSchema>(cols.size());
     for (int i = 0; i < cols.size(); i++) {
-      schemas.add(MetaStoreUtils.getFieldSchemaFromTypeInfo(fieldPrefix
+      schemas.add(HiveMetaStoreUtils.getFieldSchemaFromTypeInfo(fieldPrefix
           + outputColumnNames.get(i + start), cols.get(i).getTypeInfo()));
     }
     return schemas;
@@ -637,7 +638,7 @@ public final class PlanUtils {
       List<ExprNodeDesc> cols, String fieldPrefix) {
     List<FieldSchema> schemas = new ArrayList<FieldSchema>(cols.size());
     for (int i = 0; i < cols.size(); i++) {
-      schemas.add(MetaStoreUtils.getFieldSchemaFromTypeInfo(fieldPrefix + i,
+      schemas.add(HiveMetaStoreUtils.getFieldSchemaFromTypeInfo(fieldPrefix + i,
           cols.get(i).getTypeInfo()));
     }
     return schemas;
@@ -667,7 +668,7 @@ public final class PlanUtils {
       if (name.equals(String.valueOf(i))) {
         name = fieldPrefix + name;
       }
-      schemas.add(MetaStoreUtils.getFieldSchemaFromTypeInfo(name, cols.get(i)
+      schemas.add(HiveMetaStoreUtils.getFieldSchemaFromTypeInfo(name, cols.get(i)
           .getType()));
     }
     return schemas;
index 5202571..8569ffb 100644 (file)
@@ -23,6 +23,7 @@ import java.util.List;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterators;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
@@ -30,7 +31,6 @@ import org.apache.hadoop.hive.common.classification.InterfaceAudience.Private;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.MetaStorePreEventListener;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.InvalidOperationException;
index ecf3b9d..69b076a 100644 (file)
@@ -34,10 +34,10 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.EnvironmentContext;
 import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.CompilationOpContext;
 import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.exec.Task;
@@ -201,7 +201,7 @@ public class BasicStatsTask implements Serializable, IStatsProcessor {
     private String getAggregationPrefix0(Table table, Partition partition) throws MetaException {
 
       // prefix is of the form dbName.tblName
-      String prefix = table.getDbName() + "." + org.apache.hadoop.hive.metastore.utils.MetaStoreUtils.encodeTableName(table.getTableName());
+      String prefix = table.getDbName() + "." + MetaStoreUtils.encodeTableName(table.getTableName());
       // FIXME: this is a secret contract; reusein getAggrKey() creates a more closer relation to the StatsGatherer
       // prefix = work.getAggKey();
       prefix = prefix.toLowerCase();
index 8daa5c0..ab3cfc8 100644 (file)
@@ -23,7 +23,6 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.ValidTxnList;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.api.CompactionRequest;
 import org.apache.hadoop.hive.metastore.api.CompactionResponse;
 import org.apache.hadoop.hive.metastore.api.CompactionType;
index 319e0ee..2a1545f 100644 (file)
@@ -95,7 +95,7 @@ public class TestTxnCommands extends TxnCommandsBaseForTests {
     Path bucket = AcidUtils.createBucketFile(new Path(new Path(getWarehouseDir(), table.toString().toLowerCase()), AcidUtils.deltaSubdir(txnId, txnId, stmtId)), bucketNum);
     FileOutputStream delta = new FileOutputStream(testName.getMethodName() + "_" + bucket.getParent().getName() + "_" +  bucket.getName());
 //    try {
-//      FileDump.printJsonData(hiveConf, bucket.toString(), delta);
+//      FileDump.printJsonData(conf, bucket.toString(), delta);
 //    }
 //    catch(FileNotFoundException ex) {
       ;//this happens if you change BUCKET_COUNT
@@ -350,7 +350,6 @@ public class TestTxnCommands extends TxnCommandsBaseForTests {
     hiveConf.setTimeVar(HiveConf.ConfVars.HIVE_TXN_TIMEOUT, 1, TimeUnit.SECONDS);
     // Have to reset the conf when we change it so that the change takes affect
     houseKeeperService.setConf(hiveConf);
-    //hiveConf.setBoolVar(HiveConf.ConfVars.HIVETESTMODEFAILHEARTBEATER, true);
     runStatementOnDriver("start transaction");
     runStatementOnDriver("select count(*) from " + Table.ACIDTBL + " where a = 17");
     pause(750);
index 6e5ce8e..9ad7555 100644 (file)
       </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
-      <artifactId>hive-metastore</artifactId>
+      <artifactId>hive-standalone-metastore</artifactId>
       <version>${project.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
index e9a5830..fbfd57a 100644 (file)
@@ -38,7 +38,7 @@ public class EmbeddedThriftBinaryCLIService extends ThriftBinaryCLIService {
   @Override
   public synchronized void init(HiveConf hiveConf) {
        // Null HiveConf is passed in jdbc driver side code since driver side is supposed to be
-       // independent of hiveConf object. Create new HiveConf object here in this case.
+       // independent of conf object. Create new HiveConf object here in this case.
        if (hiveConf == null) {
          hiveConf = new HiveConf();
        }
index 89f7356..223be6a 100644 (file)
@@ -158,7 +158,7 @@ public class HiveServer2 extends CompositeService {
     }
     addService(thriftCLIService);
     super.init(hiveConf);
-    // Set host name in hiveConf
+    // Set host name in conf
     try {
       hiveConf.set(HiveConf.ConfVars.HIVE_SERVER2_THRIFT_BIND_HOST.varname, getServerHost());
     } catch (Throwable t) {
index 1dac783..1ac5da8 100644 (file)
@@ -32,7 +32,6 @@ import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.MetaStoreTestUtils;
 import org.apache.hive.service.Service;
 import org.apache.hive.service.auth.HiveAuthConstants;
-import org.apache.hive.service.auth.HiveAuthConstants.AuthTypes;
 import org.apache.hive.service.cli.OperationHandle;
 import org.apache.hive.service.cli.OperationState;
 import org.apache.hive.service.cli.OperationStatus;
index 1701182..cce3282 100644 (file)
        </exclusion>
      </exclusions>
     </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-mapreduce-client-core</artifactId>
+      <version>${hadoop.version}</version>
+      <optional>true</optional>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commmons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
     <!-- This is our one and only Hive dependency.-->
     <dependency>
       <groupId>org.apache.hive</groupId>
             <javax.jdo.option.ConnectionURL>jdbc:derby:memory:${test.tmp.dir}/junit_metastore_db;create=true</javax.jdo.option.ConnectionURL>
             <metastore.schema.verification>false</metastore.schema.verification>
             <test.tmp.dir>${test.tmp.dir}</test.tmp.dir>
-            <test.warehouse.dir>${test.warehouse.scheme}${test.warehouse.dir}</test.warehouse.dir>
+            <metastore.warehouse.dir>${test.warehouse.scheme}${test.warehouse.dir}</metastore.warehouse.dir>
           </systemPropertyVariables>
           <additionalClasspathElements>
             <additionalClasspathElement>${log4j.conf.dir}</additionalClasspathElement>
         </configuration>
       </plugin>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>build-helper-maven-plugin</artifactId>
         <version>3.0.0</version>
index a41b5ee..d5dea4d 100644 (file)
@@ -86,8 +86,6 @@ public class ColumnType {
 
   public static final String COLUMN_NAME_DELIMITER = "column.name.delimiter";
 
-  public static final String SERIALIZATION_FORMAT = "serialization.format";
-
   public static final Set<String> PrimitiveTypes = StringUtils.asSet(
     VOID_TYPE_NAME,
     BOOLEAN_TYPE_NAME,
@@ -239,4 +237,65 @@ public class ColumnType {
     }
     return false;
   }
+
+  // These aren't column types, they are info for how things are stored in thrift.
+  // It didn't seem useful to create another Constants class just for these though.
+  public static final String SERIALIZATION_FORMAT = "serialization.format";
+
+  public static final String SERIALIZATION_LIB = "serialization.lib";
+
+  public static final String SERIALIZATION_DDL = "serialization.ddl";
+
+  public static final char COLUMN_COMMENTS_DELIMITER = '\0';
+
+  private static HashMap<String, String> typeToThriftTypeMap;
+  static {
+    typeToThriftTypeMap = new HashMap<>();
+    typeToThriftTypeMap.put(BOOLEAN_TYPE_NAME, "bool");
+    typeToThriftTypeMap.put(TINYINT_TYPE_NAME, "byte");
+    typeToThriftTypeMap.put(SMALLINT_TYPE_NAME, "i16");
+    typeToThriftTypeMap.put(INT_TYPE_NAME, "i32");
+    typeToThriftTypeMap.put(BIGINT_TYPE_NAME, "i64");
+    typeToThriftTypeMap.put(DOUBLE_TYPE_NAME, "double");
+    typeToThriftTypeMap.put(FLOAT_TYPE_NAME, "float");
+    typeToThriftTypeMap.put(LIST_TYPE_NAME, "list");
+    typeToThriftTypeMap.put(MAP_TYPE_NAME, "map");
+    typeToThriftTypeMap.put(STRING_TYPE_NAME, "string");
+    typeToThriftTypeMap.put(BINARY_TYPE_NAME, "binary");
+    // These 4 types are not supported yet.
+    // We should define a complex type date in thrift that contains a single int
+    // member, and DynamicSerDe
+    // should convert it to date type at runtime.
+    typeToThriftTypeMap.put(DATE_TYPE_NAME, "date");
+    typeToThriftTypeMap.put(DATETIME_TYPE_NAME, "datetime");
+    typeToThriftTypeMap.put(TIMESTAMP_TYPE_NAME, "timestamp");
+    typeToThriftTypeMap.put(DECIMAL_TYPE_NAME, "decimal");
+    typeToThriftTypeMap.put(INTERVAL_YEAR_MONTH_TYPE_NAME, INTERVAL_YEAR_MONTH_TYPE_NAME);
+    typeToThriftTypeMap.put(INTERVAL_DAY_TIME_TYPE_NAME, INTERVAL_DAY_TIME_TYPE_NAME);
+  }
+
+  /**
+   * Convert type to ThriftType. We do that by tokenizing the type and convert
+   * each token.
+   */
+  public static String typeToThriftType(String type) {
+    StringBuilder thriftType = new StringBuilder();
+    int last = 0;
+    boolean lastAlphaDigit = Character.isLetterOrDigit(type.charAt(last));
+    for (int i = 1; i <= type.length(); i++) {
+      if (i == type.length()
+          || Character.isLetterOrDigit(type.charAt(i)) != lastAlphaDigit) {
+        String token = type.substring(last, i);
+        last = i;
+        String thriftToken = typeToThriftTypeMap.get(token);
+        thriftType.append(thriftToken == null ? token : thriftToken);
+        lastAlphaDigit = !lastAlphaDigit;
+      }
+    }
+    return thriftType.toString();
+  }
+
+  public static String getListType(String t) {
+    return "array<" + t + ">";
+  }
 }
index 13967d5..89354a2 100644 (file)
@@ -67,7 +67,7 @@ import java.util.Map.Entry;
  */
 public class HiveAlterHandler implements AlterHandler {
 
-  protected Configuration hiveConf;
+  protected Configuration conf;
   private static final Logger LOG = LoggerFactory.getLogger(HiveAlterHandler.class
       .getName());
 
@@ -76,13 +76,13 @@ public class HiveAlterHandler implements AlterHandler {
   // is not in the scope of the fix for HIVE-17942.
   @Override
   public Configuration getConf() {
-    return hiveConf;
+    return conf;
   }
 
   @Override
   @SuppressWarnings("nls")
   public void setConf(Configuration conf) {
-    hiveConf = conf;
+    this.conf = conf;
   }
 
   @Override
@@ -266,7 +266,7 @@ public class HiveAlterHandler implements AlterHandler {
           if (dataWasMoved) {
 
             int partsToProcess = parts.size();
-            int partitionBatchSize = MetastoreConf.getIntVar(hiveConf,
+            int partitionBatchSize = MetastoreConf.getIntVar(handler.getConf(),
                 MetastoreConf.ConfVars.BATCH_RETRIEVE_MAX);
             int batchStart = 0;
             while (partsToProcess > 0) {
@@ -293,7 +293,7 @@ public class HiveAlterHandler implements AlterHandler {
         }
       } else {
         // operations other than table rename
-        if (MetaStoreUtils.requireCalStats(handler.getConf(), null, null, newt, environmentContext) &&
+        if (MetaStoreUtils.requireCalStats(null, null, newt, environmentContext) &&
             !isPartitionedTable) {
           Database db = msdb.getDatabase(newDbName);
           // Update table stats. For partitioned table, we update stats in alterPartition()
@@ -447,7 +447,7 @@ public class HiveAlterHandler implements AlterHandler {
       try {
         msdb.openTransaction();
         oldPart = msdb.getPartition(dbname, name, new_part.getValues());
-        if (MetaStoreUtils.requireCalStats(handler.getConf(), oldPart, new_part, tbl, environmentContext)) {
+        if (MetaStoreUtils.requireCalStats(oldPart, new_part, tbl, environmentContext)) {
           // if stats are same, no need to update
           if (MetaStoreUtils.isFastStatsSame(oldPart, new_part)) {
             MetaStoreUtils.updateBasicState(environmentContext, new_part.getParameters());
@@ -580,7 +580,7 @@ public class HiveAlterHandler implements AlterHandler {
         new_part.getSd().setLocation(oldPart.getSd().getLocation());
       }
 
-      if (MetaStoreUtils.requireCalStats(handler.getConf(), oldPart, new_part, tbl, environmentContext)) {
+      if (MetaStoreUtils.requireCalStats(oldPart, new_part, tbl, environmentContext)) {
         MetaStoreUtils.updatePartitionStatsFast(new_part, wh, false, true, environmentContext);
       }
 
@@ -672,7 +672,7 @@ public class HiveAlterHandler implements AlterHandler {
         oldParts.add(oldTmpPart);
         partValsList.add(tmpPart.getValues());
 
-        if (MetaStoreUtils.requireCalStats(handler.getConf(), oldTmpPart, tmpPart, tbl, environmentContext)) {
+        if (MetaStoreUtils.requireCalStats(oldTmpPart, tmpPart, tbl, environmentContext)) {
           // Check if stats are same, no need to update
           if (MetaStoreUtils.isFastStatsSame(oldTmpPart, tmpPart)) {
             MetaStoreUtils.updateBasicState(environmentContext, tmpPart.getParameters());
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -19,7 +19,6 @@
 package org.apache.hadoop.hive.metastore;
 
 import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_DATABASE_NAME;
-import static org.apache.hadoop.hive.metastore.MetaStoreUtils.isIndexTable;
 
 import java.io.IOException;
 import java.lang.reflect.Constructor;
@@ -49,25 +48,22 @@ import java.security.PrivilegedExceptionAction;
 
 import javax.security.auth.login.LoginException;
 
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hive.common.ObjectPair;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.common.ValidTxnList;
-import org.apache.hadoop.hive.common.auth.HiveAuthUtils;
-import org.apache.hadoop.hive.common.classification.InterfaceAudience;
-import org.apache.hadoop.hive.common.classification.InterfaceAudience.Public;
-import org.apache.hadoop.hive.common.classification.InterfaceStability.Unstable;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
-import org.apache.hadoop.hive.conf.HiveConfUtil;
 import org.apache.hadoop.hive.metastore.api.*;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
 import org.apache.hadoop.hive.metastore.partition.spec.PartitionSpecProxy;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
 import org.apache.hadoop.hive.metastore.txn.TxnUtils;
 import org.apache.hadoop.hive.metastore.utils.SecurityUtils;
-import org.apache.hadoop.hive.shims.Utils;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
+import org.apache.hadoop.hive.metastore.utils.ObjectPair;
+import org.apache.hadoop.hive.metastore.utils.SecurityUtils;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.thrift.TApplicationException;
@@ -92,8 +88,8 @@ import com.google.common.collect.Lists;
  * For users who require retry mechanism when the connection between metastore and client is
  * broken, RetryingMetaStoreClient class should be used.
  */
-@Public
-@Unstable
+@InterfaceAudience.Public
+@InterfaceStability.Evolving
 public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   /**
    * Capabilities of the current client. If this client talks to a MetaStore server in a manner
@@ -112,7 +108,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   private boolean isConnected = false;
   private URI metastoreUris[];
   private final HiveMetaHookLoader hookLoader;
-  protected final HiveConf conf;  // Keep a copy of HiveConf so if Session conf changes, we may need to get a new HMS client.
+  protected final Configuration conf;  // Keep a copy of HiveConf so if Session conf changes, we may need to get a new HMS client.
   protected boolean fastpath = false;
   private String tokenStrForm;
   private final boolean localMetaStore;
@@ -130,63 +126,53 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
 
   static final protected Logger LOG = LoggerFactory.getLogger(HiveMetaStoreClient.class);
 
-  public HiveMetaStoreClient(HiveConf conf) throws MetaException {
+  public HiveMetaStoreClient(Configuration conf) throws MetaException {
     this(conf, null, true);
   }
 
-  public HiveMetaStoreClient(HiveConf conf, HiveMetaHookLoader hookLoader) throws MetaException {
+  public HiveMetaStoreClient(Configuration conf, HiveMetaHookLoader hookLoader) throws MetaException {
     this(conf, hookLoader, true);
   }
 
-  public HiveMetaStoreClient(HiveConf conf, HiveMetaHookLoader hookLoader, Boolean allowEmbedded)
+  public HiveMetaStoreClient(Configuration conf, HiveMetaHookLoader hookLoader, Boolean allowEmbedded)
     throws MetaException {
 
     this.hookLoader = hookLoader;
     if (conf == null) {
-      conf = new HiveConf(HiveMetaStoreClient.class);
+      conf = MetastoreConf.newMetastoreConf();
       this.conf = conf;
     } else {
-      this.conf = new HiveConf(conf);
+      this.conf = new Configuration(conf);
     }
-    version = HiveConf.getBoolVar(conf, ConfVars.HIVE_IN_TEST) ? TEST_VERSION : VERSION;
+    version = MetastoreConf.getBoolVar(conf, ConfVars.HIVE_IN_TEST) ? TEST_VERSION : VERSION;
     filterHook = loadFilterHooks();
-    fileMetadataBatchSize = HiveConf.getIntVar(
-        conf, HiveConf.ConfVars.METASTORE_BATCH_RETRIEVE_OBJECTS_MAX);
+    fileMetadataBatchSize = MetastoreConf.getIntVar(
+        conf, ConfVars.BATCH_RETRIEVE_OBJECTS_MAX);
 
-    String msUri = conf.getVar(ConfVars.METASTOREURIS);
-    localMetaStore = HiveConfUtil.isEmbeddedMetaStore(msUri);
+    String msUri = MetastoreConf.getVar(conf, ConfVars.THRIFT_URIS);
+    localMetaStore = MetastoreConf.isEmbeddedMetaStore(msUri);
     if (localMetaStore) {
       if (!allowEmbedded) {
         throw new MetaException("Embedded metastore is not allowed here. Please configure "
-            + ConfVars.METASTOREURIS.varname + "; it is currently set to [" + msUri + "]");
+            + ConfVars.THRIFT_URIS.toString() + "; it is currently set to [" + msUri + "]");
       }
       // instantiate the metastore server handler directly instead of connecting
       // through the network
-      if (conf.getBoolVar(ConfVars.METASTORE_FASTPATH)) {
-        client = new HiveMetaStore.HMSHandler("hive client", this.conf, true);
-        fastpath = true;
-      } else {
-        client = HiveMetaStore.newRetryingHMSHandler("hive client", this.conf, true);
-      }
+      client = HiveMetaStore.newRetryingHMSHandler("hive client", this.conf, true);
       isConnected = true;
       snapshotActiveConf();
       return;
-    } else {
-      if (conf.getBoolVar(ConfVars.METASTORE_FASTPATH)) {
-        throw new RuntimeException("You can't set hive.metastore.fastpath to true when you're " +
-            "talking to the thrift metastore service.  You must run the metastore locally.");
-      }
     }
 
     // get the number retries
-    retries = HiveConf.getIntVar(conf, HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES);
-    retryDelaySeconds = conf.getTimeVar(
-        ConfVars.METASTORE_CLIENT_CONNECT_RETRY_DELAY, TimeUnit.SECONDS);
+    retries = MetastoreConf.getIntVar(conf, ConfVars.THRIFT_CONNECTION_RETRIES);
+    retryDelaySeconds = MetastoreConf.getTimeVar(conf,
+        ConfVars.CLIENT_CONNECT_RETRY_DELAY, TimeUnit.SECONDS);
 
     // user wants file store based configuration
-    if (conf.getVar(HiveConf.ConfVars.METASTOREURIS) != null) {
-      String metastoreUrisString[] = conf.getVar(
-          HiveConf.ConfVars.METASTOREURIS).split(",");
+    if (MetastoreConf.getVar(conf, ConfVars.THRIFT_URIS) != null) {
+      String metastoreUrisString[] = MetastoreConf.getVar(conf,
+          ConfVars.THRIFT_URIS).split(",");
       metastoreUris = new URI[metastoreUrisString.length];
       try {
         int i = 0;
@@ -245,7 +231,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
         String delegationTokenStr = getDelegationToken(proxyUser, proxyUser);
         SecurityUtils.setTokenStr(UserGroupInformation.getCurrentUser(), delegationTokenStr,
             delegationTokenPropString);
-        this.conf.setVar(ConfVars.METASTORE_TOKEN_SIGNATURE, delegationTokenPropString);
+        MetastoreConf.setVar(this.conf, ConfVars.TOKEN_SIGNATURE, delegationTokenPropString);
         close();
       } catch (Exception e) {
         LOG.error("Error while setting delegation token for " + proxyUser, e);
@@ -261,26 +247,15 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   }
 
   private MetaStoreFilterHook loadFilterHooks() throws IllegalStateException {
-    Class<? extends MetaStoreFilterHook> authProviderClass = conf.
-        getClass(HiveConf.ConfVars.METASTORE_FILTER_HOOK.varname,
-            DefaultMetaStoreFilterHookImpl.class,
+    Class<? extends MetaStoreFilterHook> authProviderClass = MetastoreConf.
+        getClass(conf, ConfVars.FILTER_HOOK, DefaultMetaStoreFilterHookImpl.class,
             MetaStoreFilterHook.class);
     String msg = "Unable to create instance of " + authProviderClass.getName() + ": ";
     try {
       Constructor<? extends MetaStoreFilterHook> constructor =
           authProviderClass.getConstructor(Configuration.class);
       return constructor.newInstance(conf);
-    } catch (NoSuchMethodException e) {
-      throw new IllegalStateException(msg + e.getMessage(), e);
-    } catch (SecurityException e) {
-      throw new IllegalStateException(msg + e.getMessage(), e);
-    } catch (InstantiationException e) {
-      throw new IllegalStateException(msg + e.getMessage(), e);
-    } catch (IllegalAccessException e) {
-      throw new IllegalStateException(msg + e.getMessage(), e);
-    } catch (IllegalArgumentException e) {
-      throw new IllegalStateException(msg + e.getMessage(), e);
-    } catch (InvocationTargetException e) {
+    } catch (NoSuchMethodException | SecurityException | IllegalAccessException | InstantiationException | IllegalArgumentException | InvocationTargetException e) {
       throw new IllegalStateException(msg + e.getMessage(), e);
     }
   }
@@ -311,7 +286,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   }
 
   @Override
-  public boolean isCompatibleWith(HiveConf conf) {
+  public boolean isCompatibleWith(Configuration conf) {
     // Make a copy of currentMetaVars, there is a race condition that
        // currentMetaVars might be changed during the execution of the method
     Map<String, String> currentMetaVarsCopy = currentMetaVars;
@@ -319,13 +294,13 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
       return false; // recreate
     }
     boolean compatible = true;
-    for (ConfVars oneVar : HiveConf.metaVars) {
+    for (ConfVars oneVar : MetastoreConf.metaVars) {
       // Since metaVars are all of different types, use string for comparison
-      String oldVar = currentMetaVarsCopy.get(oneVar.varname);
-      String newVar = conf.get(oneVar.varname, "");
+      String oldVar = currentMetaVarsCopy.get(oneVar.getVarname());
+      String newVar = MetastoreConf.getAsString(conf, oneVar);
       if (oldVar == null ||
           (oneVar.isCaseSensitive() ? !oldVar.equals(newVar) : !oldVar.equalsIgnoreCase(newVar))) {
-        LOG.info("Mestastore configuration " + oneVar.varname +
+        LOG.info("Mestastore configuration " + oneVar.toString() +
             " changed from " + oldVar + " to " + newVar);
         compatible = false;
       }
@@ -335,7 +310,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
 
   @Override
   public void setHiveAddedJars(String addedJars) {
-    HiveConf.setVar(conf, ConfVars.HIVEADDEDJARS, addedJars);
+    MetastoreConf.setVar(conf, ConfVars.ADDED_JARS, addedJars);
   }
 
   @Override
@@ -408,12 +383,12 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   private void open() throws MetaException {
     isConnected = false;
     TTransportException tte = null;
-    boolean useSSL = conf.getBoolVar(ConfVars.HIVE_METASTORE_USE_SSL);
-    boolean useSasl = conf.getBoolVar(ConfVars.METASTORE_USE_THRIFT_SASL);
-    boolean useFramedTransport = conf.getBoolVar(ConfVars.METASTORE_USE_THRIFT_FRAMED_TRANSPORT);
-    boolean useCompactProtocol = conf.getBoolVar(ConfVars.METASTORE_USE_THRIFT_COMPACT_PROTOCOL);
-    int clientSocketTimeout = (int) conf.getTimeVar(
-        ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS);
+    boolean useSSL = MetastoreConf.getBoolVar(conf, ConfVars.USE_SSL);
+    boolean useSasl = MetastoreConf.getBoolVar(conf, ConfVars.USE_THRIFT_SASL);
+    boolean useFramedTransport = MetastoreConf.getBoolVar(conf, ConfVars.USE_THRIFT_FRAMED_TRANSPORT);
+    boolean useCompactProtocol = MetastoreConf.getBoolVar(conf, ConfVars.USE_THRIFT_COMPACT_PROTOCOL);
+    int clientSocketTimeout = (int) MetastoreConf.getTimeVar(conf,
+        ConfVars.CLIENT_SOCKET_TIMEOUT, TimeUnit.MILLISECONDS);
 
     for (int attempt = 0; !isConnected && attempt < retries; ++attempt) {
       for (URI store : metastoreUris) {
@@ -422,16 +397,17 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
         try {
           if (useSSL) {
             try {
-              String trustStorePath = conf.getVar(ConfVars.HIVE_METASTORE_SSL_TRUSTSTORE_PATH).trim();
+              String trustStorePath = MetastoreConf.getVar(conf, ConfVars.SSL_TRUSTSTORE_PATH).trim();
               if (trustStorePath.isEmpty()) {
-                throw new IllegalArgumentException(ConfVars.HIVE_METASTORE_SSL_TRUSTSTORE_PATH.varname
+                throw new IllegalArgumentException(ConfVars.SSL_TRUSTSTORE_PATH.toString()
                     + " Not configured for SSL connection");
               }
               String trustStorePassword =
                   MetastoreConf.getPassword(conf, MetastoreConf.ConfVars.SSL_TRUSTSTORE_PASSWORD);
 
               // Create an SSL socket and connect
-              transport = HiveAuthUtils.getSSLSocket(store.getHost(), store.getPort(), clientSocketTimeout, trustStorePath, trustStorePassword );
+              transport = SecurityUtils.getSSLSocket(store.getHost(), store.getPort(), clientSocketTimeout,
+                  trustStorePath, trustStorePassword );
               LOG.info("Opened an SSL connection to metastore, current connections: " + connCount.incrementAndGet());
             } catch(IOException e) {
               throw new IllegalArgumentException(e);
@@ -454,7 +430,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
               // this should happen on the map/reduce tasks if the client added the
               // tokens into hadoop's credential store in the front end during job
               // submission.
-              String tokenSig = conf.getVar(ConfVars.METASTORE_TOKEN_SIGNATURE);
+              String tokenSig = MetastoreConf.getVar(conf, ConfVars.TOKEN_SIGNATURE);
               // tokenSig could be null
               tokenStrForm = SecurityUtils.getTokenStrForm(tokenSig);
 
@@ -467,7 +443,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
               } else {
                 LOG.info("HMSC::open(): Could not find delegation token. Creating KERBEROS-based thrift connection.");
                 String principalConfig =
-                    conf.getVar(HiveConf.ConfVars.METASTORE_KERBEROS_PRINCIPAL);
+                    MetastoreConf.getVar(conf, ConfVars.KERBEROS_PRINCIPAL);
                 transport = authBridge.createClientTransport(
                     principalConfig, store.getHost(), "KERBEROS", null,
                     transport, MetaStoreUtils.getMetaStoreSaslProperties(conf, useSSL));
@@ -505,10 +481,10 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
             }
           }
 
-          if (isConnected && !useSasl && conf.getBoolVar(ConfVars.METASTORE_EXECUTE_SET_UGI)){
+          if (isConnected && !useSasl && MetastoreConf.getBoolVar(conf, ConfVars.EXECUTE_SET_UGI)){
             // Call set_ugi, only in unsecure mode.
             try {
-              UserGroupInformation ugi = Utils.getUGI();
+              UserGroupInformation ugi = SecurityUtils.getUGI();
               client.set_ugi(ugi.getUserName(), Arrays.asList(ugi.getGroupNames()));
             } catch (LoginException e) {
               LOG.warn("Failed to do login. set_ugi() is not successful, " +
@@ -549,9 +525,9 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   }
 
   private void snapshotActiveConf() {
-    currentMetaVars = new HashMap<String, String>(HiveConf.metaVars.length);
-    for (ConfVars oneVar : HiveConf.metaVars) {
-      currentMetaVars.put(oneVar.varname, conf.get(oneVar.varname, ""));
+    currentMetaVars = new HashMap<>(MetastoreConf.metaVars.length);
+    for (ConfVars oneVar : MetastoreConf.metaVars) {
+      currentMetaVars.put(oneVar.getVarname(), MetastoreConf.getAsString(conf, oneVar));
     }
   }
 
@@ -599,15 +575,12 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
    * @see org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore.Iface#add_partition(org.apache.hadoop.hive.metastore.api.Partition)
    */
   @Override
-  public Partition add_partition(Partition new_part)
-      throws InvalidObjectException, AlreadyExistsException, MetaException,
-      TException {
+  public Partition add_partition(Partition new_part) throws TException {
     return add_partition(new_part, null);
   }
 
   public Partition add_partition(Partition new_part, EnvironmentContext envContext)
-      throws InvalidObjectException, AlreadyExistsException, MetaException,
-      TException {
+      throws TException {
     Partition p = client.add_partition_with_environment_context(new_part, envContext);
     return fastpath ? p : deepCopy(p);
   }
@@ -621,18 +594,15 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
    * @see org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore.Iface#add_partitions(List)
    */
   @Override
-  public int add_partitions(List<Partition> new_parts)
-      throws InvalidObjectException, AlreadyExistsException, MetaException,
-      TException {
+  public int add_partitions(List<Partition> new_parts) throws TException {
     return client.add_partitions(new_parts);
   }
 
   @Override
   public List<Partition> add_partitions(
-      List<Partition> parts, boolean ifNotExists, boolean needResults)
-      throws InvalidObjectException, AlreadyExistsException, MetaException, TException {
+      List<Partition> parts, boolean ifNotExists, boolean needResults) throws TException {
     if (parts.isEmpty()) {
-      return needResults ? new ArrayList<Partition>() : null;
+      return needResults ? new ArrayList<>() : null;
     }
     Partition part = parts.get(0);
     AddPartitionsRequest req = new AddPartitionsRequest(
@@ -661,14 +631,12 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
    */
   @Override
   public Partition appendPartition(String db_name, String table_name,
-      List<String> part_vals) throws InvalidObjectException,
-      AlreadyExistsException, MetaException, TException {
+      List<String> part_vals) throws TException {
     return appendPartition(db_name, table_name, part_vals, null);
   }
 
   public Partition appendPartition(String db_name, String table_name, List<String> part_vals,
-      EnvironmentContext envContext) throws InvalidObjectException, AlreadyExistsException,
-      MetaException, TException {
+      EnvironmentContext envContext) throws TException {
     Partition p = client.append_partition_with_environment_context(db_name, table_name,
         part_vals, envContext);
     return fastpath ? p : deepCopy(p);
@@ -676,13 +644,12 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
 
   @Override
   public Partition appendPartition(String dbName, String tableName, String partName)
-      throws InvalidObjectException, AlreadyExistsException, MetaException, TException {
+      throws TException {
     return appendPartition(dbName, tableName, partName, null);
   }
 
   public Partition appendPartition(String dbName, String tableName, String partName,
-      EnvironmentContext envContext) throws InvalidObjectException, AlreadyExistsException,
-      MetaException, TException {
+      EnvironmentContext envContext) throws TException {
     Partition p = client.append_partition_by_name_with_environment_context(dbName, tableName,
         partName, envContext);
     return fastpath ? p : deepCopy(p);
@@ -926,7 +893,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   }
 
   private static EnvironmentContext getEnvironmentContextWithIfPurgeSet() {
-    Map<String, String> warehouseOptions = new HashMap<String, String>();
+    Map<String, String> warehouseOptions = new HashMap<>();
     warehouseOptions.put("ifPurge", "TRUE");
     return new EnvironmentContext(warehouseOptions);
   }
@@ -985,7 +952,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
                                         List<ObjectPair<Integer, byte[]>> partExprs, PartitionDropOptions options)
       throws TException {
     RequestPartsSpec rps = new RequestPartsSpec();
-    List<DropPartitionsExpr> exprs = new ArrayList<DropPartitionsExpr>(partExprs.size());
+    List<DropPartitionsExpr> exprs = new ArrayList<>(partExprs.size());
     for (ObjectPair<Integer, byte[]> partExpr : partExprs) {
       DropPartitionsExpr dpe = new DropPartitionsExpr();
       dpe.setExpr(partExpr.getSecond());
@@ -1052,8 +1019,8 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
     //build new environmentContext with ifPurge;
     EnvironmentContext envContext = null;
     if(ifPurge){
-      Map<String, String> warehouseOptions = null;
-      warehouseOptions = new HashMap<String, String>();
+      Map<String, String> warehouseOptions;
+      warehouseOptions = new HashMap<>();
       warehouseOptions.put("ifPurge", "TRUE");
       envContext = new EnvironmentContext(warehouseOptions);
     }
@@ -1112,7 +1079,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
       }
       return;
     }
-    if (isIndexTable(tbl)) {
+    if (MetaStoreUtils.isIndexTable(tbl)) {
       throw new UnsupportedOperationException("Cannot drop index tables");
     }
     HiveMetaHook hook = getHook(tbl);
@@ -1189,7 +1156,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
     Map<String, Type> result = null;
     Map<String, Type> fromClient = client.get_type_all(name);
     if (fromClient != null) {
-      result = new LinkedHashMap<String, Type>();
+      result = new LinkedHashMap<>();
       for (String key : fromClient.keySet()) {
         result.put(key, deepCopy(fromClient.get(key)));
       }
@@ -1312,7 +1279,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
     if (max_parts >= 0) {
       req.setMaxParts(max_parts);
     }
-    PartitionsByExprResult r = null;
+    PartitionsByExprResult r;
     try {
       r = client.get_partitions_by_expr(req);
     } catch (TApplicationException te) {
@@ -1489,7 +1456,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
       sources.put(meta.getDbName() + "." + meta.getTableName(), meta);
       List<String> tables = dbTables.get(meta.getDbName());
       if (tables == null) {
-        dbTables.put(meta.getDbName(), tables = new ArrayList<String>());
+        dbTables.put(meta.getDbName(), tables = new ArrayList<>());
       }
       tables.add(meta.getTableName());
     }
@@ -1809,7 +1776,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
       throws MetaException, TException, UnknownTableException,
       UnknownDBException {
       EnvironmentContext envCxt = null;
-      String addedJars = conf.getVar(ConfVars.HIVEADDEDJARS);
+      String addedJars = MetastoreConf.getVar(conf, ConfVars.ADDED_JARS);
       if(org.apache.commons.lang.StringUtils.isNotBlank(addedJars)) {
          Map<String, String> props = new HashMap<String, String>();
          props.put("hive.added.jars.path", addedJars);
@@ -2104,7 +2071,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   MetaException, TException, IOException {
     //a convenience method that makes the intended owner for the delegation
     //token request the current user
-    String owner = conf.getUser();
+    String owner = SecurityUtils.getUser();
     return getDelegationToken(owner, renewerKerberosPrincipalName);
   }
 
@@ -2493,7 +2460,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
     List<String> colNames, List<String> partNames) throws NoSuchObjectException, MetaException, TException {
     if (colNames.isEmpty() || partNames.isEmpty()) {
       LOG.debug("Columns is empty or partNames is empty : Short-circuiting stats eval on client side.");
-      return new AggrStats(new ArrayList<ColumnStatisticsObj>(),0); // Nothing to aggregate
+      return new AggrStats(new ArrayList<>(),0); // Nothing to aggregate
     }
     PartitionsStatsRequest req = new PartitionsStatsRequest(dbName, tblName, colNames, partNames);
     return client.get_aggr_stats_for(req);
@@ -2612,7 +2579,7 @@ public class HiveMetaStoreClient implements IMetaStoreClient, AutoCloseable {
   }
 
   @Override
-  public boolean isSameConfObj(HiveConf c) {
+  public boolean isSameConfObj(Configuration c) {
     return conf == c;
   }
 
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -27,13 +27,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.hadoop.hive.common.ObjectPair;
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.common.ValidTxnList;
-import org.apache.hadoop.hive.common.classification.InterfaceAudience;
-import org.apache.hadoop.hive.common.classification.InterfaceAudience.Public;
-import org.apache.hadoop.hive.common.classification.InterfaceStability.Evolving;
 import org.apache.hadoop.hive.common.classification.RetrySemantics;
-import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.annotation.NoReconnect;
 import org.apache.hadoop.hive.metastore.api.AggrStats;
 import org.apache.hadoop.hive.metastore.api.AlreadyExistsException;
@@ -110,20 +108,21 @@ import org.apache.hadoop.hive.metastore.api.UnknownTableException;
 import org.apache.hadoop.hive.metastore.api.WMMapping;
 import org.apache.hadoop.hive.metastore.api.WMPool;
 import org.apache.hadoop.hive.metastore.partition.spec.PartitionSpecProxy;
+import org.apache.hadoop.hive.metastore.utils.ObjectPair;
 import org.apache.thrift.TException;
 
 /**
  * Wrapper around hive metastore thrift api
  */
-@Public
-@Evolving
+@InterfaceAudience.Public
+@InterfaceStability.Evolving
 public interface IMetaStoreClient {
 
   /**
    * Returns whether current client is compatible with conf argument or not
    * @return
    */
-  boolean isCompatibleWith(HiveConf conf);
+  boolean isCompatibleWith(Configuration conf);
 
   /**
    * Set added jars path info to MetaStoreClient.
@@ -807,8 +806,8 @@ public interface IMetaStoreClient {
                         PartitionDropOptions options) throws TException;
 
   List<Partition> dropPartitions(String dbName, String tblName,
-      List<ObjectPair<Integer, byte[]>> partExprs, boolean deleteData,
-      boolean ifExists) throws NoSuchObjectException, MetaException, TException;
+                                 List<ObjectPair<Integer, byte[]>> partExprs, boolean deleteData,
+                                 boolean ifExists) throws NoSuchObjectException, MetaException, TException;
 
   List<Partition> dropPartitions(String dbName, String tblName,
       List<ObjectPair<Integer, byte[]>> partExprs, boolean deleteData,
@@ -1725,7 +1724,7 @@ public interface IMetaStoreClient {
    */
   void putFileMetadata(List<Long> fileIds, List<ByteBuffer> metadata) throws TException;
 
-  boolean isSameConfObj(HiveConf c);
+  boolean isSameConfObj(Configuration c);
 
   boolean cacheFileMetadata(String dbName, String tableName, String partName,
       boolean allParts) throws TException;
index 2fd2268..0add003 100644 (file)
@@ -84,7 +84,7 @@ public class RawStoreProxy implements InvocationHandler {
   private void init() throws MetaException {
     // Using the hook on startup ensures that the hook always has priority
     // over settings in *.xml.  The thread local conf needs to be used because at this point
-    // it has already been initialized using hiveConf.
+    // it has already been initialized using conf.
     MetaStoreInit.updateConnectionURL(hiveConf, getConf(), null, metaStoreInitData);
   }
 
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -27,15 +27,17 @@ import java.lang.reflect.Proxy;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
-import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.common.classification.RetrySemantics;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
+import org.apache.hadoop.hive.metastore.utils.JavaUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.hadoop.hive.common.classification.InterfaceAudience.Public;
-import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.annotation.NoReconnect;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.security.UserGroupInformation;
@@ -53,7 +55,7 @@ import com.google.common.annotations.VisibleForTesting;
  * each call.
  *
  */
-@Public
+@InterfaceAudience.Public
 public class RetryingMetaStoreClient implements InvocationHandler {
 
   private static final Logger LOG = LoggerFactory.getLogger(RetryingMetaStoreClient.class.getName());
@@ -68,9 +70,9 @@ public class RetryingMetaStoreClient implements InvocationHandler {
   private boolean localMetaStore;
 
 
-  protected RetryingMetaStoreClient(HiveConf hiveConf, Class<?>[] constructorArgTypes,
-      Object[] constructorArgs, ConcurrentHashMap<String, Long> metaCallTimeMap,
-      Class<? extends IMetaStoreClient> msClientClass) throws MetaException {
+  protected RetryingMetaStoreClient(Configuration conf, Class<?>[] constructorArgTypes,
+                                    Object[] constructorArgs, ConcurrentHashMap<String, Long> metaCallTimeMap,
+                                    Class<? extends IMetaStoreClient> msClientClass) throws MetaException {
 
     this.ugi = getUGI();
 
@@ -78,20 +80,19 @@ public class RetryingMetaStoreClient implements InvocationHandler {
       LOG.warn("RetryingMetaStoreClient unable to determine current user UGI.");
     }
 
-    this.retryLimit = hiveConf.getIntVar(HiveConf.ConfVars.METASTORETHRIFTFAILURERETRIES);
-    this.retryDelaySeconds = hiveConf.getTimeVar(
-        HiveConf.ConfVars.METASTORE_CLIENT_CONNECT_RETRY_DELAY, TimeUnit.SECONDS);
+    this.retryLimit = MetastoreConf.getIntVar(conf, ConfVars.THRIFT_FAILURE_RETRIES);
+    this.retryDelaySeconds = MetastoreConf.getTimeVar(conf,
+        ConfVars.CLIENT_CONNECT_RETRY_DELAY, TimeUnit.SECONDS);
     this.metaCallTimeMap = metaCallTimeMap;
-    this.connectionLifeTimeInMillis = hiveConf.getTimeVar(
-        HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_LIFETIME, TimeUnit.MILLISECONDS);
+    this.connectionLifeTimeInMillis = MetastoreConf.getTimeVar(conf,
+        ConfVars.CLIENT_SOCKET_LIFETIME, TimeUnit.MILLISECONDS);
     this.lastConnectionTime = System.currentTimeMillis();
-    String msUri = hiveConf.getVar(HiveConf.ConfVars.METASTOREURIS);
+    String msUri = MetastoreConf.getVar(conf, ConfVars.THRIFT_URIS);
     localMetaStore = (msUri == null) || msUri.trim().isEmpty();
 
     reloginExpiringKeytabUser();
 
-    this.base = (IMetaStoreClient) MetaStoreUtils.newInstance(
-        msClientClass, constructorArgTypes, constructorArgs);
+    this.base = JavaUtils.newInstance(msClientClass, constructorArgTypes, constructorArgs);
 
     LOG.info("RetryingMetaStoreClient proxy=" + msClientClass + " ugi=" + this.ugi
         + " retries=" + this.retryLimit + " delay=" + this.retryDelaySeconds
@@ -99,24 +100,24 @@ public class RetryingMetaStoreClient implements InvocationHandler {
   }
 
   public static IMetaStoreClient getProxy(
-      HiveConf hiveConf, boolean allowEmbedded) throws MetaException {
-    return getProxy(hiveConf, new Class[]{HiveConf.class, HiveMetaHookLoader.class, Boolean.class},
+      Configuration hiveConf, boolean allowEmbedded) throws MetaException {
+    return getProxy(hiveConf, new Class[]{Configuration.class, HiveMetaHookLoader.class, Boolean.class},
         new Object[]{hiveConf, null, allowEmbedded}, null, HiveMetaStoreClient.class.getName()
     );
   }
 
   @VisibleForTesting
-  public static IMetaStoreClient getProxy(HiveConf hiveConf, HiveMetaHookLoader hookLoader,
+  public static IMetaStoreClient getProxy(Configuration hiveConf, HiveMetaHookLoader hookLoader,
       String mscClassName) throws MetaException {
     return getProxy(hiveConf, hookLoader, null, mscClassName, true);
   }
 
-  public static IMetaStoreClient getProxy(HiveConf hiveConf, HiveMetaHookLoader hookLoader,
+  public static IMetaStoreClient getProxy(Configuration hiveConf, HiveMetaHookLoader hookLoader,
       ConcurrentHashMap<String, Long> metaCallTimeMap, String mscClassName, boolean allowEmbedded)
           throws MetaException {
 
     return getProxy(hiveConf,
-        new Class[] {HiveConf.class, HiveMetaHookLoader.class, Boolean.class},
+        new Class[] {Configuration.class, HiveMetaHookLoader.class, Boolean.class},
         new Object[] {hiveConf, hookLoader, allowEmbedded},
         metaCallTimeMap,
         mscClassName
@@ -125,24 +126,24 @@ public class RetryingMetaStoreClient implements InvocationHandler {
 
   /**
    * This constructor is meant for Hive internal use only.
-   * Please use getProxy(HiveConf hiveConf, HiveMetaHookLoader hookLoader) for external purpose.
+   * Please use getProxy(HiveConf conf, HiveMetaHookLoader hookLoader) for external purpose.
    */
-  public static IMetaStoreClient getProxy(HiveConf hiveConf, Class<?>[] constructorArgTypes,
+  public static IMetaStoreClient getProxy(Configuration hiveConf, Class<?>[] constructorArgTypes,
       Object[] constructorArgs, String mscClassName) throws MetaException {
     return getProxy(hiveConf, constructorArgTypes, constructorArgs, null, mscClassName);
   }
 
   /**
    * This constructor is meant for Hive internal use only.
-   * Please use getProxy(HiveConf hiveConf, HiveMetaHookLoader hookLoader) for external purpose.
+   * Please use getProxy(HiveConf conf, HiveMetaHookLoader hookLoader) for external purpose.
    */
-  public static IMetaStoreClient getProxy(HiveConf hiveConf, Class<?>[] constructorArgTypes,
+  public static IMetaStoreClient getProxy(Configuration hiveConf, Class<?>[] constructorArgTypes,
       Object[] constructorArgs, ConcurrentHashMap<String, Long> metaCallTimeMap,
       String mscClassName) throws MetaException {
 
     @SuppressWarnings("unchecked")
     Class<? extends IMetaStoreClient> baseClass =
-        (Class<? extends IMetaStoreClient>)MetaStoreUtils.getClass(mscClassName);
+        JavaUtils.getClass(mscClassName, IMetaStoreClient.class);
 
     RetryingMetaStoreClient handler =
         new RetryingMetaStoreClient(hiveConf, constructorArgTypes, constructorArgs,
@@ -153,9 +154,9 @@ public class RetryingMetaStoreClient implements InvocationHandler {
 
   @Override
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-    Object ret = null;
+    Object ret;
     int retriesMade = 0;
-    TException caughtException = null;
+    TException caughtException;
 
     boolean allowReconnect = ! method.isAnnotationPresent(NoReconnect.class);
     boolean allowRetry = true;
index d18ddc8..b46cc38 100644 (file)
@@ -463,6 +463,9 @@ public class MetastoreConf {
         "hive.metastore.event.message.factory",
         "org.apache.hadoop.hive.metastore.messaging.json.JSONMessageFactory",
         "Factory class for making encoding and decoding messages in the events generated."),
+    EVENT_DB_LISTENER_TTL("metastore.event.db.listener.timetolive",
+        "hive.metastore.event.db.listener.timetolive", 86400, TimeUnit.SECONDS,
+        "time after which events will be removed from the database listener queue"),
     EVENT_DB_NOTIFICATION_API_AUTH("metastore.metastore.event.db.notification.api.auth",
         "hive.metastore.event.db.notification.api.auth", true,
         "Should metastore do authorization against database notification related APIs such as get_next_notification.\n" +
@@ -799,6 +802,19 @@ public class MetastoreConf {
         "internal use only, true when in testing tez"),
     // We need to track this as some listeners pass it through our config and we need to honor
     // the system properties.
+    HIVE_AUTHORIZATION_MANAGER("hive.security.authorization.manager",
+        "hive.security.authorization.manager",
+        "org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory",
+        "The Hive client authorization manager class name. The user defined authorization class should implement \n" +
+            "interface org.apache.hadoop.hive.ql.security.authorization.HiveAuthorizationProvider."),
+    HIVE_METASTORE_AUTHENTICATOR_MANAGER("hive.security.metastore.authenticator.manager",
+        "hive.security.metastore.authenticator.manager",
+        "org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator",
+        "authenticator manager class name to be used in the metastore for authentication. \n" +
+            "The user defined authenticator should implement interface org.apache.hadoop.hive.ql.security.HiveAuthenticationProvider."),
+    HIVE_METASTORE_AUTHORIZATION_AUTH_READS("hive.security.metastore.authorization.auth.reads",
+        "hive.security.metastore.authorization.auth.reads", true,
+        "If this is true, metastore authorizer authorizes read actions on database, table"),
     HIVE_METASTORE_AUTHORIZATION_MANAGER(NO_SUCH_KEY,
         "hive.security.metastore.authorization.manager",
         "org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider",
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
  */
 package org.apache.hadoop.hive.metastore.messaging;
 
-import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.IMetaStoreClient;
 import org.apache.hadoop.hive.metastore.api.NotificationEvent;
 import org.apache.hadoop.hive.metastore.api.NotificationEventsCountRequest;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
 import org.apache.hadoop.hive.metastore.messaging.event.filters.DatabaseAndTableFilter;
 import org.apache.thrift.TException;
 
@@ -55,7 +55,7 @@ public class EventUtils {
       if (batchSize == null){
         try {
           batchSize = Integer.parseInt(
-            msc.getConfigValue(HiveConf.ConfVars.METASTORE_BATCH_RETRIEVE_MAX.varname, "50"));
+            msc.getConfigValue(MetastoreConf.ConfVars.BATCH_RETRIEVE_MAX.toString(), "50"));
           // TODO: we're asking the metastore what its configuration for this var is - we may
           // want to revisit to pull from client side instead. The reason I have it this way
           // is because the metastore is more likely to have a reasonable config for this than
@@ -152,7 +152,7 @@ public class EventUtils {
       }
 
       if (batch == null){
-        batch = new ArrayList<NotificationEvent>();
+        batch = new ArrayList<>();
         // instantiate empty list so that we don't error out on iterator fetching.
         // If we're here, then the next check of pos will show our caller that
         // that we've exhausted our event supply
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -33,10 +33,11 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.ObjectStore;
 
 /**
@@ -113,10 +114,10 @@ public class HiveMetaTool {
     cmdLineOptions.addOption(tablePropKey);
   }
 
-  private void initObjectStore(HiveConf hiveConf) {
+  private void initObjectStore(Configuration conf) {
     if (!isObjStoreInitialized) {
       objStore = new ObjectStore();
-      objStore.setConf(hiveConf);
+      objStore.setConf(conf);
       isObjStoreInitialized = true;
     }
   }
@@ -129,8 +130,8 @@ public class HiveMetaTool {
   }
 
   private void listFSRoot() {
-    HiveConf hiveConf = new HiveConf(HiveMetaTool.class);
-    initObjectStore(hiveConf);
+    Configuration conf = MetastoreConf.newMetastoreConf();
+    initObjectStore(conf);
 
     Set<String> hdfsRoots = objStore.listFSRoots();
     if (hdfsRoots != null) {
@@ -145,12 +146,11 @@ public class HiveMetaTool {
   }
 
   private void executeJDOQLSelect(String query) {
-    HiveConf hiveConf = new HiveConf(HiveMetaTool.class);
-    initObjectStore(hiveConf);
+    Configuration conf = MetastoreConf.newMetastoreConf();
+    initObjectStore(conf);
 
     System.out.println("Executing query: " + query);
-    ObjectStore.QueryWrapper queryWrapper = new ObjectStore.QueryWrapper();
-    try {
+    try (ObjectStore.QueryWrapper queryWrapper = new ObjectStore.QueryWrapper()) {
       Collection<?> result = objStore.executeJDOQLSelect(query, queryWrapper);
       if (result != null) {
         Iterator<?> iter = result.iterator();
@@ -160,16 +160,14 @@ public class HiveMetaTool {
         }
       } else {
         System.err.println("Encountered error during executeJDOQLSelect -" +
-          "commit of JDO transaction failed.");
+            "commit of JDO transaction failed.");
       }
-    } finally {
-      queryWrapper.close();
     }
   }
 
-  private long executeJDOQLUpdate(String query) {
-    HiveConf hiveConf = new HiveConf(HiveMetaTool.class);
-    initObjectStore(hiveConf);
+  private void executeJDOQLUpdate(String query) {
+    Configuration conf = MetastoreConf.newMetastoreConf();
+    initObjectStore(conf);
 
     System.out.println("Executing query: " + query);
     long numUpdated = objStore.executeJDOQLUpdate(query);
@@ -179,7 +177,6 @@ public class HiveMetaTool {
       System.err.println("Encountered error during executeJDOQL -" +
         "commit of JDO transaction failed.");
     }
-    return numUpdated;
   }
 
   private int printUpdateLocations(Map<String, String> updateLocations) {
@@ -194,8 +191,8 @@ public class HiveMetaTool {
 
   private void printTblURIUpdateSummary(ObjectStore.UpdateMStorageDescriptorTblURIRetVal retVal,
     boolean isDryRun) {
-    String tblName = new String("SDS");
-    String fieldName = new String("LOCATION");
+    String tblName = "SDS";
+    String fieldName = "LOCATION";
 
     if (retVal == null) {
       System.err.println("Encountered error while executing updateMStorageDescriptorTblURI - " +
@@ -232,8 +229,8 @@ public class HiveMetaTool {
 
   private void printDatabaseURIUpdateSummary(ObjectStore.UpdateMDatabaseURIRetVal retVal,
     boolean isDryRun) {
-    String tblName = new String("DBS");
-    String fieldName = new String("LOCATION_URI");
+    String tblName = "DBS";
+    String fieldName = "LOCATION_URI";
 
     if (retVal == null) {
       System.err.println("Encountered error while executing updateMDatabaseURI - " +
@@ -295,7 +292,7 @@ public class HiveMetaTool {
 
   private void printSerdePropURIUpdateSummary(ObjectStore.UpdateSerdeURIRetVal retVal,
     String serdePropKey, boolean isDryRun) {
-    String tblName = new String("SERDE_PARAMS");
+    String tblName = "SERDE_PARAMS";
 
     if (retVal == null) {
       System.err.println("Encountered error while executing updateSerdeURI - " +
@@ -327,8 +324,8 @@ public class HiveMetaTool {
 
   public void updateFSRootLocation(URI oldURI, URI newURI, String serdePropKey, String
       tablePropKey, boolean isDryRun) {
-    HiveConf hiveConf = new HiveConf(HiveMetaTool.class);
-    initObjectStore(hiveConf);
+    Configuration conf = MetastoreConf.newMetastoreConf();
+    initObjectStore(conf);
 
     System.out.println("Looking for LOCATION_URI field in DBS table to update..");
     ObjectStore.UpdateMDatabaseURIRetVal updateMDBURIRetVal = objStore.updateMDatabaseURI(oldURI,
index 5dcedcd..b44ff8c 100644 (file)
@@ -53,6 +53,16 @@ public class FileUtils {
       return !name.startsWith("_") && !name.startsWith(".");
     }
   };
+  /**
+   * Filter that filters out hidden files
+   */
+  private static final PathFilter hiddenFileFilter = new PathFilter() {
+    @Override
+    public boolean accept(Path p) {
+      String name = p.getName();
+      return !name.startsWith("_") && !name.startsWith(".");
+    }
+  };
 
   /**
    * Move a particular file or directory to the trash.
@@ -424,4 +434,23 @@ public class FileUtils {
       throw new MetaException("Unable to : " + path);
     }
   }
+
+  /**
+   * Utility method that determines if a specified directory already has
+   * contents (non-hidden files) or not - useful to determine if an
+   * immutable table already has contents, for example.
+   *
+   * @param path
+   * @throws IOException
+   */
+  public static boolean isDirEmpty(FileSystem fs, Path path) throws IOException {
+
+    if (fs.exists(path)) {
+      FileStatus[] status = fs.globStatus(new Path(path, "*"), hiddenFileFilter);
+      if (status.length > 0) {
+        return false;
+      }
+    }
+    return true;
+  }
 }
index beee86f..cde34bc 100644 (file)
@@ -30,6 +30,7 @@ import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.metastore.ColumnType;
+import org.apache.hadoop.hive.metastore.HiveMetaStore;
 import org.apache.hadoop.hive.metastore.TableType;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.ColumnStatistics;
@@ -52,7 +53,6 @@ import org.apache.hadoop.hive.metastore.columnstats.aggr.ColumnStatsAggregatorFa
 import org.apache.hadoop.hive.metastore.columnstats.merge.ColumnStatsMerger;
 import org.apache.hadoop.hive.metastore.columnstats.merge.ColumnStatsMergerFactory;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
-import org.apache.hadoop.hive.metastore.events.EventCleanerTask;
 import org.apache.hadoop.hive.metastore.partition.spec.PartitionSpecProxy;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
 import org.apache.hadoop.security.SaslRpcServer;
@@ -64,9 +64,13 @@ import org.slf4j.LoggerFactory;
 
 import javax.annotation.Nullable;
 import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.charset.Charset;
@@ -81,6 +85,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.SortedMap;
 import java.util.SortedSet;
 import java.util.TreeMap;
@@ -298,8 +303,8 @@ public class MetaStoreUtils {
     }
   }
 
-  public static String getPartitionValWithInvalidCharacter(List<String> partVals,
-                                                           Pattern partitionValidationPattern) {
+  private static String getPartitionValWithInvalidCharacter(List<String> partVals,
+                                                            Pattern partitionValidationPattern) {
     if (partitionValidationPattern == null) {
       return null;
     }
@@ -499,8 +504,9 @@ public class MetaStoreUtils {
   }
 
   // check if stats need to be (re)calculated
-  public static boolean requireCalStats(Configuration hiveConf, Partition oldPart,
-    Partition newPart, Table tbl, EnvironmentContext environmentContext) {
+  public static boolean requireCalStats(Partition oldPart,
+                                        Partition newPart, Table tbl,
+                                        EnvironmentContext environmentContext) {
 
     if (environmentContext != null
         && environmentContext.isSetProperties()
@@ -792,9 +798,11 @@ public class MetaStoreUtils {
                 Configuration.class).newInstance(conf);
         listeners.add(listener);
       } catch (InvocationTargetException ie) {
+        LOG.error("Got InvocationTargetException", ie);
         throw new MetaException("Failed to instantiate listener named: "+
             listenerImpl + ", reason: " + ie.getCause());
       } catch (Exception e) {
+        LOG.error("Got Exception", e);
         throw new MetaException("Failed to instantiate listener named: "+
             listenerImpl + ", reason: " + e);
       }
@@ -961,13 +969,20 @@ public class MetaStoreUtils {
       ColumnStatisticsObj statsObjNew = csNew.getStatsObj().get(index);
       ColumnStatisticsObj statsObjOld = map.get(statsObjNew.getColName());
       if (statsObjOld != null) {
+        // because we already confirm that the stats is accurate
+        // it is impossible that the column types have been changed while the
+        // column stats is still accurate.
+        assert (statsObjNew.getStatsData().getSetField() == statsObjOld.getStatsData()
+            .getSetField());
         // If statsObjOld is found, we can merge.
         ColumnStatsMerger merger = ColumnStatsMergerFactory.getColumnStatsMerger(statsObjNew,
             statsObjOld);
         merger.merge(statsObjNew, statsObjOld);
       }
+      // If statsObjOld is not found, we just use statsObjNew as it is accurate.
       list.add(statsObjNew);
     }
+    // in all the other cases, we can not merge
     csNew.setStatsObj(list);
   }
 
@@ -1064,15 +1079,485 @@ public class MetaStoreUtils {
     return machineList.includes(ipAddress);
   }
 
-  // TODO This should be moved to MetaStoreTestUtils once it is moved into standalone-metastore.
   /**
-   * Setup a configuration file for standalone mode.  There are a few config variables that have
-   * defaults that require parts of Hive that aren't present in standalone mode.  This method
-   * sets them to something that will work without the rest of Hive.
-   * @param conf Configuration object
+   * Convert FieldSchemas to Thrift DDL.
    */
-  public static void setConfForStandloneMode(Configuration conf) {
-    MetastoreConf.setVar(conf, MetastoreConf.ConfVars.TASK_THREADS_ALWAYS,
-        EventCleanerTask.class.getName());
+  public static String getDDLFromFieldSchema(String structName,
+                                             List<FieldSchema> fieldSchemas) {
+    StringBuilder ddl = new StringBuilder();
+    ddl.append("struct ");
+    ddl.append(structName);
+    ddl.append(" { ");
+    boolean first = true;
+    for (FieldSchema col : fieldSchemas) {
+      if (first) {
+        first = false;
+      } else {
+        ddl.append(", ");
+      }
+      ddl.append(ColumnType.typeToThriftType(col.getType()));
+      ddl.append(' ');
+      ddl.append(col.getName());
+    }
+    ddl.append("}");
+
+    LOG.trace("DDL: {}", ddl);
+    return ddl.toString();
+  }
+
+  public static Properties getTableMetadata(
+      org.apache.hadoop.hive.metastore.api.Table table) {
+    return MetaStoreUtils.getSchema(table.getSd(), table.getSd(), table
+        .getParameters(), table.getDbName(), table.getTableName(), table.getPartitionKeys());
+  }
+
+  public static Properties getPartitionMetadata(
+      org.apache.hadoop.hive.metastore.api.Partition partition,
+      org.apache.hadoop.hive.metastore.api.Table table) {
+    return MetaStoreUtils
+        .getSchema(partition.getSd(), partition.getSd(), partition
+                .getParameters(), table.getDbName(), table.getTableName(),
+            table.getPartitionKeys());
+  }
+
+  public static Properties getSchema(
+      org.apache.hadoop.hive.metastore.api.Partition part,
+      org.apache.hadoop.hive.metastore.api.Table table) {
+    return MetaStoreUtils.getSchema(part.getSd(), table.getSd(), table
+        .getParameters(), table.getDbName(), table.getTableName(), table.getPartitionKeys());
+  }
+
+  /**
+   * Get partition level schema from table level schema.
+   * This function will use the same column names, column types and partition keys for
+   * each partition Properties. Their values are copied from the table Properties. This
+   * is mainly to save CPU and memory. CPU is saved because the first time the
+   * StorageDescriptor column names are accessed, JDO needs to execute a SQL query to
+   * retrieve the data. If we know the data will be the same as the table level schema
+   * and they are immutable, we should just reuse the table level schema objects.
+   *
+   * @param sd The Partition level Storage Descriptor.
+   * @param parameters partition level parameters
+   * @param tblSchema The table level schema from which this partition should be copied.
+   * @return the properties
+   */
+  public static Properties getPartSchemaFromTableSchema(
+      StorageDescriptor sd,
+      Map<String, String> parameters,
+      Properties tblSchema) {
+
+    // Inherent most properties from table level schema and overwrite some properties
+    // in the following code.
+    // This is mainly for saving CPU and memory to reuse the column names, types and
+    // partition columns in the table level schema.
+    Properties schema = (Properties) tblSchema.clone();
+
+    // InputFormat
+    String inputFormat = sd.getInputFormat();
+    if (inputFormat == null || inputFormat.length() == 0) {
+      String tblInput =
+          schema.getProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_INPUT_FORMAT);
+      if (tblInput == null) {
+        inputFormat = org.apache.hadoop.mapred.SequenceFileInputFormat.class.getName();
+      } else {
+        inputFormat = tblInput;
+      }
+    }
+    schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_INPUT_FORMAT,
+        inputFormat);
+
+    // OutputFormat
+    String outputFormat = sd.getOutputFormat();
+    if (outputFormat == null || outputFormat.length() == 0) {
+      String tblOutput =
+          schema.getProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_OUTPUT_FORMAT);
+      if (tblOutput == null) {
+        outputFormat = org.apache.hadoop.mapred.SequenceFileOutputFormat.class.getName();
+      } else {
+        outputFormat = tblOutput;
+      }
+    }
+    schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_OUTPUT_FORMAT,
+        outputFormat);
+
+    // Location
+    if (sd.getLocation() != null) {
+      schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_LOCATION,
+          sd.getLocation());
+    }
+
+    // Bucket count
+    schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_COUNT,
+        Integer.toString(sd.getNumBuckets()));
+
+    if (sd.getBucketCols() != null && sd.getBucketCols().size() > 0) {
+      schema.setProperty(org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_FIELD_NAME,
+          sd.getBucketCols().get(0));
+    }
+
+    // SerdeInfo
+    if (sd.getSerdeInfo() != null) {
+
+      // We should not update the following 3 values if SerDeInfo contains these.
+      // This is to keep backward compatible with getSchema(), where these 3 keys
+      // are updated after SerDeInfo properties got copied.
+      String cols = org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMNS;
+      String colTypes = org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMN_TYPES;
+      String parts = org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_PARTITION_COLUMNS;
+
+      for (Map.Entry<String,String> param : sd.getSerdeInfo().getParameters().entrySet()) {
+        String key = param.getKey();
+        if (schema.get(key) != null &&
+            (key.equals(cols) || key.equals(colTypes) || key.equals(parts))) {
+          continue;
+        }
+        schema.put(key, (param.getValue() != null) ? param.getValue() : StringUtils.EMPTY);
+      }
+
+      if (sd.getSerdeInfo().getSerializationLib() != null) {
+        schema.setProperty(ColumnType.SERIALIZATION_LIB, sd.getSerdeInfo().getSerializationLib());
+      }
+    }
+
+    // skipping columns since partition level field schemas are the same as table level's
+    // skipping partition keys since it is the same as table level partition keys
+
+    if (parameters != null) {
+      for (Map.Entry<String, String> e : parameters.entrySet()) {
+        schema.setProperty(e.getKey(), e.getValue());
+      }
+    }
+
+    return schema;
+  }
+
+  private static Properties addCols(Properties schema, List<FieldSchema> cols) {
+
+    StringBuilder colNameBuf = new StringBuilder();
+    StringBuilder colTypeBuf = new StringBuilder();
+    StringBuilder colComment = new StringBuilder();
+
+    boolean first = true;
+    String columnNameDelimiter = getColumnNameDelimiter(cols);
+    for (FieldSchema col : cols) {
+      if (!first) {
+        colNameBuf.append(columnNameDelimiter);
+        colTypeBuf.append(":");
+        colComment.append('\0');
+      }
+      colNameBuf.append(col.getName());
+      colTypeBuf.append(col.getType());
+      colComment.append((null != col.getComment()) ? col.getComment() : StringUtils.EMPTY);
+      first = false;
+    }
+    schema.setProperty(
+        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMNS,
+        colNameBuf.toString());
+    schema.setProperty(ColumnType.COLUMN_NAME_DELIMITER, columnNameDelimiter);
+    String colTypes = colTypeBuf.toString();
+    schema.setProperty(
+        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_COLUMN_TYPES,
+        colTypes);
+    schema.setProperty("columns.comments", colComment.toString());
+
+    return schema;
+
+  }
+
+  public static Properties getSchemaWithoutCols(StorageDescriptor sd,
+                                                Map<String, String> parameters, String databaseName, String tableName,
+                                                List<FieldSchema> partitionKeys) {
+    Properties schema = new Properties();
+    String inputFormat = sd.getInputFormat();
+    if (inputFormat == null || inputFormat.length() == 0) {
+      inputFormat = org.apache.hadoop.mapred.SequenceFileInputFormat.class
+          .getName();
+    }
+    schema.setProperty(
+        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_INPUT_FORMAT,
+        inputFormat);
+    String outputFormat = sd.getOutputFormat();
+    if (outputFormat == null || outputFormat.length() == 0) {
+      outputFormat = org.apache.hadoop.mapred.SequenceFileOutputFormat.class
+          .getName();
+    }
+    schema.setProperty(
+        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.FILE_OUTPUT_FORMAT,
+        outputFormat);
+
+    schema.setProperty(
+        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_NAME,
+        databaseName + "." + tableName);
+
+    if (sd.getLocation() != null) {
+      schema.setProperty(
+          org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_LOCATION,
+          sd.getLocation());
+    }
+    schema.setProperty(
+        org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_COUNT, Integer
+            .toString(sd.getNumBuckets()));
+    if (sd.getBucketCols() != null && sd.getBucketCols().size() > 0) {
+      schema.setProperty(
+          org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.BUCKET_FIELD_NAME, sd
+              .getBucketCols().get(0));
+    }
+    if (sd.getSerdeInfo() != null) {
+      for (Map.Entry<String,String> param : sd.getSerdeInfo().getParameters().entrySet()) {
+        schema.put(param.getKey(), (param.getValue() != null) ? param.getValue() : StringUtils.EMPTY);
+      }
+
+      if (sd.getSerdeInfo().getSerializationLib() != null) {
+        schema.setProperty(ColumnType.SERIALIZATION_LIB, sd .getSerdeInfo().getSerializationLib());
+      }
+    }
+
+    if (sd.getCols() != null) {
+      schema.setProperty(ColumnType.SERIALIZATION_DDL, getDDLFromFieldSchema(tableName, sd.getCols()));
+    }
+
+    String partString = StringUtils.EMPTY;
+    String partStringSep = StringUtils.EMPTY;
+    String partTypesString = StringUtils.EMPTY;
+    String partTypesStringSep = StringUtils.EMPTY;
+    for (FieldSchema partKey : partitionKeys) {
+      partString = partString.concat(partStringSep);
+      partString = partString.concat(partKey.getName());
+      partTypesString = partTypesString.concat(partTypesStringSep);
+      partTypesString = partTypesString.concat(partKey.getType());
+      if (partStringSep.length() == 0) {
+        partStringSep = "/";
+        partTypesStringSep = ":";
+      }
+    }
+    if (partString.length() > 0) {
+      schema
+          .setProperty(
+              org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_PARTITION_COLUMNS,
+              partString);
+      schema
+          .setProperty(
+              org.apache.hadoop.hive.metastore.api.hive_metastoreConstants.META_TABLE_PARTITION_COLUMN_TYPES,
+              partTypesString);
+    }
+
+    if (parameters != null) {
+      for (Map.Entry<String, String> e : parameters.entrySet()) {
+        // add non-null parameters to the schema
+        if ( e.getValue() != null) {
+          schema.setProperty(e.getKey(), e.getValue());
+        }
+      }
+    }
+
+    return schema;
+  }
+
+  public static Properties getSchema(
+      org.apache.hadoop.hive.metastore.api.StorageDescriptor sd,
+      org.apache.hadoop.hive.metastore.api.StorageDescriptor tblsd,
+      Map<String, String> parameters, String databaseName, String tableName,
+      List<FieldSchema> partitionKeys) {
+
+    return addCols(getSchemaWithoutCols(sd, parameters, databaseName, tableName, partitionKeys), tblsd.getCols());
+  }
+
+  public static String getColumnNameDelimiter(List<FieldSchema> fieldSchemas) {
+    // we first take a look if any fieldSchemas contain COMMA
+    for (int i = 0; i < fieldSchemas.size(); i++) {
+      if (fieldSchemas.get(i).getName().contains(",")) {
+        return String.valueOf(ColumnType.COLUMN_COMMENTS_DELIMITER);
+      }
+    }
+    return String.valueOf(',');
+  }
+
+  /**
+   * Convert FieldSchemas to columnNames.
+   */
+  public static String getColumnNamesFromFieldSchema(List<FieldSchema> fieldSchemas) {
+    String delimiter = getColumnNameDelimiter(fieldSchemas);
+    StringBuilder sb = new StringBuilder();
+    for (int i = 0; i < fieldSchemas.size(); i++) {
+      if (i > 0) {
+        sb.append(delimiter);
+      }
+      sb.append(fieldSchemas.get(i).getName());
+    }
+    return sb.toString();
+  }
+
+  /**
+   * Convert FieldSchemas to columnTypes.
+   */
+  public static String getColumnTypesFromFieldSchema(
+      List<FieldSchema> fieldSchemas) {
+    StringBuilder sb = new StringBuilder();
+    for (int i = 0; i < fieldSchemas.size(); i++) {
+      if (i > 0) {
+        sb.append(",");
+      }
+      sb.append(fieldSchemas.get(i).getType());
+    }
+    return sb.toString();
+  }
+
+  public static String getColumnCommentsFromFieldSchema(List<FieldSchema> fieldSchemas) {
+    StringBuilder sb = new StringBuilder();
+    for (int i = 0; i < fieldSchemas.size(); i++) {
+      if (i > 0) {
+        sb.append(ColumnType.COLUMN_COMMENTS_DELIMITER);
+      }
+      sb.append(fieldSchemas.get(i).getComment());
+    }
+    return sb.toString();
+  }
+
+  public static int startMetaStore() throws Exception {
+    return startMetaStore(HadoopThriftAuthBridge.getBridge(), null);
+  }
+
+  public static int startMetaStore(final HadoopThriftAuthBridge bridge, Configuration conf) throws
+      Exception {
+    int port = findFreePort();
+    startMetaStore(port, bridge, conf);
+    return port;
+  }
+
+  public static int startMetaStore(Configuration conf) throws Exception {
+    return startMetaStore(HadoopThriftAuthBridge.getBridge(), conf);
+  }
+
+  public static void startMetaStore(final int port, final HadoopThriftAuthBridge bridge) throws Exception {
+    startMetaStore(port, bridge, null);
+  }
+
+  public static void startMetaStore(final int port,
+                                    final HadoopThriftAuthBridge bridge, Configuration hiveConf)
+      throws Exception{
+    if (hiveConf == null) {
+      hiveConf = MetastoreConf.newMetastoreConf();
+    }
+    final Configuration finalHiveConf = hiveConf;
+    Thread thread = new Thread(new Runnable() {
+      @Override
+      public void run() {
+        try {
+          HiveMetaStore.startMetaStore(port, bridge, finalHiveConf);
+        } catch (Throwable e) {
+          LOG.error("Metastore Thrift Server threw an exception...",e);
+        }
+      }
+    });
+    thread.setDaemon(true);
+    thread.start();
+    loopUntilHMSReady(port);
+  }
+
+  /**
+   * A simple connect test to make sure that the metastore is up
+   * @throws Exception
+   */
+  private static void loopUntilHMSReady(int port) throws Exception {
+    int retries = 0;
+    Exception exc;
+    while (true) {
+      try {
+        Socket socket = new Socket();
+        socket.connect(new InetSocketAddress(port), 5000);
+        socket.close();
+        return;
+      } catch (Exception e) {
+        if (retries++ > 60) { //give up
+          exc = e;
+          break;
+        }
+        Thread.sleep(1000);
+      }
+    }
+    // something is preventing metastore from starting
+    // print the stack from all threads for debugging purposes
+    LOG.error("Unable to connect to metastore server: " + exc.getMessage());
+    LOG.info("Printing all thread stack traces for debugging before throwing exception.");
+    LOG.info(getAllThreadStacksAsString());
+    throw exc;
+  }
+
+  private static String getAllThreadStacksAsString() {
+    Map<Thread, StackTraceElement[]> threadStacks = Thread.getAllStackTraces();
+    StringBuilder sb = new StringBuilder();
+    for (Map.Entry<Thread, StackTraceElement[]> entry : threadStacks.entrySet()) {
+      Thread t = entry.getKey();
+      sb.append(System.lineSeparator());
+      sb.append("Name: ").append(t.getName()).append(" State: ").append(t.getState());
+      addStackString(entry.getValue(), sb);
+    }
+    return sb.toString();
+  }
+
+  private static void addStackString(StackTraceElement[] stackElems, StringBuilder sb) {
+    sb.append(System.lineSeparator());
+    for (StackTraceElement stackElem : stackElems) {
+      sb.append(stackElem).append(System.lineSeparator());
+    }
+  }
+
+  /**
+   * Finds a free port on the machine.
+   *
+   * @return
+   * @throws IOException
+   */
+  public static int findFreePort() throws IOException {
+    ServerSocket socket= new ServerSocket(0);
+    int port = socket.getLocalPort();
+    socket.close();
+    return port;
+  }
+
+  /**
+   * Finds a free port on the machine, but allow the
+   * ability to specify a port number to not use, no matter what.
+   */
+  public static int findFreePortExcepting(int portToExclude) throws IOException {
+    ServerSocket socket1 = null;
+    ServerSocket socket2 = null;
+    try {
+      socket1 = new ServerSocket(0);
+      socket2 = new ServerSocket(0);
+      if (socket1.getLocalPort() != portToExclude) {
+        return socket1.getLocalPort();
+      }
+      // If we're here, then socket1.getLocalPort was the port to exclude
+      // Since both sockets were open together at a point in time, we're
+      // guaranteed that socket2.getLocalPort() is not the same.
+      return socket2.getLocalPort();
+    } finally {
+      if (socket1 != null){
+        socket1.close();
+      }
+      if (socket2 != null){
+        socket2.close();
+      }
+    }
+  }
+
+  public static String getIndexTableName(String dbName, String baseTblName, String indexName) {
+    return dbName + "__" + baseTblName + "_" + indexName + "__";
+  }
+
+  public static boolean isMaterializedViewTable(Table table) {
+    if (table == null) {
+      return false;
+    }
+    return TableType.MATERIALIZED_VIEW.toString().equals(table.getTableType());
+  }
+
+  public static List<String> getColumnNames(List<FieldSchema> schema) {
+    List<String> cols = new ArrayList<>(schema.size());
+    for (FieldSchema fs : schema) {
+      cols.add(fs.getName());
+    }
+    return cols;
   }
 }
index 41a18cb..0b0cfbd 100644 (file)
@@ -36,11 +36,15 @@ import org.apache.zookeeper.client.ZooKeeperSaslClient;
 import javax.security.auth.login.AppConfigurationEntry;
 import org.apache.thrift.transport.TSSLTransportFactory;
 import org.apache.thrift.transport.TServerSocket;
+import org.apache.thrift.transport.TSocket;
+import org.apache.thrift.transport.TTransport;
 import org.apache.thrift.transport.TTransportException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.net.ssl.SSLParameters;
 import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLSocket;
 import javax.security.auth.login.LoginException;
 import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag;
 
@@ -284,4 +288,26 @@ public class SecurityUtils {
     }
     return thriftServerSocket;
   }
+
+  public static TTransport getSSLSocket(String host, int port, int loginTimeout,
+                                        String trustStorePath, String trustStorePassWord) throws TTransportException {
+    TSSLTransportFactory.TSSLTransportParameters params =
+        new TSSLTransportFactory.TSSLTransportParameters();
+    params.setTrustStore(trustStorePath, trustStorePassWord);
+    params.requireClientAuth(true);
+    // The underlying SSLSocket object is bound to host:port with the given SO_TIMEOUT and
+    // SSLContext created with the given params
+    TSocket tSSLSocket = TSSLTransportFactory.getClientSocket(host, port, loginTimeout, params);
+    return getSSLSocketWithHttps(tSSLSocket);
+  }
+
+  // Using endpoint identification algorithm as HTTPS enables us to do
+  // CNAMEs/subjectAltName verification
+  private static TSocket getSSLSocketWithHttps(TSocket tSSLSocket) throws TTransportException {
+    SSLSocket sslSocket = (SSLSocket) tSSLSocket.getSocket();
+    SSLParameters sslParams = sslSocket.getSSLParameters();
+    sslParams.setEndpointIdentificationAlgorithm("HTTPS");
+    sslSocket.setSSLParameters(sslParams);
+    return new TSocket(sslSocket);
+  }
 }
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -30,9 +30,9 @@ import org.apache.hadoop.conf.Configuration;
  */
 public class DummyEndFunctionListener extends MetaStoreEndFunctionListener{
 
-  public static final List<String> funcNameList = new ArrayList<String>();
+  public static final List<String> funcNameList = new ArrayList<>();
   public static final List<MetaStoreEndFunctionContext> contextList =
-    new ArrayList<MetaStoreEndFunctionContext>();
+    new ArrayList<>();
 
   public DummyEndFunctionListener(Configuration config) {
     super(config);
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -46,7 +46,7 @@ import org.apache.hadoop.hive.metastore.events.LoadPartitionDoneEvent;
  */
 public class DummyListener extends MetaStoreEventListener{
 
-  public static final List<ListenerEvent> notifyList = new ArrayList<ListenerEvent>();
+  public static final List<ListenerEvent> notifyList = new ArrayList<>();
 
   /**
    * @return The last event received, or null if no event was received.
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
 
 package org.apache.hadoop.hive.metastore;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.MetaStoreInitContext;
-import org.apache.hadoop.hive.metastore.MetaStoreInitListener;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 
 /*
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -34,7 +34,7 @@ import org.apache.hadoop.hive.metastore.events.PreEventContext;
  */
 public class DummyPreListener extends MetaStorePreEventListener {
 
-  public static final List<PreEventContext> notifyList = new ArrayList<PreEventContext>();
+  public static final List<PreEventContext> notifyList = new ArrayList<>();
 
   public DummyPreListener(Configuration config) {
     super(config);
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -677,7 +677,7 @@ public class DummyRawStoreControlledCommit implements RawStore, Configurable {
 
   @Override
   public List<String> getAllTokenIdentifiers() {
-    return new ArrayList<String>();
+    return new ArrayList<>();
   }
 
   @Override
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -49,7 +49,7 @@ public class InjectableBehaviourObjectStore extends ObjectStore {
       assertEquals(expectedInjectionCalled, injectionPathCalled);
       assertEquals(expectedNonInjectedPathCalled, nonInjectedPathCalled);
     }
-  };
+  }
 
   private static com.google.common.base.Function<Table,Table> getTableModifier =
       com.google.common.base.Functions.identity();
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -21,8 +21,6 @@ package org.apache.hadoop.hive.metastore;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
-import junit.framework.Assert;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.HiveMetaStore.HMSHandler;
 import org.apache.hadoop.hive.metastore.api.MetaException;
@@ -35,6 +33,7 @@ import org.apache.hadoop.hive.metastore.events.DropDatabaseEvent;
 import org.apache.hadoop.hive.metastore.events.DropPartitionEvent;
 import org.apache.hadoop.hive.metastore.events.DropTableEvent;
 import org.apache.hadoop.hive.metastore.events.LoadPartitionDoneEvent;
+import org.junit.Assert;
 
 /** An implementation for MetaStoreEventListener which checks that the IP Address stored in
  * HMSHandler matches that of local host, for testing purposes.
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -25,8 +25,6 @@ import java.net.Socket;
 import java.util.Map;
 
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.hive.metastore.HiveMetaStore.HMSHandler;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
 import org.apache.hadoop.hive.metastore.events.EventCleanerTask;
 import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge;
@@ -35,20 +33,21 @@ import org.slf4j.LoggerFactory;
 
 public class MetaStoreTestUtils {
 
-  private static final Logger LOG = LoggerFactory.getLogger("hive.log");
+  private static final Logger LOG = LoggerFactory.getLogger(MetaStoreTestUtils.class);
   public static final int RETRY_COUNT = 10;
 
   public static int startMetaStore() throws Exception {
     return MetaStoreTestUtils.startMetaStore(HadoopThriftAuthBridge.getBridge(), null);
   }
 
-  public static int startMetaStore(final HadoopThriftAuthBridge bridge, HiveConf conf) throws Exception {
+  public static int startMetaStore(final HadoopThriftAuthBridge bridge, Configuration conf)
+      throws Exception {
     int port = MetaStoreTestUtils.findFreePort();
     MetaStoreTestUtils.startMetaStore(port, bridge, conf);
     return port;
   }
 
-  public static int startMetaStore(HiveConf conf) throws Exception {
+  public static int startMetaStore(Configuration conf) throws Exception {
     return startMetaStore(HadoopThriftAuthBridge.getBridge(), conf);
   }
 
@@ -57,17 +56,17 @@ public class MetaStoreTestUtils {
   }
 
   public static void startMetaStore(final int port,
-      final HadoopThriftAuthBridge bridge, HiveConf hiveConf)
+      final HadoopThriftAuthBridge bridge, Configuration conf)
       throws Exception{
-    if (hiveConf == null) {
-      hiveConf = new HiveConf(HMSHandler.class);
+    if (conf == null) {
+      conf = MetastoreConf.newMetastoreConf();
     }
-    final HiveConf finalHiveConf = hiveConf;
+    final Configuration finalConf = conf;
     Thread thread = new Thread(new Runnable() {
       @Override
       public void run() {
         try {
-          HiveMetaStore.startMetaStore(port, bridge, finalHiveConf);
+          HiveMetaStore.startMetaStore(port, bridge, finalConf);
         } catch (Throwable e) {
           LOG.error("Metastore Thrift Server threw an exception...", e);
         }
@@ -82,7 +81,7 @@ public class MetaStoreTestUtils {
     return MetaStoreTestUtils.startMetaStoreWithRetry(bridge, null);
   }
 
-  public static int startMetaStoreWithRetry(HiveConf conf) throws Exception {
+  public static int startMetaStoreWithRetry(Configuration conf) throws Exception {
     return MetaStoreTestUtils.startMetaStoreWithRetry(HadoopThriftAuthBridge.getBridge(), conf);
   }
 
@@ -90,7 +89,7 @@ public class MetaStoreTestUtils {
     return MetaStoreTestUtils.startMetaStoreWithRetry(HadoopThriftAuthBridge.getBridge(), null);
   }
 
-  public static int startMetaStoreWithRetry(final HadoopThriftAuthBridge bridge, HiveConf conf)
+  public static int startMetaStoreWithRetry(final HadoopThriftAuthBridge bridge, Configuration conf)
       throws Exception {
     Exception metaStoreException = null;
     int metaStorePort = 0;
@@ -196,4 +195,14 @@ public class MetaStoreTestUtils {
     }
   }
 
+  /**
+   * Setup a configuration file for standalone mode.  There are a few config variables that have
+   * defaults that require parts of Hive that aren't present in standalone mode.  This method
+   * sets them to something that will work without the rest of Hive.
+   * @param conf Configuration object
+   */
+  public static void setConfForStandloneMode(Configuration conf) {
+    MetastoreConf.setVar(conf, MetastoreConf.ConfVars.TASK_THREADS_ALWAYS,
+        EventCleanerTask.class.getName());
+  }
 }
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -22,7 +22,6 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.FileMetadataExprType;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.ql.io.sarg.SearchArgument;
-import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
 
 import java.util.List;
 
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
 package org.apache.hadoop.hive.metastore;
 
 import java.security.Permission;
-import org.apache.hadoop.hive.conf.HiveConf;
+
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
+import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.thrift.TException;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -40,7 +44,7 @@ public class TestHiveMetaStoreGetMetaConf {
   public ExpectedException thrown = ExpectedException.none();
 
   private static final Logger LOG = LoggerFactory.getLogger(TestHiveMetaStoreGetMetaConf.class);
-  private static HiveConf hiveConf;
+  private static Configuration conf;
   private static SecurityManager securityManager;
 
   private HiveMetaStoreClient hmsc;
@@ -75,26 +79,21 @@ public class TestHiveMetaStoreGetMetaConf {
 
     securityManager = System.getSecurityManager();
     System.setSecurityManager(new NoExitSecurityManager());
-    HiveConf metastoreConf = new HiveConf();
-    metastoreConf.setClass(HiveConf.ConfVars.METASTORE_EXPRESSION_PROXY_CLASS.varname,
+    Configuration metastoreConf = MetastoreConf.newMetastoreConf();
+    MetastoreConf.setClass(metastoreConf, ConfVars.EXPRESSION_PROXY_CLASS,
       MockPartitionExpressionForMetastore.class, PartitionExpressionProxy.class);
-    metastoreConf.setBoolVar(HiveConf.ConfVars.METASTORE_TRY_DIRECT_SQL_DDL, false);
-    int msPort = MetaStoreTestUtils.startMetaStore(metastoreConf);
-    hiveConf = new HiveConf(TestHiveMetaStoreGetMetaConf.class);
-    hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:"
-        + msPort);
-    hiveConf.setVar(HiveConf.ConfVars.PREEXECHOOKS, "");
-    hiveConf.setVar(HiveConf.ConfVars.POSTEXECHOOKS, "");
-    hiveConf.setBoolVar(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY, false);
-    hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, 10);
-
-    System.setProperty(HiveConf.ConfVars.PREEXECHOOKS.varname, " ");
-    System.setProperty(HiveConf.ConfVars.POSTEXECHOOKS.varname, " ");
+    MetastoreConf.setBoolVar(metastoreConf, ConfVars.TRY_DIRECT_SQL_DDL, false);
+    MetaStoreTestUtils.setConfForStandloneMode(metastoreConf);
+    int msPort = MetaStoreUtils.startMetaStore(metastoreConf);
+    conf = MetastoreConf.newMetastoreConf();
+    MetastoreConf.setVar(conf, ConfVars.THRIFT_URIS, "thrift://localhost:" + msPort);
+    MetastoreConf.setBoolVar(conf, ConfVars.HIVE_SUPPORT_CONCURRENCY, false);
+    MetastoreConf.setLongVar(conf, ConfVars.THRIFT_CONNECTION_RETRIES, 10);
   }
 
   @Before
   public void setup() throws MetaException {
-    hmsc = new HiveMetaStoreClient(hiveConf);
+    hmsc = new HiveMetaStoreClient(conf);
   }
 
   @After
@@ -105,31 +104,31 @@ public class TestHiveMetaStoreGetMetaConf {
   }
 
   @Test
-  public void testGetMetaConfDefault() throws MetaException, TException {
-    HiveConf.ConfVars metaConfVar = HiveConf.ConfVars.METASTORE_TRY_DIRECT_SQL;
-    String expected = metaConfVar.getDefaultValue();
+  public void testGetMetaConfDefault() throws TException {
+    ConfVars metaConfVar = ConfVars.TRY_DIRECT_SQL;
+    String expected = metaConfVar.getDefaultVal().toString();
     String actual = hmsc.getMetaConf(metaConfVar.toString());
     assertEquals(expected, actual);
   }
 
   @Test
-  public void testGetMetaConfDefaultEmptyString() throws MetaException, TException {
-    HiveConf.ConfVars metaConfVar = HiveConf.ConfVars.METASTORE_PARTITION_NAME_WHITELIST_PATTERN;
+  public void testGetMetaConfDefaultEmptyString() throws TException {
+    ConfVars metaConfVar = ConfVars.PARTITION_NAME_WHITELIST_PATTERN;
     String expected = "";
     String actual = hmsc.getMetaConf(metaConfVar.toString());
     assertEquals(expected, actual);
   }
 
   @Test
-  public void testGetMetaConfOverridden() throws MetaException, TException {
-    HiveConf.ConfVars metaConfVar = HiveConf.ConfVars.METASTORE_TRY_DIRECT_SQL_DDL;
+  public void testGetMetaConfOverridden() throws TException {
+    ConfVars metaConfVar = ConfVars.TRY_DIRECT_SQL_DDL;
     String expected = "false";
     String actual = hmsc.getMetaConf(metaConfVar.toString());
     assertEquals(expected, actual);
   }
 
   @Test
-  public void testGetMetaConfUnknownPreperty() throws MetaException, TException {
+  public void testGetMetaConfUnknownPreperty() throws TException {
     String unknownPropertyName = "hive.meta.foo.bar";
     thrown.expect(MetaException.class);
     thrown.expectMessage("Invalid configuration key " + unknownPropertyName);
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -18,7 +18,7 @@
 
 package org.apache.hadoop.hive.metastore;
 
-import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.Partition;
@@ -26,9 +26,10 @@ import org.apache.hadoop.hive.metastore.api.PartitionSpec;
 import org.apache.hadoop.hive.metastore.api.SerDeInfo;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
 import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
 import org.apache.hadoop.hive.metastore.partition.spec.CompositePartitionSpecProxy;
 import org.apache.hadoop.hive.metastore.partition.spec.PartitionSpecProxy;
-import org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
@@ -50,7 +51,7 @@ public class TestHiveMetaStorePartitionSpecs {
 
   private static final Logger LOG = LoggerFactory.getLogger(TestHiveMetaStorePartitionSpecs.class);
   private static int msPort;
-  private static HiveConf hiveConf;
+  private static Configuration conf;
   private static SecurityManager securityManager;
 
   public static class NoExitSecurityManager extends SecurityManager {
@@ -79,30 +80,26 @@ public class TestHiveMetaStorePartitionSpecs {
     LOG.info("Shutting down metastore.");
     System.setSecurityManager(securityManager);
 
-    HiveMetaStoreClient hmsc = new HiveMetaStoreClient(hiveConf);
+    HiveMetaStoreClient hmsc = new HiveMetaStoreClient(conf);
     hmsc.dropDatabase(dbName, true, true, true);
   }
 
   @BeforeClass
   public static void startMetaStoreServer() throws Exception {
 
-    HiveConf metastoreConf = new HiveConf();
-    metastoreConf.setClass(HiveConf.ConfVars.METASTORE_EXPRESSION_PROXY_CLASS.varname,
+    Configuration metastoreConf = MetastoreConf.newMetastoreConf();
+    MetastoreConf.setClass(metastoreConf, ConfVars.EXPRESSION_PROXY_CLASS,
       MockPartitionExpressionForMetastore.class, PartitionExpressionProxy.class);
+    MetaStoreTestUtils.setConfForStandloneMode(metastoreConf);
     msPort = MetaStoreTestUtils.startMetaStore(metastoreConf);
     securityManager = System.getSecurityManager();
     System.setSecurityManager(new NoExitSecurityManager());
-    hiveConf = new HiveConf(TestHiveMetaStorePartitionSpecs.class);
-    hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:"
-        + msPort);
-    hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, 3);
-    hiveConf.set(HiveConf.ConfVars.PREEXECHOOKS.varname, "");
-    hiveConf.set(HiveConf.ConfVars.POSTEXECHOOKS.varname, "");
-    hiveConf.set(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY.varname,
-        "false");
-    hiveConf.set(HiveConf.ConfVars.METASTORE_EXPRESSION_PROXY_CLASS.name(), MockPartitionExpressionForMetastore.class.getCanonicalName());
-    System.setProperty(HiveConf.ConfVars.PREEXECHOOKS.varname, " ");
-    System.setProperty(HiveConf.ConfVars.POSTEXECHOOKS.varname, " ");
+    conf = MetastoreConf.newMetastoreConf();
+    MetastoreConf.setVar(conf, ConfVars.THRIFT_URIS, "thrift://localhost:" + msPort);
+    MetastoreConf.setLongVar(conf, ConfVars.THRIFT_CONNECTION_RETRIES, 3);
+    MetastoreConf.setBoolVar(conf, ConfVars.HIVE_SUPPORT_CONCURRENCY, false);
+    MetastoreConf.setClass(conf, ConfVars.EXPRESSION_PROXY_CLASS,
+        MockPartitionExpressionForMetastore.class, PartitionExpressionProxy.class);
   }
 
   private static String dbName = "testpartitionspecs_db";
@@ -113,15 +110,16 @@ public class TestHiveMetaStorePartitionSpecs {
   private static void createTable(HiveMetaStoreClient hmsc, boolean enablePartitionGrouping) throws Exception {
 
 
-    List<FieldSchema> columns = new ArrayList<FieldSchema>();
+    List<FieldSchema> columns = new ArrayList<>();
     columns.add(new FieldSchema("foo", "string", ""));
     columns.add(new FieldSchema("bar", "string", ""));
 
-    List<FieldSchema> partColumns = new ArrayList<FieldSchema>();
+    List<FieldSchema> partColumns = new ArrayList<>();
     partColumns.add(new FieldSchema("dt", "string", ""));
     partColumns.add(new FieldSchema("blurb", "string", ""));
 
-    SerDeInfo serdeInfo = new SerDeInfo("LBCSerDe", LazyBinaryColumnarSerDe.class.getCanonicalName(), new HashMap<String, String>());
+    SerDeInfo serdeInfo = new SerDeInfo("LBCSerDe",
+        "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", new HashMap<>());
 
     StorageDescriptor storageDescriptor
         = new StorageDescriptor(columns, null,
@@ -129,7 +127,7 @@ public class TestHiveMetaStorePartitionSpecs {
         "org.apache.hadoop.hive.ql.io.RCFileOutputFormat",
         false, 0, serdeInfo, null, null, null);
 
-    Map<String, String> tableParameters = new HashMap<String, String>();
+    Map<String, String> tableParameters = new HashMap<>();
     tableParameters.put("hive.hcatalog.partition.spec.grouping.enabled", enablePartitionGrouping? "true":"false");
     Table table = new Table(tableName, dbName, "", 0, 0, 0, storageDescriptor, partColumns, tableParameters, "", "", "");
 
@@ -177,7 +175,7 @@ public class TestHiveMetaStorePartitionSpecs {
 
   private void testGetPartitionSpecs(boolean enablePartitionGrouping) {
     try {
-      HiveMetaStoreClient hmsc = new HiveMetaStoreClient(hiveConf);
+      HiveMetaStoreClient hmsc = new HiveMetaStoreClient(conf);
       clearAndRecreateDB(hmsc);
       createTable(hmsc, enablePartitionGrouping);
       Table table = hmsc.getTable(dbName, tableName);
@@ -186,9 +184,9 @@ public class TestHiveMetaStorePartitionSpecs {
       PartitionSpecProxy partitionSpecProxy = hmsc.listPartitionSpecs(dbName, tableName, -1);
       Assert.assertEquals( "Unexpected number of partitions.", nDates * 2, partitionSpecProxy.size());
 
-      Map<String, List<String>> locationToDateMap = new HashMap<String, List<String>>();
-      locationToDateMap.put("isLocatedInTablePath",  new ArrayList<String>());
-      locationToDateMap.put("isLocatedOutsideTablePath", new ArrayList<String>());
+      Map<String, List<String>> locationToDateMap = new HashMap<>();
+      locationToDateMap.put("isLocatedInTablePath",  new ArrayList<>());
+      locationToDateMap.put("isLocatedOutsideTablePath", new ArrayList<>());
       PartitionSpecProxy.PartitionIterator iterator = partitionSpecProxy.getPartitionIterator();
 
       while (iterator.hasNext()) {
@@ -196,7 +194,7 @@ public class TestHiveMetaStorePartitionSpecs {
         locationToDateMap.get(partition.getValues().get(1)).add(partition.getValues().get(0));
       }
 
-      List<String> expectedDates = new ArrayList<String>(nDates);
+      List<String> expectedDates = new ArrayList<>(nDates);
       for (int i=0; i<nDates; ++i) {
         expectedDates.add(datePrefix + i);
       }
@@ -244,7 +242,7 @@ public class TestHiveMetaStorePartitionSpecs {
   public void testAddPartitions() {
     try {
       // Create source table.
-      HiveMetaStoreClient hmsc = new HiveMetaStoreClient(hiveConf);
+      HiveMetaStoreClient hmsc = new HiveMetaStoreClient(conf);
       clearAndRecreateDB(hmsc);
       createTable(hmsc, true);
       Table table = hmsc.getTable(dbName, tableName);
@@ -300,7 +298,7 @@ public class TestHiveMetaStorePartitionSpecs {
   public void testFetchingPartitionsWithDifferentSchemas() {
     try {
       // Create source table.
-      HiveMetaStoreClient hmsc = new HiveMetaStoreClient(hiveConf);
+      HiveMetaStoreClient hmsc = new HiveMetaStoreClient(conf);
       clearAndRecreateDB(hmsc);
       createTable(hmsc, true);
       Table table = hmsc.getTable(dbName, tableName);
@@ -344,14 +342,14 @@ public class TestHiveMetaStorePartitionSpecs {
 
       // Categorize the partitions returned, and confirm that all partitions are accounted for.
       PartitionSpecProxy.PartitionIterator iterator = partitionSpecProxy.getPartitionIterator();
-      Map<String, List<Partition>> blurbToPartitionList = new HashMap<String, List<Partition>>(3);
+      Map<String, List<Partition>> blurbToPartitionList = new HashMap<>(3);
       while (iterator.hasNext()) {
 
         Partition partition = iterator.next();
         String blurb = partition.getValues().get(1);
 
         if (!blurbToPartitionList.containsKey(blurb)) {
-          blurbToPartitionList.put(blurb, new ArrayList<Partition>(nDates));
+          blurbToPartitionList.put(blurb, new ArrayList<>(nDates));
         }
 
         blurbToPartitionList.get(blurb).add(partition);
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -20,9 +20,11 @@ package org.apache.hadoop.hive.metastore;
 
 import java.util.concurrent.TimeUnit;
 
-import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
 import org.apache.hadoop.util.StringUtils;
 import org.junit.AfterClass;
 import org.junit.Assert;
@@ -35,25 +37,20 @@ import org.junit.Test;
  */
 public class TestHiveMetaStoreTimeout {
   protected static HiveMetaStoreClient client;
-  protected static HiveConf hiveConf;
+  protected static Configuration conf;
   protected static Warehouse warehouse;
 
   @BeforeClass
   public static void setUp() throws Exception {
     HiveMetaStore.TEST_TIMEOUT_ENABLED = true;
-    hiveConf = new HiveConf(TestHiveMetaStoreTimeout.class);
-    hiveConf.set(HiveConf.ConfVars.METASTORE_EXPRESSION_PROXY_CLASS.varname,
-        MockPartitionExpressionForMetastore.class.getCanonicalName());
-    hiveConf.setTimeVar(HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT, 10 * 1000,
+    conf = MetastoreConf.newMetastoreConf();
+    MetastoreConf.setClass(conf, ConfVars.EXPRESSION_PROXY_CLASS,
+        MockPartitionExpressionForMetastore.class, PartitionExpressionProxy.class);
+    MetastoreConf.setTimeVar(conf, ConfVars.CLIENT_SOCKET_TIMEOUT, 1000,
         TimeUnit.MILLISECONDS);
-    warehouse = new Warehouse(hiveConf);
-    try {
-      client = new HiveMetaStoreClient(hiveConf);
-    } catch (Throwable e) {
-      System.err.println("Unable to open the metastore");
-      System.err.println(StringUtils.stringifyException(e));
-      throw e;
-    }
+    MetaStoreTestUtils.setConfForStandloneMode(conf);
+    warehouse = new Warehouse(conf);
+    client = new HiveMetaStoreClient(conf);
   }
 
   @AfterClass
@@ -70,7 +67,7 @@ public class TestHiveMetaStoreTimeout {
 
   @Test
   public void testNoTimeout() throws Exception {
-    HiveMetaStore.TEST_TIMEOUT_VALUE = 5 * 1000;
+    HiveMetaStore.TEST_TIMEOUT_VALUE = 250;
 
     String dbName = "db";
     client.dropDatabase(dbName, true, true);
@@ -88,7 +85,7 @@ public class TestHiveMetaStoreTimeout {
 
   @Test
   public void testTimeout() throws Exception {
-    HiveMetaStore.TEST_TIMEOUT_VALUE = 15 * 1000;
+    HiveMetaStore.TEST_TIMEOUT_VALUE = 2 * 1000;
 
     String dbName = "db";
     client.dropDatabase(dbName, true, true);
@@ -104,12 +101,12 @@ public class TestHiveMetaStoreTimeout {
     }
 
     // restore
-    HiveMetaStore.TEST_TIMEOUT_VALUE = 5 * 1000;
+    HiveMetaStore.TEST_TIMEOUT_VALUE = 1;
   }
 
   @Test
   public void testResetTimeout() throws Exception {
-    HiveMetaStore.TEST_TIMEOUT_VALUE = 5 * 1000;
+    HiveMetaStore.TEST_TIMEOUT_VALUE = 250;
     String dbName = "db";
 
     // no timeout before reset
@@ -124,7 +121,8 @@ public class TestHiveMetaStoreTimeout {
     client.dropDatabase(dbName, true, true);
 
     // reset
-    client.setMetaConf(HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT.varname, "3s");
+    HiveMetaStore.TEST_TIMEOUT_VALUE = 2000;
+    client.setMetaConf(ConfVars.CLIENT_SOCKET_TIMEOUT.getVarname(), "1s");
 
     // timeout after reset
     try {
@@ -137,6 +135,6 @@ public class TestHiveMetaStoreTimeout {
 
     // restore
     client.dropDatabase(dbName, true, true);
-    client.setMetaConf(HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT.varname, "10s");
+    client.setMetaConf(ConfVars.CLIENT_SOCKET_TIMEOUT.getVarname(), "10s");
   }
 }
\ No newline at end of file
index 7c54354..19279a5 100644 (file)
@@ -21,7 +21,6 @@ package org.apache.hadoop.hive.metastore;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars;
-import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.junit.Test;
 
 /**
@@ -37,7 +36,7 @@ public class TestMetaStoreConnectionUrlHook {
     MetastoreConf.setVar(conf, ConfVars.CONNECTURLHOOK, DummyJdoConnectionUrlHook.class.getName());
     MetastoreConf.setVar(conf, ConfVars.CONNECTURLKEY, DummyJdoConnectionUrlHook.initialUrl);
     MetastoreConf.setVar(conf, ConfVars.RAW_STORE_IMPL, DummyRawStoreForJdoConnection.class.getName());
-    MetaStoreUtils.setConfForStandloneMode(conf);
+    MetaStoreTestUtils.setConfForStandloneMode(conf);
 
     // Instantiating the HMSHandler with hive.metastore.checkForDefaultDb will cause it to
     // initialize an instance of the DummyRawStoreForJdoConnection