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

Benedict Elliott Smith edited comment on CASSANDRA-17212 at 1/22/22, 9:20 AM:
------------------------------------------------------------------------------

bq. To me grouping based off feature is the only way for a config to actually 
be "discoverable", pulling bits and pieces out to other places because they are 
"limits" would always break this in my mind.

In my experience this is a near-impossible task to do consistently with an 
intuitive structure, as nobody really agrees what features should be called, 
let alone their hierarchy.

For instance, once you have a {{query}} heading, should that then include 
coordinator level configurations? timeouts? concurrency? CQL configurations? 
caches? Logically it _could_ include half of the settings. 

Many things also don't neatly fall under any feature, so we will fabricate 
features for them: non-query timeouts cannot be grouped under {{query}}, so now 
we probably _won't_ group query timeouts under {{query}} either, else it will 
be inconsistent. But now both are inconsistent, there's no rules underpinning 
it anymore.

This kind of grouping can also be more volatile - once a new setting (and 
suitable grouping) is introduced, it more readily affects the decisions for the 
existing hierarchy. This means this kind of layout probably needs a lot of 
upfront work to produce a coherent grouping for the whole config file, to 
demonstrate that it can be done in a manner everyone agrees on, and to avoid 
lots of churn.

I think when I tried to produce groupings, your approach was what I tried 
initially before deciding this approach was cleaner. Plus it has the added 
benefit that a user that _doesn't_ know the config options (i.e. most users), 
when encountering instability, will have good discoverability of dials that can 
be modified to improve cluster health. I think this is a very underrated 
benefit, as most users cannot afford teams of developers that are intimately 
familiar with the codebase.

TL;DR: it's messy, arbitrary and inconsistent. Some upfront work needs to be 
done to work out what it would like in totality.


was (Author: benedict):
bq. To me grouping based off feature is the only way for a config to actually 
be "discoverable", pulling bits and pieces out to other places because they are 
"limits" would always break this in my mind.

In my experience this is a near-impossible task to do consistently with an 
intuitive structure, as nobody really agrees what features should be called, 
let alone their hierarchy.

For instance, once you have a {{query}} heading, should that then include 
coordinator level configurations? timeouts? concurrency? CQL configurations? 
caches? Logically it _could_ include half of the settings. 

Many things also don't neatly fall under any feature, so we will fabricate 
features for them: non-query timeouts cannot be grouped under {{query}}, so now 
we probably _won't_ group query timeouts under {{query}} either, else it will 
be inconsistent. But now both are inconsistent, there's no rules underpinning 
it anymore.

This kind of grouping can also be more volatile - once a new setting (and 
suitable grouping) is introduced, it more readily affects the decisions for the 
existing hierarchy. This means this kind of layout probably needs a lot of 
upfront work to produce a coherent grouping for the whole config file, to 
demonstrate that it can be done in a manner everyone agrees on, and to avoid 
lots of churn.

I think when I tried to produce groupings, your approach was what I tried 
initially before deciding this approach was cleaner. Plus it has the added 
benefit that a user that _doesn't_ know the config options (i.e. most users), 
when encountering instability, will have good discoverability of dials that can 
be modified to improve cluster health. I think this is a very underrated 
benefit, as most users cannot afford teams of developers that are intimately 
familiar with the codebase.



> Migrate threshold for minimum keyspace replication factor to guardrails
> -----------------------------------------------------------------------
>
>                 Key: CASSANDRA-17212
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-17212
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Feature/Guardrails
>            Reporter: Andres de la Peña
>            Priority: Normal
>
> The config property 
> [{{minimum_keyspace_rf}}|https://github.com/apache/cassandra/blob/5fdadb25f95099b8945d9d9ee11d3e380d3867f4/conf/cassandra.yaml]
>  that was added by CASSANDRA-14557 can be migrated to guardrails, for example:
> {code}
> guardrails:
>     ...
>     replication_factor:
>         warn_threshold: 2
>         abort_threshold: 3
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

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

Reply via email to