package guang.crawler.centerConfig.controller; import guang.crawler.centerConfig.CenterConfigElement; import guang.crawler.connector.ZookeeperConnector; import java.io.IOException; import org.apache.zookeeper.KeeperException; /** * 该类对应了控制器配置节点下的manager节点,竞争控制器成功的线程将创建该节点,并在该节点中记录当前线程所对应主机的IP * * @author sun * */ public class ControllerManagerInfo extends CenterConfigElement { /** * 当前manager节点的父节点,该变量设置的目的是为了方便的访问. */ private final ControllerConfigInfo controllerConfigInfo; /** * 该节点中存储了管理者的主机的地址,该字符串即是表示改属性的key. */ private static final String KEY_CONTROLLER_MANAGER_ADDR = "controller.manager.address"; /** * 创建控制器节点下的管理者对象. * * @param controllerConfigInfo * 代表当前节点的父节点的对象,以方便双向访问. * @param path * 当前节点的路径 * @param connector * Zookeeper连接器 */ public ControllerManagerInfo( final ControllerConfigInfo controllerConfigInfo, final String path, final ZookeeperConnector connector) { super(path, connector); this.controllerConfigInfo = controllerConfigInfo; } public ControllerConfigInfo getControllerConfigInfo() { return this.controllerConfigInfo; } /** * 获取manager节点的拥有者的主机的IP * * @return * @throws InterruptedException */ public String getControllerManagerAddress() throws InterruptedException { return this.getProperty(ControllerManagerInfo.KEY_CONTROLLER_MANAGER_ADDR); } /** * 设置manager节点的拥有者的主机的IP * * @param address * IP地址 * @param refreshNow * 是否立即刷新 * @throws InterruptedException * @throws IOException * @throws KeeperException */ public void setControllerManagerAddress(final String address, final boolean refreshNow) throws InterruptedException, IOException, KeeperException { this.setProperty(ControllerManagerInfo.KEY_CONTROLLER_MANAGER_ADDR, address, refreshNow); } }