Basics

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 !Schema and !Table. 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

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

https://c.statcounter.com/9397521/0/fe557aad/1/|stats