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

Stefan Miklosovic edited comment on CASSANDRA-19828 at 9/7/24 8:13 AM:
-----------------------------------------------------------------------

[~frankgh] "dynamic" most probably translates to "guardrail". We want to ship 
this feature to 4.0 up to I-do-not-know-exactly-what. There are not guardrails 
in 4.0, only from 4.1 up so I am all ears what to put into 4.0 then.

We agreed in CASSANDRA-19556 that it is not going to be introduced into 5.0.0 
because it was too late so we agreed that CASSANDRA-19556 will be in trunk 
only. CASSANDRA-19556 is about the introduction of two guardrails - ddl_enabled 
and dcl_enabled. The first one enables schema modifications and the second one 
enables authorization statements.

What [~samt] suggested in CASSANDRA-19556 was that we could have something 
similar to what CASSANDRA-19556 introduces for lower branches as well but we 
can not port CASSANDRA-19556 to 4.0/4.1+ because these are completely new 
features and we can not add completely new features into old branches. 

The rationale behind the introduction of _something similar which resembles 
CASSANDRA-19556_ into 4.0/4.1 is that it would be nice if we had a way to 
forbid schema modifications while we want to upgrade the cluster so an operator 
is sure that schema is not changing while an upgrade is in process. So, the 
next best thing when CASSANDRA-19556 is not going to be shipped in 4.0+ is to 
introduce _something_ which disables that, just to remove it in trunk and 
replace it with more robust CASSANDRA-19556.

Few observations:

1) If you wanted to have it dynamic, it can not be a guardrail in 4.0 because 
guardrail framework was implemented in 4.1 for the first time.
2) We would probably have some MBean method on StorageService in 4.0 and 
guardrail in 4.1 and 5.0 (???) and then we would not ship this in trunk because 
we go to replace that with CASSANDRA-19556 (does this all make sense to you? 
That is pretty chaotic IMHO.)
3) If we introduced guardrails in 4.1 and 5.0, then these guardrails would be 
deprecated in trunk because we replaced that by CASSANDRA-19556. So, we 
introduce them in 4.1.x and 5.0.1 and we remove them in 5.1 - we just removed 
them without any deprecation period, we can not do that.
4) We need to deprecate alter_table_enabled guardrail in 5.0.1 which is another 
guardrail we have in this space which becomes obsolete when CASSANDRA-19556 is 
merged (and alter_table_enabled will be removed from trunk then).

To be somewhat consistent and support schema modification disablement in 
4.0+but < 5.1 and you want that to be dynamic, we might just introduce an MBean 
method on StorageService like 
StorageServiceMBean.enableSchemaModifications(boolean) by which you would 
control this dynamically but then please beware that we are changing public 
interfaces in patch releases. Since it is not a guardrail and this would not be 
introduced in trunk, we could just keep this method in 4.0 / 4.1 / 5.0 for ever 
without any deprecation but at the same time I am not sure if we can introduce 
it in trunk because that will be replaced by CASSANDRA-19556.

So, in trunk we would end up with a method on MBean as well as with two new 
guardrails from CASSANDRA-19556. I do not like that we have two ways doing the 
same thing so in trunk, the MBean method would need to internally enable / 
disable new guardrails we introduced in CASSANDRA-19556.

Looking forward to your answer!


was (Author: smiklosovic):
[~frankgh] "dynamic" most probably translates to "guardrail". We want to ship 
this feature to 4.0 up to I-do-not-know-exactly-what. There are not guardrails 
in 4.0, only from 4.1 up so I am all ears what to put into 4.0 then.

We agreed in CASSANDRA-19556 that it is not going to be introduced into 5.0.0 
because it was too late so we agreed that CASSANDRA-19556 will be in trunk 
only. CASSANDRA-19556 is about the introduction of two guardrails - ddl_enabled 
and dcl_enabled. The first one enables schema modifications and the second one 
enables authorization statements.

What [~samt] suggested in CASSANDRA-19556 was that we could have something 
similar to what CASSANDRA-19556 introduces for lower branches as well but we 
can not port CASSANDRA-19556 to 4.0/4.1+ because these are completely new 
features and we can not add completely new features into old branches. 

The rationale behind the introduction of _something similar which resembles 
CASSANDRA-19556_ into 4.0/4.1 is that it would be nice if we had a way to 
forbid schema modifications while we want to upgrade the cluster so an operator 
is sure that schema is not changing while an upgrade is in process. So, the 
next best thing when CASSANDRA-19556 is not going to be shipped in 4.0+ is to 
introduce _something_ which disables that, just to remove it in trunk and 
replace it with more robust CASSANDRA-19556.

Few observations:

1) If you wanted to have it dynamic, it can not be a guardrail in 4.0 because 
guardrail framework was implemented in 4.1 for the first time.
2) We would probably have some MBean method on StorageService in 4.0 and 
guardrail in 4.1 and 5.0 (???) and then we would not ship this in trunk because 
we go to replace that with CASSANDRA-19556 (does this all make sense to you? 
That is pretty chaotic IMHO.)
3) If we introduced guardrails in 4.1 and 5.0, then these guardrails would be 
deprecated in trunk because we replaced that by CASSANDRA-19556. So, we 
introduce them in 4.1.x and 5.0.1 and we remove them in 5.1 - we just removed 
them without any deprecation period, we can not do that.
4) We need to deprecate alter_table_enabled guardrail in 5.0.1 which is another 
guardrail we have in this space which becomes obsolete when CASSANDRA-19556 is 
merged (and alter_table_enabled will be removed from trunk then).

To be somewhat consistent and support schema modification disablement in 
4.0+but < 5.1 and you want that to be dynamic, we might just introduce an MBean 
method on StorageService like 
StorageServiceMBean.enableSchemaModifications(boolean) by which you would 
control this dynamically but then please beware that we are changing public 
interfaces in patch releases. Since it is not a guardrail and this would not be 
introduced in trunk, we could just keep this method in 4.0 / 4.1 / 5.0 for ever 
without any deprecation but at the same time I am not sure if we can not 
introduce it in trunk because that will be replaced by CASSANDRA-19556.

So in trunk we would end up with a method on MBean as well as with two new 
guardrails from CASSANDRA-19556. I do not like that we have two ways doing the 
same thing so in trunk, the MBean method would need to internally enable / 
disable new guardrails we introduced in CASSANDRA-19556.

Looking forward to your answer!

> Introduce system property to prevent schema modifications
> ---------------------------------------------------------
>
>                 Key: CASSANDRA-19828
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-19828
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Legacy/Core
>            Reporter: Stefan Miklosovic
>            Assignee: Stefan Miklosovic
>            Priority: Normal
>             Fix For: 4.0.x, 4.1.x, 5.0.x
>
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> This is the first ticket as described here (1) in order to eventually merge 
> CASSANDRA-19556.
> (1) 
> https://issues.apache.org/jira/browse/CASSANDRA-19556?focusedCommentId=17856432&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17856432
> I created this ticket to have type "New Feature" but this needs to be merged 
> to 4.0, 5.0 for the purposes of CASSANDRA-19556. "Task" would probably make 
> it too.



--
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