Sylvain Lebresne created CASSANDRA-12222:
--------------------------------------------

             Summary: Per-node overrides for table settings
                 Key: CASSANDRA-12222
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-12222
             Project: Cassandra
          Issue Type: Improvement
          Components: CQL
            Reporter: Sylvain Lebresne
            Priority: Minor


There is a few cases where it's convenient to set some table parameters on only 
one of a few nodes. For instance, it's useful for experimenting with settings 
like caching options, compaction, compression, read repair chance, gcGrace ... 
Another case is when you want to completely migrate to a new setting, but want 
to do that node-per-node (mainly useful when switching compaction strategy, see 
CASSANDRA-10898).

I'll note that we can already do some of this through JMX for some of the 
settings as we have methods like 
{{ColumnFamilyStoreMBean.setCompactionParameters()}}, but:
# parameters settings are initially set in CQL. Having to go to JMX for this 
sounds less consistent to me. The fact we have both a 
{{ColumnFamilyStoreMBean.setCompactionParameters()}} and a 
{{ColumnFamilyStoreMBean.setCompactionParametersJson()}} (as I assume the 
former one is inconvenient to use) is also proof to me than JMX ain't terribly 
appropriate.
# I think this can be potentially useful for almost all table settings, but we 
don't expose JMX methods for all settings, and it would be annoying to have to. 
The method suggested below wouldn't have to be updated every time we add a new 
settings (if done right).
# Changing options through JMX is not persistent across restarts. This may 
arguably be fine in some cases, but if you're trying to migrate your compaction 
strategy node per node, or want to experiment with a setting over a mediumish 
time period, it's mostly a pain.

So what I suggest would be add node overrides in the normal table setting 
(which would be part of the schema as any other setting). In other words, if 
you want to set LCS for only one specific node, you'd do:
{noformat}
ALTER TABLE foo WITH node_overrides = { '192.168.0.1' : { 'compaction' : { 
'class' : 'LeveledCompactionStrategy' } } }
{noformat}

I'll note that I already suggested that idea on CASSANDRA-10898, but as it's 
more generic than what that latter ticket is about, so creating its own ticket.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to