Great discussion.

It would be an implementation detail but we could imagine having a single
interface for reading config and providing readers for old or/and new
configuration formats. If we can streamline reading of all configs from
that single interface we would have much centralized (following the Single
Responsibility Principle) changes to track/review and test.

Thanks
Maulin

On Wed, Feb 23, 2022 at 11:47 AM Jeremy Hanna <jeremy.hanna1...@gmail.com>
wrote:

> If we support both formats for a time, I just would want to make
> absolutely sure that it will read only one or the other so there's no
> uncertainty about the server configuration.  Perhaps to avoid unforeseen
> migration problems, we only read the old format if a specific flag is set?
> So with version 5, we only read the new format by default.  So if you only
> have the old format and you try to start 5.0, it will fail with a log
> message about a JVM option to be used ("READ_CASSANDRA_YAML" or
> something).  So if you enable that, you *only* read the old config.  It
> would be one or the other so you don't have weird dilemmas of which one to
> choose.
>
> On Feb 23, 2022, at 11:30 AM, Caleb Rackliffe <calebrackli...@gmail.com>
> wrote:
>
> 
> Continuing to parse the old format for some time seems unavoidable, and
> allowing dot-separated options in the old format seems reasonable.
>
> There will certainly be some interesting problems when we move into
> implementation space with this. One approach might be to implement a clean
> object model that corresponds to the new format, work out how it's
> parsed/populated from the file, and then have some kind of converter from
> the old Config object to the new object model that allows us to provide
> values to DatabaseDescriptor from only the new one (thereby avoiding any
> changes to the places all over the codebase that use DD).
>
> On Wed, Feb 23, 2022 at 4:46 AM Bowen Song <bo...@bso.ng> wrote:
>
>> I agree with Benedict, there's legit use cases for both the flat and
>> structured config file format. The operator should be able to choose which
>> one is best suited for their own use case. It will also make the upgrade
>> process easier if both formats are supported by future versions of
>> Cassandra.
>> On 23/02/2022 07:52, bened...@apache.org wrote:
>>
>> I agree that a new configuration layout should be introduced once only,
>> not incrementally.
>>
>>
>>
>> However, I disagree that we should immediately deprecate the old config
>> file and refuse to parse it. We can maintain compatibility indefinitely at
>> low cost, so we should do so.
>>
>>
>>
>> Users of the old format, when using new configuration options, can simply
>> use dot separators to specify them. Since most settings are not required,
>> this is by far the least painful upgrade process.
>>
>>
>>
>>
>>
>> *From: *Berenguer Blasi <berenguerbl...@gmail.com>
>> <berenguerbl...@gmail.com>
>> *Date: *Wednesday, 23 February 2022 at 06:53
>> *To: *dev@cassandra.apache.org <dev@cassandra.apache.org>
>> <dev@cassandra.apache.org>
>> *Subject: *Re: [DISCUSS] CASSANDRA-17292 Move cassandra.yaml toward a
>> nested structure around major database concepts
>>
>> +1 to a non-incremental approach as well.
>>
>> On 23/2/22 1:27, Caleb Rackliffe wrote:
>> > @Patrick I’m absolutely intending for this to be a 5.0 concern. The
>> only reason why it would have any bearing on 4.x is the case where we’re
>> adding new config that could fit into the v2 structure now and not require
>> any later changes.
>> >
>> >> On Feb 22, 2022, at 3:22 PM, Bernardo Sanchez
>> <bernard...@pointclickcare.com> <bernard...@pointclickcare.com> wrote:
>> >>
>> >> unsubscribe
>> >>
>> >> -----Original Message-----
>> >> From: Stefan Miklosovic <stefan.mikloso...@instaclustr.com>
>> <stefan.mikloso...@instaclustr.com>
>> >> Sent: Tuesday, February 22, 2022 3:53 PM
>> >> To: dev@cassandra.apache.org
>> >> Subject: Re: [DISCUSS] CASSANDRA-17292 Move cassandra.yaml toward a
>> nested structure around major database concepts
>> >>
>> >> "EXTERNAL EMAIL" - This email originated from outside of the
>> organization. Do not click or open attachments unless you recognize the
>> sender and know the content is safe. If you are unsure, please contact
>> hel...@pointclickcare.com.
>> >>
>> >> I want to add that to, however, on the other hand, we also do have
>> dtests in Python and they need to run with old configs too. That is what
>> Ekaterina was doing - supporting old configuration while introducing new
>> one. If we make "a big cut" and old way of doing things would not be
>> possible, how are we going to treat this in dtests when we will have stuff
>> for 3.11, 4 on old configs and 5 on new configs?
>> >>
>> >>> On Tue, 22 Feb 2022 at 21:48, Stefan Miklosovic
>> <stefan.mikloso...@instaclustr.com> <stefan.mikloso...@instaclustr.com>
>> wrote:
>> >>>
>> >>> +1 to what Patrick says.
>> >>>
>> >>>> On Tue, 22 Feb 2022 at 21:40, Patrick McFadin <pmcfa...@gmail.com>
>> <pmcfa...@gmail.com> wrote:
>> >>>>
>> >>>> I'm going to put up a red flag of making config file changes of this
>> scale on a dot release. This should really be a 5.0 consideration.
>> >>>>
>> >>>> With that, I would propose a #5. 5.0 nodes will only read the new
>> config files and reject old config files. If any of you went through the
>> config file changes from Apache HTTPd 1.3 -> 2.0 you know how much of a
>> lifesaver that can be for ops. Make it a part of the total upgrade to a new
>> major version, not a radical change inside of a dot version, and make it a
>> clean break. No "legacy config" laying around. That's just a recipe for
>> surprises later if there are new required config values and somebody
>> doesn't even realize they have some old 4.x yaml files laying around.
>> >>>>
>> >>>> Patrick
>> >>>>
>> >>>> On Tue, Feb 22, 2022 at 11:51 AM Tibor Répási
>> <tibor.rep...@anzix.org> <tibor.rep...@anzix.org> wrote:
>> >>>>> Glad to be agree on #4. That feature could be add anytime.
>> >>>>>
>> >>>>> If a version element is added to the YAML, then it is not necessary
>> to change the filename, thus we could end up with #3. The value of the
>> version element could default to 1 in the first phase, which does not need
>> any change for legacy format configuration. New config format must include
>> version: 2. When in some later version the support for legacy configuration
>> is removed, the default for the version element could be changed to 2 or
>> removed.
>> >>>>>
>> >>>>> On 22. Feb 2022, at 19:30, Caleb Rackliffe
>> <calebrackli...@gmail.com> <calebrackli...@gmail.com> wrote:
>> >>>>>
>> >>>>> My initial preference would be something like combining #1 and #4.
>> We could add something like a simple "version: <1|2>" element to the YAML
>> that would eliminate any possible confusion about back-compat within a
>> given file.
>> >>>>>
>> >>>>> Thanks for enumerating these!
>> >>>>>
>> >>>>> On Tue, Feb 22, 2022 at 10:42 AM Tibor Répási
>> <tibor.rep...@anzix.org> <tibor.rep...@anzix.org> wrote:
>> >>>>>> Hi,
>> >>>>>>
>> >>>>>> I like the idea of having cassandra.yaml better structured, as an
>> operator, my primer concern is the transition. How would we change the
>> config structure from legacy to the new one during a rolling upgrade? My
>> thoughts on this:
>> >>>>>>
>> >>>>>> 1. Legacy and new configuration is stored in different files.
>> Cassandra will read the legacy file on startup if it exists, the new one
>> otherwise. May raise warning on startup when legacy was used.
>> >>>>>>    pros:
>> >>>>>>     - separate files for separate formats
>> >>>>>>     - clean and operator controlled switch to new format
>> >>>>>>     - already known procedure, e.g. change from PropertyFileSnitch
>> to GossipingPropertyFileSnitch
>> >>>>>>    cons:
>> >>>>>>     - name of the config file would change from cassandra.yaml to
>> something else (cassandra_v2.yaml, config.yaml ???)
>> >>>>>>     - would need considerable work to get config to the new format
>> >>>>>>     - format translation not solved
>> >>>>>>
>> >>>>>> 2. Offline configuration converter tool may be available to
>> convert legacy format to new one. During package upgrade, if a legacy
>> config is found, the upgrade process should convert the config file to the
>> new format.
>> >>>>>>   pros:
>> >>>>>>     - seamless upgrade process
>> >>>>>>     - tool can be tested properly before
>> >>>>>>   cons:
>> >>>>>>     - may interact badly with configuration management tools
>> controlling the contents of cassandra.yaml
>> >>>>>>     - poor transparency for operators
>> >>>>>>
>> >>>>>> 3. Cassandra could read both formats, may warn on startup when
>> legacy format found.
>> >>>>>>     pros:
>> >>>>>>       - no filename change
>> >>>>>>       - operator controlled switch to new format
>> >>>>>>     cons:
>> >>>>>>       - higher complexity at implementation and testing
>> >>>>>>       - format translation not solved
>> >>>>>>
>> >>>>>> 4. An online tool, e.g. nodetool command to export the
>> configuration the Cassandra node is currently running with, with filtering
>> option to suppress default settings.
>> >>>>>>     pros:
>> >>>>>>       - such a nodetool command would be useful independently from
>> changing the config format, could be added before and support any format
>> >>>>>>       - the bare information is already available in
>> system_views.settings
>> >>>>>>       - could be combined with #1 or #3 to support the format
>> translation
>> >>>>>>     cons: ?
>> >>>>>>
>> >>>>>>
>> >>>>>> My favourite would be #3 + #4, while I would most dislike #2.
>> >>>>>>
>> >>>>>> Tibor
>> >>>>>>
>> >>>>>>
>> >>>>>> On 17. Feb 2022, at 23:13, Caleb Rackliffe
>> <calebrackli...@gmail.com> <calebrackli...@gmail.com> wrote:
>> >>>>>>
>> >>>>>> Hey everyone,
>> >>>>>>
>> >>>>>> There has already been some Slack discussion around this, but for
>> anyone who doesn't follow that closely, I'd like to lobby more widely for
>> my proposal in CASSANDRA-17292 to eventually move cassandra.yaml toward a
>> more nested structure.
>> >>>>>>
>> >>>>>> The proposal itself is here, and there has already been some
>> inline discussion, but feel free to drop any feedback there, in the Jira,
>> or here, depending on what you're most comfortable with.
>> >>>>>>
>> >>>>>> Given where we are in the lead-up to 4.1, I have no intention of
>> pushing to adopt any of this for existing config in that release. However,
>> what I think would be nice is if we could come to a rough consensus in time
>> to inform work on new parameters, like those we're planning to add in
>> CASSANDRA-17188.
>> >>>>>>
>> >>>>>> Thanks!
>> >>>>>>
>> >>>>>>
>> >> No PHI in Email: PointClickCare and Collective Medical, A
>> PointClickCare Company, policies prohibit sending protected health
>> information (PHI) by email, which may violate regulatory requirements. If
>> sending PHI is necessary, please contact the sender for secure delivery
>> instructions.
>> >>
>> >> Confidentiality Notice: This email message, including any attachments,
>> is for the sole use of the intended recipient(s) and may contain
>> confidential and privileged information. Any unauthorized review, use,
>> disclosure or distribution is prohibited. If you are not the intended
>> recipient, please contact the sender by reply email and destroy all copies
>> of the original message.
>>
>>

Reply via email to