You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Tom Bentley (Jira)" <ji...@apache.org> on 2020/06/15 15:30:00 UTC

[jira] [Updated] (KAFKA-10109) kafka-acls.sh/AclCommand opens multiple AdminClients

     [ https://issues.apache.org/jira/browse/KAFKA-10109?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tom Bentley updated KAFKA-10109:
--------------------------------
    Description: 
{{AclCommand.AclCommandService}} uses {{withAdminClient(opts: AclCommandOptions)(f: Admin => Unit)}} to abstract the execution of an action using an {{AdminClient}} instance. Unfortunately the use of this method in implemeting {{addAcls()}} and {{removeAcls()}} calls {{listAcls()}}. This causes the creation of a second {{AdminClient}} instance. When the {{--command-config}} option has been used to specify a {{client.id}} for the Admin client, the second instance  fails to register an MBean, resulting in a warning being logged.

{code}
./bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config config/broker_connection.conf.reproducing --add --allow-principal User:alice --operation Describe --topic 'test' --resource-pattern-type prefixed
Adding ACLs for resource `ResourcePattern(resourceType=TOPIC, name=test, patternType=PREFIXED)`: 
 	(principal=User:alice, host=*, operation=DESCRIBE, permissionType=ALLOW) 

[2020-06-03 18:43:12,190] WARN Error registering AppInfo mbean (org.apache.kafka.common.utils.AppInfoParser)
javax.management.InstanceAlreadyExistsException: kafka.admin.client:type=app-info,id=administrator_data
	at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
	at org.apache.kafka.common.utils.AppInfoParser.registerAppInfo(AppInfoParser.java:64)
	at org.apache.kafka.clients.admin.KafkaAdminClient.<init>(KafkaAdminClient.java:500)
	at org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:444)
	at org.apache.kafka.clients.admin.Admin.create(Admin.java:59)
	at org.apache.kafka.clients.admin.AdminClient.create(AdminClient.java:39)
	at kafka.admin.AclCommand$AdminClientService.withAdminClient(AclCommand.scala:105)
	at kafka.admin.AclCommand$AdminClientService.listAcls(AclCommand.scala:146)
	at kafka.admin.AclCommand$AdminClientService.$anonfun$addAcls$1(AclCommand.scala:123)
	at kafka.admin.AclCommand$AdminClientService.$anonfun$addAcls$1$adapted(AclCommand.scala:116)
	at kafka.admin.AclCommand$AdminClientService.withAdminClient(AclCommand.scala:108)
	at kafka.admin.AclCommand$AdminClientService.addAcls(AclCommand.scala:116)
	at kafka.admin.AclCommand$.main(AclCommand.scala:78)
	at kafka.admin.AclCommand.main(AclCommand.scala)
Current ACLs for resource `ResourcePattern(resourceType=TOPIC, name=test, patternType=PREFIXED)`: 
 	(principal=User:alice, host=*, operation=DESCRIBE, permissionType=ALLOW)
{code}

  was:
{{AclCommand.AclCommandService}} uses {{withAdminClient(opts: AclCommandOptions)(f: Admin => Unit)}} to abstract the execution of an action using an {{AdminClient}} instance. Unfortunately the use of this method in implemeting {{addAcls()}} and {{removeAcls()}} calls {{listAcls()}}. This causes the creation of a second {{AdminClient}} instance which then fails to register an MBean, resulting in a warning being logged.

{code}
./bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config config/broker_connection.conf.reproducing --add --allow-principal User:alice --operation Describe --topic 'test' --resource-pattern-type prefixed
Adding ACLs for resource `ResourcePattern(resourceType=TOPIC, name=test, patternType=PREFIXED)`: 
 	(principal=User:alice, host=*, operation=DESCRIBE, permissionType=ALLOW) 

