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
20 package org.apache.hadoop.hbase.zookeeper;
21
22 import java.util.ArrayList;
23 import java.util.List;
24 import java.util.Map.Entry;
25 import java.util.Properties;
26
27 import org.apache.hadoop.conf.Configuration;
28 import org.apache.hadoop.hbase.HBaseConfiguration;
29
30 /**
31 * Tool for reading a ZooKeeper server from HBase XML configuration producing
32 * the '-server host:port' argument to pass ZooKeeperMain. This program
33 * emits either '-server HOST:PORT" where HOST is one of the zk ensemble
34 * members plus zk client port OR it emits '' if no zk servers found (Yes,
35 * it emits '-server' too).
36 */
37 public class ZooKeeperMainServerArg {
38 public String parse(final Configuration c) {
39 // Note that we do not simply grab the property
40 // HConstants.ZOOKEEPER_QUORUM from the HBaseConfiguration because the
41 // user may be using a zoo.cfg file.
42 Properties zkProps = ZKConfig.makeZKProps(c);
43 String host = null;
44 String clientPort = null;
45 List<String> hosts = new ArrayList<String>();
46 for (Entry<Object, Object> entry: zkProps.entrySet()) {
47 String key = entry.getKey().toString().trim();
48 String value = entry.getValue().toString().trim();
49 if (key.startsWith("server.")) {
50 String[] parts = value.split(":");
51 hosts.add(parts[0]);
52 } else if (key.endsWith("clientPort")) {
53 clientPort = value;
54 }
55 }
56 if (hosts.isEmpty() || clientPort == null)
57 return null;
58 for (int i = 0; i < hosts.size(); i++) {
59 if (i > 0)
60 host += "," + hosts.get(i);
61 else
62 host = hosts.get(i);
63 }
64 return host != null ? host + ":" + clientPort : null;
65 }
66
67 /**
68 * Run the tool.
69 * @param args Command line arguments. First arg is path to zookeepers file.
70 */
71 public static void main(String args[]) {
72 Configuration conf = HBaseConfiguration.create();
73 String hostport = new ZooKeeperMainServerArg().parse(conf);
74 System.out.println((hostport == null || hostport.length() == 0)? "":
75 "-server " + hostport);
76 }
77 }