@Override
  public void postDeleteNamespace(ObserverContext<MasterCoprocessorEnvironment> ctx,
    String namespace) throws IOException {
    if (checkInitialized("deleteNamespace " + namespace)) {
      try (Table aclTable =
        ctx.getEnvironment().getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {
        // 1. Delete namespace archive dir default ACLs
        Set<String> users = SnapshotScannerHDFSAclStorage.getEntryUsers(aclTable,
          PermissionStorage.toNamespaceEntry(Bytes.toBytes(namespace)));
        hdfsAclHelper.removeNamespaceDefaultAcl(namespace, users);
        // 2. Record namespace user acl is not synced to HDFS
        SnapshotScannerHDFSAclStorage.deleteNamespaceHdfsAcl(ctx.getEnvironment().getConnection(),
          namespace);
        // 3. Delete tmp namespace directory
        /**
         * Delete namespace tmp directory because it's created by this coprocessor when namespace is
         * created to make namespace default acl can be inherited by tables. The namespace data
         * directory is deleted by DeleteNamespaceProcedure, the namespace archive directory is
         * deleted by HFileCleaner.
         */
        hdfsAclHelper.deleteEmptyDir(pathHelper.getTmpNsDir(namespace));
      }
    }
  }
Provider for mapping principal names to Users
hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclController.java