You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Maxim Muzafarov (Jira)" <ji...@apache.org> on 2023/05/17 15:39:00 UTC

[jira] [Comment Edited] (CASSANDRA-15254) Allow UPDATE on settings virtual table to change running configurations

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

Maxim Muzafarov edited comment on CASSANDRA-15254 at 5/17/23 3:38 PM:
----------------------------------------------------------------------

I would say in a nutshell that we have 4 possible options that we can go to from a very high-level perspective. Each option is implemented differently, so we must first agree on a high-level solution design.
 - new annotation (@Mutable, @Validate or any other) containing a reference to validation rules e.g. pointing to the validation method to call or a validation class to use;
Example of changes:
https://github.com/apache/cassandra/pull/2334/files
 - enforce set values using the corresponding field's setter methods, assuming a method name matches the field name;
Example of changes:
https://github.com/apache/cassandra/pull/2133/files
 - use all methods like `applySimpleConfig` as they are in the same order to validate every configuration change;
Example of changes:
[https://github.com/apache/cassandra/pull/2300/files]

 - use external frameworks to perform everything we need;

I have discussed all these possible solutions with [~dcapwell] and we have come up with the following key points:
 # We create a new annotation that contains the way a particular configuration field is validated - the reference to the method
{{@Validate(source=DatabaseDescriptor.class, setter="setPermissionsCacheMaxEntries")}}
 # The validation method has the following signature. For example, for the property with {{Integer}} type:
{{public static Integer validateConcurrentCompactors(Config conf, String name, Integer newValue)}}
 # These methods are reused within the general {{applySimpleConfig}} methods;
 # We have to add property access methods to the {{{}DatabaseDescriptor{}}}:
{{DatabaseDescriptor.getField(String name) and DatabaseDescriptor.setField(String name, Object value)}}
 # {{fromString}} and {{toString}} methods that are required to serialize and deserialize configuration objects to work with we should try to reuse something corresponding from the Yaml as we are only working with yaml-config;


was (Author: mmuzaf):
I would say in a nutshell that we have 4 possible options that we can go to from a very high-level perspective. Each option is implemented differently, so we must first agree on a high-level solution design. 
- new annotation (@Mutable, @Validate or any other) containing a reference to validation rules e.g. pointing to the validation method to call or a validation class to use;
- enforce set values using the corresponding field's setter methods, assuming a method name matches the field name;
- use all methods like `applySimpleConfig` as they are in the same order to validate every configuration change;
- use external frameworks to perform everything we need;



I have discussed all these possible solutions with [~dcapwell] and we have come up with the following key points:
#  We create a new annotation that contains the way a particular configuration field is validated - the reference to the method
{{@Validate(source=DatabaseDescriptor.class, setter="setPermissionsCacheMaxEntries")}}
# The validation method has the following signature. For example, for the property with {{Integer}} type: 
{{public static Integer validateConcurrentCompactors(Config conf, String name, Integer newValue)}}
# These methods are reused within the general {{applySimpleConfig}} methods;
# We have to add property access methods to the {{DatabaseDescriptor}}:
{{DatabaseDescriptor.getField(String name) and DatabaseDescriptor.setField(String name, Object value)}}
# {{fromString}} and {{toString}} methods that are required to serialize and deserialize configuration objects to work with we should try to reuse something corresponding from the Yaml as we are only working with yaml-config;

> Allow UPDATE on settings virtual table to change running configurations
> -----------------------------------------------------------------------
>
>                 Key: CASSANDRA-15254
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15254
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Feature/Virtual Tables
>            Reporter: Chris Lohfink
>            Assignee: Maxim Muzafarov
>            Priority: Normal
>             Fix For: 5.x
>
>         Attachments: Configuration Registry Diagram.png
>
>          Time Spent: 4h 50m
>  Remaining Estimate: 0h
>
> Allow using UPDATE on the system_views.settings virtual table to update configs at runtime for the equivalent of the dispersed JMX attributes/operations.



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

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