@Override
  public void nodeCreated(String path) {
    waitUntilStarted();
    if (path.equals(aclZNode)) {
      asyncProcessNodeUpdate(new Runnable() {
        @Override
        public void run() {
          try {
            List<ZKUtil.NodeAndData> nodes =
              ZKUtil.getChildDataAndWatchForNewChildren(watcher, aclZNode);
            refreshNodes(nodes);
          } catch (KeeperException ke) {
            LOG.error("Error reading data from zookeeper", ke);
            // only option is to abort
            watcher.abort("ZooKeeper error obtaining acl node children", ke);
          }
        }
      });
    }
  }
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