View Javadoc

1   /**
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  package org.apache.hadoop.hbase.regionserver;
20  
21  import org.apache.commons.logging.Log;
22  import org.apache.commons.logging.LogFactory;
23  
24  import org.apache.hadoop.classification.InterfaceAudience;
25  import org.apache.hadoop.conf.Configuration;
26  import org.apache.hadoop.hbase.HConstants;
27  import org.apache.hadoop.hbase.LocalHBaseCluster;
28  import org.apache.hadoop.hbase.util.ServerCommandLine;
29  
30  /**
31   * Class responsible for parsing the command line and starting the
32   * RegionServer.
33   */
34  @InterfaceAudience.Private
35  public class HRegionServerCommandLine extends ServerCommandLine {
36    private static final Log LOG = LogFactory.getLog(HRegionServerCommandLine.class);
37  
38    private final Class<? extends HRegionServer> regionServerClass;
39  
40    private static final String USAGE =
41      "Usage: HRegionServer [-D conf.param=value] start";
42  
43    public HRegionServerCommandLine(Class<? extends HRegionServer> clazz) {
44      this.regionServerClass = clazz;
45    }
46  
47    protected String getUsage() {
48      return USAGE;
49    }
50  
51    private int start() throws Exception {
52      Configuration conf = getConf();
53      try {
54        // If 'local', don't start a region server here. Defer to
55        // LocalHBaseCluster. It manages 'local' clusters.
56        if (LocalHBaseCluster.isLocal(conf)) {
57          LOG.warn("Not starting a distinct region server because "
58              + HConstants.CLUSTER_DISTRIBUTED + " is false");
59        } else {
60          logProcessInfo(getConf());
61          HRegionServer hrs = HRegionServer.constructRegionServer(regionServerClass, conf);
62          Thread rsThread = HRegionServer.startRegionServer(hrs);
63  
64          rsThread.join();
65          if (hrs.isAborted()) {
66            throw new RuntimeException("HRegionServer Aborted");
67          }
68        }
69      } catch (Throwable t) {
70        LOG.error("Region server exiting", t);
71        return 1;
72      }
73      return 0;
74    }
75  
76    public int run(String args[]) throws Exception {
77      if (args.length != 1) {
78        usage(null);
79        return 1;
80      }
81  
82      String cmd = args[0];
83  
84      if ("start".equals(cmd)) {
85        return start();
86      } else if ("stop".equals(cmd)) {
87        System.err.println(
88          "To shutdown the regionserver run " +
89          "bin/hbase-daemon.sh stop regionserver or send a kill signal to" +
90          "the regionserver pid");
91        return 1;
92      } else {
93        usage("Unknown command: " + args[0]);
94        return 1;
95      }
96    }
97  }