use of org.apache.kafka.common.message.DeleteAclsResponseData.DeleteAclsFilterResult in project kafka by apache.
the class KafkaAdminClient method deleteAcls.
@Override
public DeleteAclsResult deleteAcls(Collection<AclBindingFilter> filters, DeleteAclsOptions options) {
final long now = time.milliseconds();
final Map<AclBindingFilter, KafkaFutureImpl<FilterResults>> futures = new HashMap<>();
final List<AclBindingFilter> aclBindingFiltersSent = new ArrayList<>();
final List<DeleteAclsFilter> deleteAclsFilters = new ArrayList<>();
for (AclBindingFilter filter : filters) {
if (futures.get(filter) == null) {
aclBindingFiltersSent.add(filter);
deleteAclsFilters.add(DeleteAclsRequest.deleteAclsFilter(filter));
futures.put(filter, new KafkaFutureImpl<>());
}
}
final DeleteAclsRequestData data = new DeleteAclsRequestData().setFilters(deleteAclsFilters);
runnable.call(new Call("deleteAcls", calcDeadlineMs(now, options.timeoutMs()), new LeastLoadedNodeProvider()) {
@Override
DeleteAclsRequest.Builder createRequest(int timeoutMs) {
return new DeleteAclsRequest.Builder(data);
}
@Override
void handleResponse(AbstractResponse abstractResponse) {
DeleteAclsResponse response = (DeleteAclsResponse) abstractResponse;
List<DeleteAclsResponseData.DeleteAclsFilterResult> results = response.filterResults();
Iterator<DeleteAclsResponseData.DeleteAclsFilterResult> iter = results.iterator();
for (AclBindingFilter bindingFilter : aclBindingFiltersSent) {
KafkaFutureImpl<FilterResults> future = futures.get(bindingFilter);
if (!iter.hasNext()) {
future.completeExceptionally(new UnknownServerException("The broker reported no deletion result for the given filter."));
} else {
DeleteAclsFilterResult filterResult = iter.next();
ApiError error = new ApiError(Errors.forCode(filterResult.errorCode()), filterResult.errorMessage());
if (error.isFailure()) {
future.completeExceptionally(error.exception());
} else {
List<FilterResult> filterResults = new ArrayList<>();
for (DeleteAclsMatchingAcl matchingAcl : filterResult.matchingAcls()) {
ApiError aclError = new ApiError(Errors.forCode(matchingAcl.errorCode()), matchingAcl.errorMessage());
AclBinding aclBinding = DeleteAclsResponse.aclBinding(matchingAcl);
filterResults.add(new FilterResult(aclBinding, aclError.exception()));
}
future.complete(new FilterResults(filterResults));
}
}
}
}
@Override
void handleFailure(Throwable throwable) {
completeAllExceptionally(futures.values(), throwable);
}
}, now);
return new DeleteAclsResult(new HashMap<>(futures));
}
use of org.apache.kafka.common.message.DeleteAclsResponseData.DeleteAclsFilterResult in project kafka by apache.
the class DeleteAclsResponse method filterResult.
public static DeleteAclsFilterResult filterResult(AclDeleteResult result) {
ApiError error = result.exception().map(e -> ApiError.fromThrowable(e)).orElse(ApiError.NONE);
List<DeleteAclsMatchingAcl> matchingAcls = result.aclBindingDeleteResults().stream().map(DeleteAclsResponse::matchingAcl).collect(Collectors.toList());
return new DeleteAclsFilterResult().setErrorCode(error.error().code()).setErrorMessage(error.message()).setMatchingAcls(matchingAcls);
}
use of org.apache.kafka.common.message.DeleteAclsResponseData.DeleteAclsFilterResult in project kafka by apache.
the class DeleteAclsRequest method getErrorResponse.
@Override
public AbstractResponse getErrorResponse(int throttleTimeMs, Throwable throwable) {
ApiError apiError = ApiError.fromThrowable(throwable);
List<DeleteAclsFilterResult> filterResults = Collections.nCopies(data.filters().size(), new DeleteAclsResponseData.DeleteAclsFilterResult().setErrorCode(apiError.error().code()).setErrorMessage(apiError.message()));
return new DeleteAclsResponse(new DeleteAclsResponseData().setThrottleTimeMs(throttleTimeMs).setFilterResults(filterResults), version());
}
Aggregations