public void start() throws KeeperException {
    try {
      watcher.registerListener(this);
      if (ZKUtil.watchAndCheckExists(watcher, aclZNode)) {
        try {
          executor.submit(new Callable<Void>() {
            @Override
            public Void call() throws KeeperException {
              List<ZKUtil.NodeAndData> existing =
                ZKUtil.getChildDataAndWatchForNewChildren(watcher, aclZNode);
              if (existing != null) {
                refreshNodes(existing);
              }
              return null;
            }
          }).get();
        } catch (ExecutionException ex) {
          if (ex.getCause() instanceof KeeperException) {
            throw (KeeperException) ex.getCause();
          } else {
            throw new RuntimeException(ex.getCause());
          }
        } catch (InterruptedException ex) {
          Thread.currentThread().interrupt();
        }
      }
    } finally {
      initialized.countDown();
    }
  }
Handles synchronization of access control list entries and updates throughout all nodes in the
cluster. The {@link AccessController} instance on the {@code _acl_} table regions, creates a
znode for each table as {@code /hbase/acl/tablename}, with the znode data containing a serialized
list of the permissions granted for the table. The {@code AccessController} instances on all
other cluster hosts watch the znodes for updates, which trigger updates in the
{@link AuthManager} permission cache.
hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java