You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by Apache Wiki <wi...@apache.org> on 2011/03/25 21:39:20 UTC

[Cassandra Wiki] Update of "ConfigurationNotes" by JonHermes

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Cassandra Wiki" for change notification.

The "ConfigurationNotes" page has been changed by JonHermes.
http://wiki.apache.org/cassandra/ConfigurationNotes

--------------------------------------------------

New page:
Per-node options are loaded from yaml and held in !DatabaseDescriptor.

Per-KS, per-CF, and per-Column options are loaded from the !MigrationsTable at startup and are encapsulated with KSMetaData, CFMetaData, and ColumnDefinition objects, which are held by !DatabaseDescriptor as well as !Tables and !ColumnFamilyStores respectively. When a migration arrives, it writes to the !MigrationsTable, then propogates the changes out to the KS/CFMD objects in the system.

Configuration can be changed at runtime without a restart (excluding the ones that change on-disk format (which cannot be changed without clearing the cluster) and ones that change routing). For per-node options, poke !StorageService via JMX (which in turn pokes !DatabaseDescriptor). For per-KS options, poke the appropriate !Table. For per-CF and per-Column options, poke the appropriate !ColumnFamilyStore. These ephemeral changes are stronger than migrations (they stay set regardless of new config coming in), but do not persist between reboots.

How to add a new CF option post-1906:
* update cassandra.thrift and src/avro/internodo.genavro to add the new option
* ant gen-thrift-java, ant avro-generate
* set a static final T DEFAULT_ for it if there should be one.
* set the default in init()
* define CFMD foo(T prop) { foo = prop; return this } for the builder 
* define T getFoo() {return foo;} since all optional params are private
* update deflate() and inflate() to handle the new option ->CfDef and CfDef->
* update equals(), hashcode(), and tostring() to build with the new prop
* update applyImplicitDefaults()
* update convertTo{Thrift/Avro}()
* update apply()... this is the important method.

Done. Then, whenever you need the option in code, use DD.getCFMD(ksname,cfname).getFoo();