[ 
https://issues.apache.org/jira/browse/CASSANDRA-19290?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17810052#comment-17810052
 ] 

Abe Ratnofsky commented on CASSANDRA-19290:
-------------------------------------------

+1

> Replace uses of AttributeKey.newInstance with AttributeKey.valueOf in 
> cassandra-java-driver
> -------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-19290
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-19290
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Client/java-driver
>            Reporter: Andy Tolbert
>            Assignee: Andy Tolbert
>            Priority: Normal
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> The java driver uses netty channel attributes to decorate a connection's 
> channel with the cluster name (returned from the system.local table) and the 
> map from the {{OPTIONS}} response, both of which are obtained on connection 
> initialization.
> There's an issue here that I wouldn't expect to see in practice in that the 
> {{AttributeKey}}'s used are created using {{AttributeKey.newInstance}}, which 
> throws an exception if an {{AttributeKey}} of that name is defined anywhere 
> else in evaluated code.
> https://github.com/apache/cassandra-java-driver/blob/8d5849cb38995b312f29314d18256c0c3e94cf07/core/src/main/java/com/datastax/oss/driver/internal/core/channel/DriverChannel.java#L52-L54
> {code:java}
>   static final AttributeKey<String> CLUSTER_NAME_KEY = 
> AttributeKey.newInstance("cluster_name");
>   static final AttributeKey<Map<String, List<String>>> OPTIONS_KEY =
>       AttributeKey.newInstance("options");
> {code}
> This was encountered by a user that was creating driver connections within a 
> trigger: https://the-asf.slack.com/archives/CJZLTM05A/p1705537114305579 
> {noformat}
>       Caused by: java.lang.IllegalArgumentException: 'cluster_name' is 
> already in use
>               at 
> io.netty.util.ConstantPool.createOrThrow(ConstantPool.java:109)
>               at io.netty.util.ConstantPool.newInstance(ConstantPool.java:91)
>               at io.netty.util.AttributeKey.newInstance(AttributeKey.java:55)
>               at 
> com.datastax.oss.driver.internal.core.channel.DriverChannel.<clinit>(DriverChannel.java:50)
>               ... 30 common frames omitted
> {noformat}
> There is likely some class loading oddness in the Trigger implementation that 
> exacerbates the problem.  But at the least, if the driver were to use 
> AttributeKey.valueOf instead (like Cassandra does where it uses them: 
> https://github.com/search?q=repo%3Aapache%2Fcassandra+AttributeKey.valueOf&type=code),
>  this particular issue could be avoided.
> Debatably we could use {{valueOf(firstNameComponent,secondNameComponent)}} as 
> a way of namespacing the attribute (e.g. 
> {{AttributeKey.newInstance("com.datastax.oss.driver.internal.core.channel", 
> "cluster_name");}}, this does not seem necessary though.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to