default List<? extends CompletionStage<AclDeleteResult>> deleteAcls(
            AuthorizableRequestContext requestContext,
            List<AclBindingFilter> filters) {
        List<CompletableFuture<AclDeleteResult>> futures = new ArrayList<>(filters.size());
        AclMutator aclMutator = aclMutatorOrException();
        filters.forEach(b -> futures.add(new CompletableFuture<>()));
        ControllerRequestContext context = new ControllerRequestContext(
            requestContext, OptionalLong.empty());
        aclMutator.deleteAcls(context, filters).whenComplete((results, throwable) -> {
            if (throwable == null && results.size() != futures.size()) {
                throwable = new UnknownServerException("Invalid size " +
                    "of result set from controller. Expected " + futures.size() +
                    "; got " + results.size());
            }
            if (throwable == null) {
                for (int i = 0; i < futures.size(); i++) {
                    futures.get(i).complete(results.get(i));
                }
            } else {
                for (CompletableFuture<AclDeleteResult> future : futures) {
                    ApiException e = (throwable instanceof ApiException) ? (ApiException) throwable :
                        ApiError.fromThrowable(throwable).exception();
                    future.complete(new AclDeleteResult(e));
                }
            }
        });
        return futures;
    }
Delete ACLs based on filters. This function must be called on the active
controller, or else the futures will fail with NOT_CONTROLLER.

@param requestContext    The request context.
@param filters           The ACL filters.

@return a list of futures, one per input acl filter. Each future will be completed
once the relevant deleteAcls have been called on the controller (if any), and th
ACL deletions have been persisted to the cluster metadata log (if any).
metadata/src/main/java/org/apache/kafka/metadata/authorizer/ClusterMetadataAuthorizer.java