1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.master;
22
23 import java.io.IOException;
24
25 import org.apache.hadoop.hbase.HBaseClusterTestCase;
26 import org.apache.hadoop.hbase.HConstants;
27 import org.apache.hadoop.hbase.client.HBaseAdmin;
28 import org.apache.hadoop.hbase.client.HTable;
29 import org.apache.hadoop.hbase.client.Result;
30 import org.apache.hadoop.hbase.client.ResultScanner;
31
32 public class TestMinimumServerCount extends HBaseClusterTestCase {
33
34 static final String TABLE_NAME = "TestTable";
35
36 public TestMinimumServerCount() {
37
38 super(1, true);
39 }
40
41 boolean isTableAvailable(String tableName) throws IOException {
42 boolean available = true;
43 HTable meta = new HTable(conf, ".META.");
44 ResultScanner scanner = meta.getScanner(HConstants.CATALOG_FAMILY);
45 Result result;
46 while ((result = scanner.next()) != null) {
47
48
49 byte[] value = result.getValue(HConstants.CATALOG_FAMILY,
50 HConstants.SERVER_QUALIFIER);
51 if (value == null) {
52 available = false;
53 break;
54 }
55 }
56 return available;
57 }
58
59 public void testMinimumServerCount() throws Exception {
60 HBaseAdmin admin = new HBaseAdmin(conf);
61
62
63 admin.createTable(createTableDescriptor(TABLE_NAME));
64 admin.disableTable(TABLE_NAME);
65 assertFalse(admin.isTableEnabled(TABLE_NAME));
66
67
68 cluster.hbaseCluster.getMaster().getServerManager()
69 .setMinimumServerCount(2);
70
71
72 try {
73 admin.enableTable(TABLE_NAME);
74 } catch (IOException ex) {
75
76 }
77 Thread.sleep(10 * 1000);
78 assertFalse(admin.isTableAvailable(TABLE_NAME));
79
80
81 cluster.startRegionServer();
82
83
84 Thread.sleep(10 * 1000);
85 assertTrue(admin.isTableAvailable(TABLE_NAME));
86 }
87
88 }