[2020-06-03 18:43:12,190] WARN Error registering AppInfo mbean (org.apache.kafka.common.utils.AppInfoParser)
javax.management.InstanceAlreadyExistsException: kafka.admin.client:type=app-info,id=administrator_data
	at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
	at org.apache.kafka.common.utils.AppInfoParser.registerAppInfo(AppInfoParser.java:64)
	at org.apache.kafka.clients.admin.KafkaAdminClient.<init>(KafkaAdminClient.java:500)
	at org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:444)
	at org.apache.kafka.clients.admin.Admin.create(Admin.java:59)
	at org.apache.kafka.clients.admin.AdminClient.create(AdminClient.java:39)
	at kafka.admin.AclCommand$AdminClientService.withAdminClient(AclCommand.scala:105)
	at kafka.admin.AclCommand$AdminClientService.listAcls(AclCommand.scala:146)
	at kafka.admin.AclCommand$AdminClientService.$anonfun$addAcls$1(AclCommand.scala:123)
	at kafka.admin.AclCommand$AdminClientService.$anonfun$addAcls$1$adapted(AclCommand.scala:116)
	at kafka.admin.AclCommand$AdminClientService.withAdminClient(AclCommand.scala:108)
	at kafka.admin.AclCommand$AdminClientService.addAcls(AclCommand.scala:116)
	at kafka.admin.AclCommand$.main(AclCommand.scala:78)
	at kafka.admin.AclCommand.main(AclCommand.scala)
Current ACLs for resource `ResourcePattern(resourceType=TOPIC, name=test, patternType=PREFIXED)`: 
 	(principal=User:alice, host=*, operation=DESCRIBE, permissionType=ALLOW)
{code}


> kafka-acls.sh/AclCommand opens multiple AdminClients
> ----------------------------------------------------
>
>                 Key: KAFKA-10109
>                 URL: https://issues.apache.org/jira/browse/KAFKA-10109
>             Project: Kafka
>          Issue Type: Bug
>          Components: tools
>            Reporter: Tom Bentley
>            Assignee: Tom Bentley
>            Priority: Minor
>
> {{AclCommand.AclCommandService}} uses {{withAdminClient(opts: AclCommandOptions)(f: Admin => Unit)}} to abstract the execution of an action using an {{AdminClient}} instance. Unfortunately the use of this method in implemeting {{addAcls()}} and {{removeAcls()}} calls {{listAcls()}}. This causes the creation of a second {{AdminClient}} instance. When the {{--command-config}} option has been used to specify a {{client.id}} for the Admin client, the second instance  fails to register an MBean, resulting in a warning being logged.
> {code}
> ./bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config config/broker_connection.conf.reproducing --add --allow-principal User:alice --operation Describe --topic 'test' --resource-pattern-type prefixed
> Adding ACLs for resource `ResourcePattern(resourceType=TOPIC, name=test, patternType=PREFIXED)`: 
>  	(principal=User:alice, host=*, operation=DESCRIBE, permissionType=ALLOW) 
> [2020-06-03 18:43:12,190] WARN Error registering AppInfo mbean (org.apache.kafka.common.utils.AppInfoParser)
> javax.management.InstanceAlreadyExistsException: kafka.admin.client:type=app-info,id=administrator_data
> 	at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437)
> 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898)
> 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966)
> 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900)
> 	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324)
> 	at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
> 	at org.apache.kafka.common.utils.AppInfoParser.registerAppInfo(AppInfoParser.java:64)
> 	at org.apache.kafka.clients.admin.KafkaAdminClient.<init>(KafkaAdminClient.java:500)
> 	at org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:444)
> 	at org.apache.kafka.clients.admin.Admin.create(Admin.java:59)
> 	at org.apache.kafka.clients.admin.AdminClient.create(AdminClient.java:39)
> 	at kafka.admin.AclCommand$AdminClientService.withAdminClient(AclCommand.scala:105)
> 	at kafka.admin.AclCommand$AdminClientService.listAcls(AclCommand.scala:146)
> 	at kafka.admin.AclCommand$AdminClientService.$anonfun$addAcls$1(AclCommand.scala:123)
> 	at kafka.admin.AclCommand$AdminClientService.$anonfun$addAcls$1$adapted(AclCommand.scala:116)
> 	at kafka.admin.AclCommand$AdminClientService.withAdminClient(AclCommand.scala:108)
> 	at kafka.admin.AclCommand$AdminClientService.addAcls(AclCommand.scala:116)
> 	at kafka.admin.AclCommand$.main(AclCommand.scala:78)
> 	at kafka.admin.AclCommand.main(AclCommand.scala)
> Current ACLs for resource `ResourcePattern(resourceType=TOPIC, name=test, patternType=PREFIXED)`: 
>  	(principal=User:alice, host=*, operation=DESCRIBE, permissionType=ALLOW)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)