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

Stefan Miklosovic edited comment on CASSANDRA-18042 at 11/30/22 10:22 PM:
--------------------------------------------------------------------------

In this case I would go like 
{code:java}
sai_indexes_take_snapshots: true
sai_indexes_warn_if_enabled: true
sai_indexes_enabled: true {code}
Because in order to be able to take snapshots of sai indexes, sai indexes have 
to be enabled in the first place so "if_enabled" is redundant.

and you could eventually do
{code:java}
sai_indexes_take_snapshots_warn_if_enabled: true
sai_indexes_take_snapshots: true
sai_indexes_warn_if_enabled: true
sai_indexes_enabled: true  {code}
I personally do not see anything wrong with "sai_indexes_warned" or 
"zero_ttl_on_twcs_warned" format. that "if_enabled" is just confusing IMO.

zero_ttl_on_twcs_enabled and zero_ttl_on_twcs_warned is just fine, same logic 
is done as for "if_enabled" cases, it is just shorter.

 

EDIT:

I should add that when I first saw "if_enabled" I was little bit confused like 
... enabled what?

If you have 
{code:java}
sai_indexes_take_snapshots_if_enabled: true{code}
What does this "if_enabled" mean? If you have sai indexes enabled or if you 
have snapshots on sai indexes enabled?

Do you see the difference? Somewhere in yaml you might have this hypothetical 
property for being able to take snapshots on sai indexes like 
"sai_indexes_take_snapshots". So in this case, how would you call a guardrail 
which should warn you when you have "enabled snapshots on sai indexes"? I would 
say it would be "sai_indexes_take_snapshots_warned" and the property itself 
would be "sai_indexes_take_snaphots_enabled" (if it is meant to be guardrail as 
well).


was (Author: smiklosovic):
In this case I would go like 
{code:java}
sai_indexes_take_snapshots: true
sai_indexes_warn_if_enabled: true
sai_indexes_enabled: true {code}
Because in order to be able to take snapshots of sai indexes, sai indexes have 
to be enabled in the first place so "if_enabled" is redundant.

and you could eventually do
{code:java}
sai_indexes_take_snapshots_warn_if_enabled: true
sai_indexes_take_snapshots: true
sai_indexes_warn_if_enabled: true
sai_indexes_enabled: true  {code}
I personally do not see anything wrong with "sai_indexes_warned" or 
"zero_ttl_on_twcs_warned" format. that "if_enabled" is just confusing IMO.

zero_ttl_on_twcs_enabled and zero_ttl_on_twcs_warned is just fine, same logic 
is done as for "if_enabled" cases, it is just shorter.

> Implement a guardrail for not having zero default ttl on tables with TWCS
> -------------------------------------------------------------------------
>
>                 Key: CASSANDRA-18042
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-18042
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Feature/Guardrails, Legacy/Core
>            Reporter: Stefan Miklosovic
>            Assignee: Stefan Miklosovic
>            Priority: Normal
>             Fix For: 4.x
>
>          Time Spent: 3h
>  Remaining Estimate: 0h
>
> A user was surprised that his data have not started to expire after 90 days 
> on his TWCS, he noticed that default_time_to_live on the table was set to 0 
> (by accident from his side) and inserts were using TTL = 0 too.
> It is questionable why it it possible to create a table with TWCS and enable 
> a user to specify default_time_to_live to be zero.
> On the other hand, I would argue that having default_time_to_live set to 0 on 
> TWCS does not necessarily mean that such combination is illegal. It is about 
> people just using that with advantage very often so tables are compacted away 
> nicely. However, that does not have to mean that they could not use it with 
> 0. But I yet have to see a use-case where TWCS was used and default ttl was 
> set to 0 on purpose. Merely looking into Cassandra codebase, there are only 
> cases when this parameter is not 0.
> There are three approaches:
> 1) just reject such statements (for CreateTable and AlterTable statements) 
> where default_time_to_live = 0
> 2) Implement a guardrail for 1) so it can be enabled / disabled on demand
> 3) Leave possibility to set default_time_to_live to 0 on a table but make a 
> guardrail for UpdateStatement so it might reject queries for tables with 
> default_time_to_live is zero and for which its TTL (on that update statement) 
> is set to 0 too.
> I would be careful about making the current configuration illegal because of 
> backward compatibility. For that reason 2) makes the most sense to me.
> Maybe implementing 3) would make sense as well. There might be a table which 
> has default ttl set to 0 as it expects a user to supply TTL every time. 
> However, as it is not currently enforced anywhere, a client might still 
> insert TTLs to be set to 0 even by accident.
> POC for 2) is here 
> https://github.com/instaclustr/cassandra/commit/0b4dcc3d3deeffa393c02a3b80e27482007f9579



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to