cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Tarrall (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-14496) TWCS erroneously disabling tombstone compactions
Date Tue, 05 Jun 2018 23:24:00 GMT


Robert Tarrall commented on CASSANDRA-14496:

I definitely agree with respect to "don't enable by default."

However, I believe if I have set {{unchecked_tombstone_compaction}} to true, I'm asking for
these compactions.  I may however be missing something – is there another purpose for that
option?  I.e. might someone else be setting that to true who would be surprised to find it
enables tombstone compactions?  I can't find any documentation which explains that {{'unchecked_tombstone_compaction':
'true'}} has no effect unless you also explicitly set other options, and I see discussions
in blog posts that suggest people think that setting is how you enable tombstone compactions
in TWCS, and I had to rummage around in source code for a while to work out why I wasn't getting
those compactions.

Coming at this from the other direction may help.  If I have the following compaction defined:
'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy', 'compaction_window_size':
'1', 'compaction_window_unit': 'HOURS', 'unchecked_tombstone_compaction': 'true'{code}
... I don't get tombstone compactions.  When I change that to:
'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy', 'compaction_window_size':
'1', 'compaction_window_unit': 'HOURS', 'tombstone_compaction_interval': '86400', 'unchecked_tombstone_compaction':
... I have just switched from "no tombstone compactions" to "tombstone compactions".  This
seems like a surprising side effect – one would not expect that explicitly setting an option
to its default value would change behavior like this.

If there's another purpose for unchecked_tombstone_compaction, I'd recommend the defaults
for TWCS make it clear that tombstone compactions intentionally act differently from STCS;
instead of interval & threshold defaults of 86400 & 0.2, they should be infinitely
high, and documented as such, so that you must specify non-default values in order to get
tombstone compactions.

> TWCS erroneously disabling tombstone compactions
> ------------------------------------------------
>                 Key: CASSANDRA-14496
>                 URL:
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Compaction
>            Reporter: Robert Tarrall
>            Priority: Minor
> This code:
> {code:java}
> this.options = new TimeWindowCompactionStrategyOptions(options);
> if (!options.containsKey(AbstractCompactionStrategy.TOMBSTONE_COMPACTION_INTERVAL_OPTION)
&& !options.containsKey(AbstractCompactionStrategy.TOMBSTONE_THRESHOLD_OPTION))
> {
> disableTombstoneCompactions = true;
> logger.debug("Disabling tombstone compactions for TWCS");
> }
> else
> logger.debug("Enabling tombstone compactions for TWCS");
> }
> {code}
> ... in disables tombstone compactions in TWCS if you
have not *explicitly* set either tombstone_compaction_interval or tombstone_threshold. 
Adding 'tombstone_compaction_interval': '86400' to the compaction stanza in a table definition
has the (to me unexpected) side effect of enabling tombstone compactions. 
> This is surprising and does not appear to be mentioned in the docs.
> I would suggest that tombstone compactions should be run unless these options are both
set to 0.
> If the concern is that (as with DTCS in CASSANDRA-9234) we don't want to waste time on
tombstone compactions when we expect the tables to eventually be expired away, perhaps we
should also check unchecked_tombstone_compaction and still enable tombstone compactions if
that's set to true.
> May also make sense to set defaults for interval & threshold to 0 & disable
if they're nonzero so that setting non-default values, rather than setting ANY value, is what
determines whether tombstone compactions are enabled?

This message was sent by Atlassian JIRA

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message