KAFKA-16669 Remove extra collection copy when generating DescribeAclsResource (#15924)

Reviewers: Chia-Ping Tsai <chia7712@gmail.com>
This commit is contained in:
Chia Chuan Yu 2024-06-17 14:47:44 +08:00 committed by GitHub
parent 4a37c2e18f
commit 768e90f667
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 9 deletions

View File

@ -28,12 +28,13 @@ import org.apache.kafka.common.protocol.Errors;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -137,15 +138,15 @@ public class DescribeAclsResponse extends AbstractResponse {
return resources.stream().flatMap(DescribeAclsResponse::aclBindings).collect(Collectors.toList());
}
public static List<DescribeAclsResource> aclsResources(Collection<AclBinding> acls) {
Map<ResourcePattern, List<AccessControlEntry>> patternToEntries = new HashMap<>();
public static List<DescribeAclsResource> aclsResources(Iterable<AclBinding> acls) {
Map<ResourcePattern, Set<AccessControlEntry>> patternToEntries = new HashMap<>();
for (AclBinding acl : acls) {
patternToEntries.computeIfAbsent(acl.pattern(), v -> new ArrayList<>()).add(acl.entry());
patternToEntries.computeIfAbsent(acl.pattern(), v -> new HashSet<>()).add(acl.entry());
}
List<DescribeAclsResource> resources = new ArrayList<>(patternToEntries.size());
for (Entry<ResourcePattern, List<AccessControlEntry>> entry : patternToEntries.entrySet()) {
for (Entry<ResourcePattern, Set<AccessControlEntry>> entry : patternToEntries.entrySet()) {
ResourcePattern key = entry.getKey();
List<AclDescription> aclDescriptions = new ArrayList<>();
List<AclDescription> aclDescriptions = new ArrayList<>(entry.getValue().size());
for (AccessControlEntry ace : entry.getValue()) {
AclDescription ad = new AclDescription()
.setHost(ace.host())

View File

@ -68,12 +68,10 @@ class AclApis(authHelper: AuthHelper,
describeAclsRequest.version))
case Some(auth) =>
val filter = describeAclsRequest.filter
val returnedAcls = new util.HashSet[AclBinding]()
auth.acls(filter).forEach(returnedAcls.add)
requestHelper.sendResponseMaybeThrottle(request, requestThrottleMs =>
new DescribeAclsResponse(new DescribeAclsResponseData()
.setThrottleTimeMs(requestThrottleMs)
.setResources(DescribeAclsResponse.aclsResources(returnedAcls)),
.setResources(DescribeAclsResponse.aclsResources(auth.acls(filter))),
describeAclsRequest.version))
}
CompletableFuture.completedFuture[Unit](())