Dhruvil Shah created KAFKA-9956:
-----------------------------------
Summary: Authorizer APIs may be invoked more than once for a given
request
Key: KAFKA-9956
URL: https://issues.apache.org/jira/browse/KAFKA-9956
Project: Kafka
Issue Type: Bug
Reporter: Dhruvil Shah
Authorizer#authorize may be invoked more than once in some cases for a given
request. I noticed this in for `DescribeConfigsRequest` but other requests
could be affected as well.
The reason for this is the misuse of the scala `partition` API in code like
this:
{code:java}
val (authorizedResources, unauthorizedResources) =
describeConfigsRequest.resources.asScala.partition { resource =>
resource.`type` match {
case ConfigResource.Type.BROKER | ConfigResource.Type.BROKER_LOGGER =>
authorize(request.context, DESCRIBE_CONFIGS, CLUSTER, CLUSTER_NAME)
case ConfigResource.Type.TOPIC =>
authorize(request.context, DESCRIBE_CONFIGS, TOPIC, resource.name)
case rt => throw new InvalidRequestException(s"Unexpected resource type $rt
for resource ${resource.name}")
}
}
{code}
As per Scala docs, the `partition` API could traverse the collection twice,
depending on the implementation.
[https://www.scala-lang.org/api/current/scala/collection/Iterable.html#partition(p:A=%3EBoolean):(C,C)]
It is also not a good practice to include side effects as part of the lambda
passed into `partition`. We should clean up such usages.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)