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

Sam Tunnicliffe commented on CASSANDRA-11695:
---------------------------------------------

[~zzheng] thanks for the patch, I think this could be pretty useful. 

Sorry it's taken so long to get to review. There have been some changes since 
you posted the patch (principally CASSANDRA-12109), so I've rebased against 
trunk and pushed the result 
[here|https://github.com/beobal/cassandra/tree/11695-trunk].

On the patch itself, I have a couple of remarks (& I've pushed some commits to 
my branch to illustrate): 

I agree that it would be best to reuse {{SSLFactory}} to obtain an 
{{SSLContext}} and let that handle the keystore and truststore configuration. 
To that end, I've refactored {{JMXServerOptions}} a little and added a new 
subclass of {{EncryptionOptions}} which we can use to obtain the context. 

The patch broke {{JMXAuthTest}} as its setup was driven by setting system 
properties. Adding the dependency on {{DatabaseDescriptor}} also makes the 
whole thing harder to test in general. So, I've modified 
{{JMXServerUtils::createJMXServer}} to take an options object as an argument. 

I don't think that having the option to override settings in the yaml with 
system properties is a great idea, as it's likely to make debugging issues 
harder. So, I've removed that functionality in favour of having everything 
configured only from yaml options. This will make upgrades more onerous, but a 
decent explanation and clear instructions in NEWS.txt should mitigate that. (I 
haven't added that to NEWS.txt yet, btw). 

One exception to that last point re: system properties concerns the location of 
a JAAS config file. As far as I know, the only portable way to specify that 
location is to use the {{java.security.auth.login.config}} property. As with 
the keystore settings, spreading this config across multiple places makes for a 
bad experience and is somewhat brittle, so I prefer the approach in your patch, 
where the value of the yaml setting is used to set the system property. 
However, there is a caveat. It's possible that operators may need to set that 
property for other reasons - i.e. if they have any custom components (triggers, 
indexes, authenticator, role manager) which uses login configuration when 
connecting to some external system, we shouldn't stomp over their existing 
setting. So in {{JMXServerUtil::configureJmxAuthentication}} I've changed it so 
that we set the system property to the value from the yaml only if it isn't set 
already.

[~zzheng]what do you think of the additional changes I've outlined?

Also, [~mshuler] - last time we changed stuff in this area, we ended up 
breaking some test infrastructure which was depending on using system 
properties (CASSANDRA-11725). Is it possible to verify that this doesn't cause 
any problems? (Sorry, I forgot exactly what it was that broke last time).

One final thing to note - this will require a change to dtests, as there are 
tests for JMX 
[auth|https://github.com/riptano/cassandra-dtest/blob/master/jmx_auth_test.py] 
and 
[SSL|https://github.com/riptano/cassandra-dtest/blob/master/jmx_test.py#L194]. 
This would be an improvement though (and a pretty minor modification) as it 
would remove the need to munge the cassandra-env files. I can do this once we 
agree on the approach here. See: 
[here|https://github.com/riptano/cassandra-dtest/blob/master/tools/jmxutils.py#L57-L126]
 and 
[here:|https://github.com/riptano/cassandra-dtest/blob/master/tools/jmxutils.py#L129-L152]


> Move JMX connection config to cassandra.yaml
> --------------------------------------------
>
>                 Key: CASSANDRA-11695
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11695
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Configuration
>            Reporter: Sam Tunnicliffe
>            Priority: Minor
>              Labels: lhf
>             Fix For: 3.x
>
>
> Since CASSANDRA-10091, we always construct the JMX connector server 
> programatically, so we could move its configuration from cassandra-env to 
> yaml.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to