That's a really good idea! I have updated the CEP to include this
duplicate_key_policy functionality and corresponding test scenarios.

On Tue, 22 Jul 2025 at 16:35, Patrick McFadin <pmcfa...@gmail.com> wrote:

> Another hit from the DevOps request backlog. I'm glad this has
> finally turned into something formal. This will make CI/CD much easier. One
> thing I hope this fosters more of is the sharing of configs. For example,
> "here are my recommended storage settings for EBS."
>
> The CEP aborts on any duplicate key. For the people doing GitOps, there
> will be a need for layering a read-only baseline `cassandra.yaml` with
> environment-specific or secret files. This is exactly the way Argo CD/Helm
> handles value precedence. This is typical in cloud native environments. I
> propose a modification that allows an *opt-in* policy switch:
>
>     duplicate_key_policy: { ABORT (default) | LAST_WINS | WARN }
>
> * ABORT  – current behaviour, startup fails on duplicates.
> * WARN   – duplicates allowed, last key wins, but every override is logged.
> * LAST_WINS – same as WARN, but without log
>
> On Mon, Jul 21, 2025 at 7:01 AM Josh McKenzie <jmcken...@apache.org>
> wrote:
>
>> I suppose the only concern would be maintaining this version in alignment
>> with what's going into the main cassandra.yaml as part of the regular
>> development.
>>
>> Seems like it'd be relatively easy to script something that'll generate
>> modularized config files based on the reference cassandra.yaml by
>> classifying different parameters based on file grouping. Not to scope creep
>> or add on to the CEP or anything, just thinking out loud; as follow up work
>> it could be useful.
>>
>> From a technical perspective having a bi-directional sync that'd just
>> dump things into a "overflow" file from monolithic -> modular, and tacking
>> on at the end of cassandra.yaml under an overflow section for things not
>> classified in the script from modular -> monolithic config shouldn't be too
>> complex. If that proved stable, integrating that into the build process and
>> even adding a checkstyle job target warning on non-classified configuration
>> parameters could tighten the whole thing up and give us a minimally
>> invasive way to support both through a transition.
>>
>> On Mon, Jul 21, 2025, at 9:41 AM, Johnny Miller wrote:
>>
>> I have added the section "Reference Example Configuration" - will see
>> what the feedback on this is. I suppose the only concern would be
>> maintaining this version in alignment with what's going into the main
>> cassandra.yaml as part of the regular development.
>>
>> On Mon, 21 Jul 2025 at 15:24, Josh McKenzie <jmcken...@apache.org> wrote:
>>
>>
>> That sounds useful to me.
>>
>> I'd like to see us move to "modularized by default"; our current config
>> being 2839 lines of .yaml
>> <https://github.com/apache/cassandra/blob/trunk/conf/cassandra.yaml> is
>> a bad experience for both new and old users. Starting with examples of the
>> new paradigm and then refactoring config out over time for the default
>> config is a path forward I'd support.
>>
>> On Mon, Jul 21, 2025, at 9:18 AM, Johnny Miller wrote:
>>
>> One feature I was thinking of adding to the CEP was to have an example
>> yaml config setup using the includes with the config grouped logically so
>> people have a reference example in the conf? Would this be a good idea?
>>
>> On Fri, 18 Jul 2025 at 19:57, Johnny Miller <johnny.p.mil...@gmail.com>
>> wrote:
>>
>> Hello 👋
>>
>> We would like to propose CEP-51: Support Include Semantics for
>> cassandra.yaml for adoption by the community:
>>
>> https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-51+Support+Include+Semantics+for+cassandra.yaml
>>
>> This CEP proposes adding completely optional include directives to
>> Cassandra's configuration system, allowing users who need it to split their
>> cassandra.yaml into multiple files for better security, organization, and
>> deployment flexibility. No changes are made to the default cassandra.yaml,
>> and this feature is entirely opt-in.
>> The proposed include directives (include, include_if_exists, and
>> include_dir) enable organizations to:
>>
>>    - Apply the principle of least privilege by separating sensitive
>>    security configurations into files with restricted permissions
>>    - Better organize large configuration files by logical subsystems
>>    - Simplify configuration management in environments where different
>>    teams manage different aspects of the cluster
>>    - Follow established patterns already present in PostgreSQL, MySQL,
>>    Redis, NGINX, and other widely-used systems
>>
>> Key design principles:
>>
>>    - Zero impact on users who don't use the feature
>>    - No recursive includes (only the main cassandra.yaml can contain
>>    include directives)
>>    - No duplicate configuration keys allowed (each setting must appear
>>    in exactly one file)
>>    - Clear error messages for troubleshooting
>>
>> This enhancement addresses real operational challenges faced by
>> organisations with strict security requirements or complex deployment
>> needs, while maintaining complete backward compatibility and requiring no
>> changes to existing deployments.
>>
>> Thanks in advance for your time and feedback. Please keep the discussion
>> on this mailing list thread.
>>
>> Regards,
>>
>> Johnny
>>
>>
>>
>>

Reply via email to