1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.util;
21
22 import java.io.IOException;
23 import java.util.List;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.hadoop.conf.Configuration;
28 import org.apache.hadoop.hbase.master.HMaster;
29 import org.apache.hadoop.hbase.regionserver.HRegionServer;
30
31
32
33
34 public class JVMClusterUtil {
35 private static final Log LOG = LogFactory.getLog(JVMClusterUtil.class);
36
37
38
39
40 public static class RegionServerThread extends Thread {
41 private final HRegionServer regionServer;
42
43 public RegionServerThread(final HRegionServer r, final int index) {
44 super(r, "RegionServer:" + index);
45 this.regionServer = r;
46 }
47
48
49 public HRegionServer getRegionServer() {
50 return this.regionServer;
51 }
52
53
54
55
56
57 public void waitForServerOnline() {
58
59
60
61
62 while (!this.regionServer.isOnline() &&
63 !this.regionServer.isStopRequested()) {
64 try {
65 Thread.sleep(1000);
66 } catch (InterruptedException e) {
67
68 }
69 }
70 }
71 }
72
73
74
75
76
77
78
79
80
81
82 public static JVMClusterUtil.RegionServerThread createRegionServerThread(final Configuration c,
83 final Class<? extends HRegionServer> hrsc, final int index)
84 throws IOException {
85 HRegionServer server;
86 try {
87 server = hrsc.getConstructor(Configuration.class).newInstance(c);
88 } catch (Exception e) {
89 IOException ioe = new IOException();
90 ioe.initCause(e);
91 throw ioe;
92 }
93 return new JVMClusterUtil.RegionServerThread(server, index);
94 }
95
96
97
98
99
100
101
102 public static String startup(final HMaster m,
103 final List<JVMClusterUtil.RegionServerThread> regionservers) {
104 if (m != null) m.start();
105 if (regionservers != null) {
106 for (JVMClusterUtil.RegionServerThread t: regionservers) {
107 t.start();
108 }
109 }
110 return m == null? null: m.getMasterAddress().toString();
111 }
112
113
114
115
116
117 public static void shutdown(final HMaster master,
118 final List<RegionServerThread> regionservers) {
119 LOG.debug("Shutting down HBase Cluster");
120 if (master != null) {
121 master.shutdown();
122 }
123
124
125 for(Thread t: regionservers) {
126 if (t.isAlive()) {
127 try {
128 t.join();
129 } catch (InterruptedException e) {
130
131 }
132 }
133 }
134 if (master != null) {
135 while (master.isAlive()) {
136 try {
137
138
139
140 Threads.threadDumpingIsAlive(master);
141 } catch(InterruptedException e) {
142
143 }
144 }
145 }
146 LOG.info("Shutdown " +
147 ((regionservers != null)? master.getName(): "0 masters") +
148 " " + regionservers.size() + " region server(s)");
149 }
150 }