1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.master.handler;
20
21 import java.util.Collections;
22 import java.util.List;
23
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.hadoop.hbase.HConstants;
27 import org.apache.hadoop.hbase.MetaTableAccessor;
28 import org.apache.hadoop.hbase.HBaseTestingUtility;
29 import org.apache.hadoop.hbase.HColumnDescriptor;
30 import org.apache.hadoop.hbase.HRegionInfo;
31 import org.apache.hadoop.hbase.HTableDescriptor;
32 import org.apache.hadoop.hbase.MetaTableAccessor;
33 import org.apache.hadoop.hbase.MiniHBaseCluster;
34 import org.apache.hadoop.hbase.TableName;
35 import org.apache.hadoop.hbase.client.HBaseAdmin;
36 import org.apache.hadoop.hbase.master.HMaster;
37 import org.apache.hadoop.hbase.testclassification.MediumTests;
38 import org.apache.hadoop.hbase.util.Bytes;
39 import org.apache.hadoop.hbase.util.FSTableDescriptors;
40 import org.apache.hadoop.hbase.util.JVMClusterUtil;
41 import org.junit.After;
42 import org.junit.Before;
43 import org.junit.Test;
44 import org.junit.experimental.categories.Category;
45
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertTrue;
48
49 import java.io.IOException;
50 import org.apache.hadoop.hbase.client.Delete;
51 import org.apache.hadoop.hbase.client.Result;
52 import org.apache.hadoop.hbase.client.ResultScanner;
53 import org.apache.hadoop.hbase.client.Scan;
54 import org.apache.hadoop.hbase.client.Table;
55
56 @Category({ MediumTests.class })
57 public class TestEnableTableHandler {
58 private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
59 private static final Log LOG = LogFactory.getLog(TestEnableTableHandler.class);
60 private static final byte[] FAMILYNAME = Bytes.toBytes("fam");
61
62 @Before
63 public void setUp() throws Exception {
64 TEST_UTIL.getConfiguration().set("hbase.balancer.tablesOnMaster", "hbase:meta");
65 TEST_UTIL.startMiniCluster(1);
66 }
67
68 @After
69 public void tearDown() throws Exception {
70 TEST_UTIL.shutdownMiniCluster();
71 }
72
73 @Test(timeout = 300000)
74 public void testEnableTableWithNoRegionServers() throws Exception {
75 final TableName tableName = TableName.valueOf("testEnableTableWithNoRegionServers");
76 final MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
77 final HMaster m = cluster.getMaster();
78 final HBaseAdmin admin = TEST_UTIL.getHBaseAdmin();
79 final HTableDescriptor desc = new HTableDescriptor(tableName);
80 desc.addFamily(new HColumnDescriptor(FAMILYNAME));
81 admin.createTable(desc);
82 admin.disableTable(tableName);
83 TEST_UTIL.waitTableDisabled(tableName.getName());
84
85 admin.enableTable(tableName);
86 TEST_UTIL.waitTableEnabled(tableName);
87
88
89 admin.disableTable(tableName);
90
91 TEST_UTIL.waitUntilNoRegionsInTransition(60000);
92
93 JVMClusterUtil.RegionServerThread rs = cluster.getRegionServerThreads().get(0);
94 rs.getRegionServer().stop("stop");
95 cluster.waitForRegionServerToStop(rs.getRegionServer().getServerName(), 10000);
96
97 TEST_UTIL.waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);
98
99 admin.enableTable(tableName);
100 assertTrue(admin.isTableEnabled(tableName));
101
102 JVMClusterUtil.RegionServerThread rs2 = cluster.startRegionServer();
103 m.getAssignmentManager().assign(admin.getTableRegions(tableName));
104 TEST_UTIL.waitUntilAllRegionsAssigned(tableName);
105 List<HRegionInfo> onlineRegions = admin.getOnlineRegions(
106 rs2.getRegionServer().getServerName());
107 assertEquals(2, onlineRegions.size());
108 assertEquals(tableName, onlineRegions.get(1).getTable());
109 }
110
111
112
113
114
115
116
117
118 @Test(timeout=60000)
119 public void testDeleteForSureClearsAllTableRowsFromMeta()
120 throws IOException, InterruptedException {
121 final TableName tableName = TableName.valueOf("testDeleteForSureClearsAllTableRowsFromMeta");
122 final MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
123 final HMaster m = cluster.getMaster();
124 final HBaseAdmin admin = TEST_UTIL.getHBaseAdmin();
125 final HTableDescriptor desc = new HTableDescriptor(tableName);
126 desc.addFamily(new HColumnDescriptor(FAMILYNAME));
127 admin.createTable(desc, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);
128
129
130 Scan metaScannerForMyTable = MetaTableAccessor.getScanForTableName(tableName);
131 try (Table metaTable = TEST_UTIL.getConnection().getTable(TableName.META_TABLE_NAME)) {
132 try (ResultScanner scanner = metaTable.getScanner(metaScannerForMyTable)) {
133 for (Result result : scanner) {
134
135 Delete d = new Delete(result.getRow());
136 d.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);
137 metaTable.delete(d);
138 break;
139 }
140 }
141 admin.disableTable(tableName);
142 TEST_UTIL.waitTableDisabled(tableName.getName());
143
144 admin.deleteTable(tableName);
145 int rowCount = 0;
146 try (ResultScanner scanner = metaTable.getScanner(metaScannerForMyTable)) {
147 for (Result result : scanner) {
148 rowCount++;
149 }
150 }
151 assertEquals(0, rowCount);
152 }
153 }
154 }