From 1f8021eca9c644da922c814ab4c1cb281069a5a6 Mon Sep 17 00:00:00 2001 From: Michael Stack Date: Mon, 19 Dec 2011 17:24:33 +0000 Subject: [PATCH] HBASE-5051 HBaseTestingUtility#getHBaseAdmin() creates a new HBaseAdmin instance at each call git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1220864 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/hadoop/hbase/master/HMaster.java | 8 ++- .../hadoop/hbase/HBaseTestingUtility.java | 62 +++++++++---------- .../apache/hadoop/hbase/client/TestAdmin.java | 3 +- .../hbase/client/TestFromClientSide.java | 1 + .../hbase/constraint/TestConstraint.java | 2 + .../hbase/mapreduce/TestImportExport.java | 2 + ...estLoadIncrementalHFilesSplitRecovery.java | 3 +- .../hadoop/hbase/master/TestMaster.java | 4 +- .../TestMasterRestartAfterDisablingTable.java | 6 +- .../TestHRegionServerBulkLoad.java | 3 +- .../regionserver/wal/TestLogRollAbort.java | 3 +- .../hbase/rest/TestScannersWithFilters.java | 1 - .../hadoop/hbase/rest/TestTableResource.java | 1 + .../util/hbck/OfflineMetaRebuildTestCore.java | 2 + 14 files changed, 52 insertions(+), 49 deletions(-) diff --git a/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index fb1c5648b45..a5935a64041 100644 --- a/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -1498,10 +1498,12 @@ implements HMasterInterface, HMasterRegionInterface, MasterServices, Server { LOG.error("Error call master coprocessor preShutdown()", ioe); } } - this.assignmentManager.shutdown(); - this.serverManager.shutdownCluster(); + if (this.assignmentManager != null) this.assignmentManager.shutdown(); + if (this.serverManager != null) this.serverManager.shutdownCluster(); try { - this.clusterStatusTracker.setClusterDown(); + if (this.clusterStatusTracker != null){ + this.clusterStatusTracker.setClusterDown(); + } } catch (KeeperException e) { LOG.error("ZooKeeper exception trying to set cluster as down in ZK", e); } diff --git a/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java b/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java index 9ea19e58e1c..bb620a6fcd3 100644 --- a/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java +++ b/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java @@ -579,8 +579,9 @@ public class HBaseTestingUtility { } s.close(); t.close(); + + getHBaseAdmin(); // create immediately the hbaseAdmin LOG.info("Minicluster is up"); - //getHBaseAdmin(); return this.hbaseCluster; } @@ -642,6 +643,10 @@ public class HBaseTestingUtility { * @throws IOException */ public void shutdownMiniHBaseCluster() throws IOException { + if (hbaseAdmin != null) { + hbaseAdmin.close(); + hbaseAdmin = null; + } if (this.hbaseCluster != null) { this.hbaseCluster.shutdown(); // Wait till hbase is down before going on to shutdown zk. @@ -723,9 +728,7 @@ public class HBaseTestingUtility { HColumnDescriptor.DEFAULT_REPLICATION_SCOPE); desc.addFamily(hcd); } - HBaseAdmin admin = getHBaseAdmin(); - admin.createTable(desc, startKey, endKey, numRegions); - admin.close(); + getHBaseAdmin().createTable(desc, startKey, endKey, numRegions); return new HTable(getConfiguration(), tableName); } @@ -744,9 +747,7 @@ public class HBaseTestingUtility { for(byte[] family : families) { desc.addFamily(new HColumnDescriptor(family)); } - HBaseAdmin admin = getHBaseAdmin(); - admin.createTable(desc); - admin.close(); + getHBaseAdmin().createTable(desc); return new HTable(c, tableName); } @@ -773,9 +774,7 @@ public class HBaseTestingUtility { HColumnDescriptor.DEFAULT_REPLICATION_SCOPE); desc.addFamily(hcd); } - HBaseAdmin admin = getHBaseAdmin(); - admin.createTable(desc); - admin.close(); + getHBaseAdmin().createTable(desc); return new HTable(c, tableName); } @@ -814,9 +813,7 @@ public class HBaseTestingUtility { HColumnDescriptor.DEFAULT_REPLICATION_SCOPE); desc.addFamily(hcd); } - HBaseAdmin admin = getHBaseAdmin(); - admin.createTable(desc); - admin.close(); + getHBaseAdmin().createTable(desc); return new HTable(new Configuration(getConfiguration()), tableName); } @@ -841,9 +838,7 @@ public class HBaseTestingUtility { HColumnDescriptor.DEFAULT_REPLICATION_SCOPE); desc.addFamily(hcd); } - HBaseAdmin admin = getHBaseAdmin(); - admin.createTable(desc); - admin.close(); + getHBaseAdmin().createTable(desc); return new HTable(new Configuration(getConfiguration()), tableName); } @@ -871,9 +866,7 @@ public class HBaseTestingUtility { desc.addFamily(hcd); i++; } - HBaseAdmin admin = getHBaseAdmin(); - admin.createTable(desc); - admin.close(); + getHBaseAdmin().createTable(desc); return new HTable(new Configuration(getConfiguration()), tableName); } @@ -882,10 +875,8 @@ public class HBaseTestingUtility { * @param tableName existing table */ public void deleteTable(byte[] tableName) throws IOException { - HBaseAdmin admin = new HBaseAdmin(getConfiguration()); - admin.disableTable(tableName); - admin.deleteTable(tableName); - admin.close(); + getHBaseAdmin().disableTable(tableName); + getHBaseAdmin().deleteTable(tableName); } /** @@ -1093,14 +1084,12 @@ public class HBaseTestingUtility { HConnection conn = table.getConnection(); conn.clearRegionCache(); // assign all the new regions IF table is enabled. - HBaseAdmin admin = getHBaseAdmin(); - if (admin.isTableEnabled(table.getTableName())) { + if (getHBaseAdmin().isTableEnabled(table.getTableName())) { for(HRegionInfo hri : newRegions) { hbaseCluster.getMaster().assignRegion(hri); } } - admin.close(); meta.close(); return count; @@ -1323,14 +1312,21 @@ public class HBaseTestingUtility { /** * Returns a HBaseAdmin instance. + * This instance is shared between HBaseTestingUtility intance users. + * Don't close it, it will be closed automatically when the + * cluster shutdowns * * @return The HBaseAdmin instance. * @throws IOException */ - public HBaseAdmin getHBaseAdmin() + public synchronized HBaseAdmin getHBaseAdmin() throws IOException { - return new HBaseAdmin(new Configuration(getConfiguration())); + if (hbaseAdmin == null){ + hbaseAdmin = new HBaseAdmin(new Configuration(getConfiguration())); + } + return hbaseAdmin; } + private HBaseAdmin hbaseAdmin = null; /** * Closes the named region. @@ -1349,9 +1345,7 @@ public class HBaseTestingUtility { * @throws IOException */ public void closeRegion(byte[] regionName) throws IOException { - HBaseAdmin admin = getHBaseAdmin(); - admin.closeRegion(regionName, null); - admin.close(); + getHBaseAdmin().closeRegion(regionName, null); } /** @@ -1443,14 +1437,12 @@ public class HBaseTestingUtility { public void waitTableAvailable(byte[] table, long timeoutMillis) throws InterruptedException, IOException { - HBaseAdmin admin = getHBaseAdmin(); long startWait = System.currentTimeMillis(); - while (!admin.isTableAvailable(table)) { + while (!getHBaseAdmin().isTableAvailable(table)) { assertTrue("Timed out waiting for table " + Bytes.toStringBinary(table), System.currentTimeMillis() - startWait < timeoutMillis); Thread.sleep(200); } - admin.close(); } /** @@ -1860,6 +1852,7 @@ public class HBaseTestingUtility { totalNumberOfRegions); admin.createTable(desc, splits); + admin.close(); } catch (MasterNotRunningException e) { LOG.error("Master not running", e); throw new IOException(e); @@ -1873,6 +1866,7 @@ public class HBaseTestingUtility { public static int getMetaRSPort(Configuration conf) throws IOException { HTable table = new HTable(conf, HConstants.META_TABLE_NAME); HRegionLocation hloc = table.getRegionLocation(Bytes.toBytes("")); + table.close(); return hloc.getPort(); } diff --git a/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java b/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java index 9f668800f57..53000695284 100644 --- a/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java +++ b/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java @@ -82,12 +82,11 @@ public class TestAdmin { @Before public void setUp() throws Exception { - this.admin = new HBaseAdmin(TEST_UTIL.getConfiguration()); + this.admin = TEST_UTIL.getHBaseAdmin(); } @After public void tearDown() throws Exception { - this.admin.close(); } @Test diff --git a/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java b/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java index 5265a2a59e9..309d97a7679 100644 --- a/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java +++ b/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java @@ -197,6 +197,7 @@ public class TestFromClientSide { assertArrayEquals(T2, kvs[3].getValue()); assertArrayEquals(T1, kvs[4].getValue()); scanner.close(); + h.close(); } /** diff --git a/src/test/java/org/apache/hadoop/hbase/constraint/TestConstraint.java b/src/test/java/org/apache/hadoop/hbase/constraint/TestConstraint.java index 75d43275b8a..47f7e33427d 100644 --- a/src/test/java/org/apache/hadoop/hbase/constraint/TestConstraint.java +++ b/src/test/java/org/apache/hadoop/hbase/constraint/TestConstraint.java @@ -126,6 +126,7 @@ public class TestConstraint { Throwable t = causes.get(0); assertEquals(ConstraintException.class, t.getClass()); } + table.close(); } /** @@ -230,6 +231,7 @@ public class TestConstraint { table.put(put); // and we make sure that constraints were not run... assertFalse(CheckWasRunConstraint.wasRun); + table.close(); } @After diff --git a/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportExport.java b/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportExport.java index 87513a6b687..e3bc3233f37 100644 --- a/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportExport.java +++ b/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportExport.java @@ -186,6 +186,7 @@ public class TestImportExport { HColumnDescriptor.DEFAULT_BLOOMFILTER, HConstants.REPLICATION_SCOPE_LOCAL)); UTIL.getHBaseAdmin().createTable(desc); + t.close(); t = new HTable(UTIL.getConfiguration(), IMPORT_TABLE); args = new String[] { IMPORT_TABLE, @@ -213,5 +214,6 @@ public class TestImportExport { assertEquals(now+2, res[4].getTimestamp()); assertEquals(now+1, res[5].getTimestamp()); assertEquals(now, res[6].getTimestamp()); + t.close(); } } diff --git a/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java b/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java index 21fa495d69b..5e3e994b655 100644 --- a/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java +++ b/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java @@ -111,8 +111,7 @@ public class TestLoadIncrementalHFilesSplitRecovery { htd.addFamily(new HColumnDescriptor(family(i))); } - HBaseAdmin admin = util.getHBaseAdmin(); - admin.createTable(htd); + util.getHBaseAdmin().createTable(htd); } catch (TableExistsException tee) { LOG.info("Table " + table + " already exists"); } diff --git a/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index ad51f2e5264..b7a8270cf3b 100644 --- a/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -67,7 +67,6 @@ public class TestMaster { public void testMasterOpsWhileSplitting() throws Exception { MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster(); HMaster m = cluster.getMaster(); - HBaseAdmin admin = TEST_UTIL.getHBaseAdmin(); HTable ht = TEST_UTIL.createTable(TABLENAME, FAMILYNAME); TEST_UTIL.loadTable(ht, FAMILYNAME); @@ -91,7 +90,7 @@ public class TestMaster { registerListener(EventType.RS_ZK_REGION_SPLIT, list); LOG.info("Splitting table"); - admin.split(TABLENAME); + TEST_UTIL.getHBaseAdmin().split(TABLENAME); LOG.info("Waiting for split result to be about to open"); split.await(60, TimeUnit.SECONDS); try { @@ -113,7 +112,6 @@ public class TestMaster { } finally { proceed.countDown(); } - admin.close(); } static class RegionSplitListener implements EventHandlerListener { diff --git a/src/test/java/org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.java b/src/test/java/org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.java index bfa39fbed56..777c67d9bd4 100644 --- a/src/test/java/org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.java +++ b/src/test/java/org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.java @@ -30,6 +30,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; +import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread; @@ -96,7 +97,10 @@ public class TestMasterRestartAfterDisablingTable { cluster.waitForActiveAndReadyMaster(); log("Enabling table\n"); - TEST_UTIL.getHBaseAdmin().enableTable(table); + // Need a new Admin, the previous one is on the old master + HBaseAdmin admin = new HBaseAdmin(TEST_UTIL.getConfiguration()); + admin.enableTable(table); + admin.close(); log("Waiting for no more RIT\n"); blockUntilNoRIT(zkw, master); log("Verifying there are " + numRegions + " assigned on cluster\n"); diff --git a/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java b/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java index 3a676c51cae..0a343710a46 100644 --- a/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java +++ b/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java @@ -236,8 +236,7 @@ public class TestHRegionServerBulkLoad { htd.addFamily(new HColumnDescriptor(family(i))); } - HBaseAdmin admin = UTIL.getHBaseAdmin(); - admin.createTable(htd); + UTIL.getHBaseAdmin().createTable(htd); } catch (TableExistsException tee) { LOG.info("Table " + table + " already exists"); } diff --git a/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollAbort.java b/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollAbort.java index b6764bfa0af..3ea0a3b4675 100644 --- a/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollAbort.java +++ b/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollAbort.java @@ -123,7 +123,8 @@ public class TestLogRollAbort { LOG.info("Starting testRSAbortWithUnflushedEdits()"); // When the META table can be opened, the region servers are running - new HTable(TEST_UTIL.getConfiguration(), HConstants.META_TABLE_NAME); + new HTable(TEST_UTIL.getConfiguration(), + HConstants.META_TABLE_NAME).close(); // Create the test table and open it String tableName = this.getClass().getSimpleName(); diff --git a/src/test/java/org/apache/hadoop/hbase/rest/TestScannersWithFilters.java b/src/test/java/org/apache/hadoop/hbase/rest/TestScannersWithFilters.java index 8af3e61562e..53f388c0007 100644 --- a/src/test/java/org/apache/hadoop/hbase/rest/TestScannersWithFilters.java +++ b/src/test/java/org/apache/hadoop/hbase/rest/TestScannersWithFilters.java @@ -201,7 +201,6 @@ public class TestScannersWithFilters { numRows -= 2; table.close(); } - admin.close(); } @AfterClass diff --git a/src/test/java/org/apache/hadoop/hbase/rest/TestTableResource.java b/src/test/java/org/apache/hadoop/hbase/rest/TestTableResource.java index b8e190b34c9..514db41ab90 100644 --- a/src/test/java/org/apache/hadoop/hbase/rest/TestTableResource.java +++ b/src/test/java/org/apache/hadoop/hbase/rest/TestTableResource.java @@ -123,6 +123,7 @@ public class TestTableResource { assertEquals(m.size(), 2); regionMap = m; LOG.info("regions: " + regionMap); + table.close(); } @AfterClass diff --git a/src/test/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.java b/src/test/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.java index 0b7de2cc37a..201d38cbf6d 100644 --- a/src/test/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.java +++ b/src/test/java/org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.java @@ -233,6 +233,8 @@ public class OfflineMetaRebuildTestCore { } meta.delete(dels); meta.flushCommits(); + scanner.close(); + meta.close(); } /**