1 /** 2 * Copyright 2010 The Apache Software Foundation 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 package org.apache.hadoop.hbase; 21 22 import org.apache.hadoop.hbase.util.Bytes; 23 import org.apache.hadoop.hbase.zookeeper.ZooKeeperNodeTracker; 24 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; 25 26 /** 27 * Manages the location of the current active Master for this RegionServer. 28 * <p> 29 * Listens for ZooKeeper events related to the master address. The node 30 * <code>/master</code> will contain the address of the current master. 31 * This listener is interested in 32 * <code>NodeDeleted</code> and <code>NodeCreated</code> events on 33 * <code>/master</code>. 34 * <p> 35 * Utilizes {@link ZooKeeperNodeTracker} for zk interactions. 36 * <p> 37 * You can get the current master via {@link #getMasterAddress()} 38 */ 39 public class MasterAddressTracker extends ZooKeeperNodeTracker { 40 /** 41 * Construct a master address listener with the specified 42 * <code>zookeeper</code> reference. 43 * <p> 44 * This constructor does not trigger any actions, you must call methods 45 * explicitly. Normally you will just want to execute {@link #start()} to 46 * begin tracking of the master address. 47 * 48 * @param watcher zk reference and watcher 49 * @param abortable abortable in case of fatal error 50 */ 51 public MasterAddressTracker(ZooKeeperWatcher watcher, Abortable abortable) { 52 super(watcher, watcher.masterAddressZNode, abortable); 53 } 54 55 /** 56 * Get the address of the current master if one is available. Returns null 57 * if no current master. 58 * @return Server name or null if timed out. 59 */ 60 public ServerName getMasterAddress() { 61 return bytesToServerName(super.getData(false)); 62 } 63 64 /** 65 * Check if there is a master available. 66 * @return true if there is a master set, false if not. 67 */ 68 public boolean hasMaster() { 69 return super.getData(false) != null; 70 } 71 72 /** 73 * @param bytes Byte array of {@link ServerName#toString()} 74 * @return A {@link ServerName} instance. 75 */ 76 private ServerName bytesToServerName(final byte [] bytes) { 77 return bytes == null ? null: ServerName.parseVersionedServerName(bytes); 78 } 79 }