public synchronized void start() {
    this.watcher.registerListener(this);
    try {
      if (ZKUtil.watchAndCheckExists(watcher, node)) {
        byte[] data = ZKUtil.getDataAndWatch(watcher, node);
        if (data != null) {
          this.data = data;
        } else {
          // It existed but now does not, try again to ensure a watch is set
          LOG.debug("Try starting again because there is no data from {}", node);
          start();
        }
      }
    } catch (KeeperException e) {
      abortable.abort("Unexpected exception during initialization, aborting", e);
    }
    postStart();
  }
Starts the tracking of the node in ZooKeeper.
<p/>
Use {@link #blockUntilAvailable()} to block until the node is available or
{@link #getData(boolean)} to get the data of the node if it is available.
hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.java