/** * 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.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.Order; 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.ql.io.HiveInputFormat; import org.apache.hadoop.hive.ql.io.HiveOutputFormat; import org.apache.hadoop.hive.serde.serdeConstants; import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; import org.apache.hadoop.hive.shims.ShimLoader; /** * TestRetryingHMSHandler. Test case for * {@link org.apache.hadoop.hive.metastore.RetryingHMSHandler} */ public class TestRetryingHMSHandler extends TestCase { private HiveConf hiveConf; private HiveMetaStoreClient msc; @Override protected void setUp() throws Exception { super.setUp(); System.setProperty("hive.metastore.pre.event.listeners", AlternateFailurePreListener.class.getName()); int port = MetaStoreUtils.findFreePort(); MetaStoreUtils.startMetaStore(port, ShimLoader.getHadoopThriftAuthBridge()); hiveConf = new HiveConf(this.getClass()); hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:" + port); hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, 3); hiveConf.setIntVar(HiveConf.ConfVars.HMSHANDLERATTEMPTS, 2); hiveConf.setTimeVar(HiveConf.ConfVars.HMSHANDLERINTERVAL, 0, TimeUnit.MILLISECONDS); hiveConf.setBoolVar(HiveConf.ConfVars.HMSHANDLERFORCERELOADCONF, false); msc = new HiveMetaStoreClient(hiveConf); } @Override protected void tearDown() throws Exception { super.tearDown(); } // Create a database and a table in that database. Because the AlternateFailurePreListener is // being used each attempt to create something should require two calls by the RetryingHMSHandler public void testRetryingHMSHandler() throws Exception { String dbName = "hive4159"; String tblName = "tmptbl"; Database db = new Database(); db.setName(dbName); msc.createDatabase(db); Assert.assertEquals(2, AlternateFailurePreListener.getCallCount()); ArrayList<FieldSchema> cols = new ArrayList<FieldSchema>(2); cols.add(new FieldSchema("c1", serdeConstants.STRING_TYPE_NAME, "")); cols.add(new FieldSchema("c2", serdeConstants.INT_TYPE_NAME, "")); Map<String, String> params = new HashMap<String, String>(); params.put("test_param_1", "Use this for comments etc"); Map<String, String> serdParams = new HashMap<String, String>(); serdParams.put(serdeConstants.SERIALIZATION_FORMAT, "1"); StorageDescriptor sd = new StorageDescriptor(); sd.setCols(cols); sd.setCompressed(false); sd.setNumBuckets(1); sd.setParameters(params); sd.setBucketCols(new ArrayList<String>(2)); sd.getBucketCols().add("name"); sd.setSerdeInfo(new SerDeInfo()); sd.getSerdeInfo().setName(tblName); sd.getSerdeInfo().setParameters(serdParams); sd.getSerdeInfo().getParameters() .put(serdeConstants.SERIALIZATION_FORMAT, "1"); sd.getSerdeInfo().setSerializationLib(LazySimpleSerDe.class.getName()); sd.setInputFormat(HiveInputFormat.class.getName()); sd.setOutputFormat(HiveOutputFormat.class.getName()); sd.setSortCols(new ArrayList<Order>()); Table tbl = new Table(); tbl.setDbName(dbName); tbl.setTableName(tblName); tbl.setSd(sd); tbl.setLastAccessTime(0); msc.createTable(tbl); Assert.assertEquals(4, AlternateFailurePreListener.getCallCount()); } }