> > It seems to me the real issue is nobody noticed this was agreed and/or > forgot and didn’t think about it much.
I have some trouble keeping up with all the discussions those days so I might have missed the discussion. The only place I remembered where this subject was mentioned was during the roadmap discussion over a year ago. My understanding of that discussion was only that there was a wish to build a solution for that problem. Are you referring to another discussion I missed? Le mar. 21 févr. 2023 à 08:41, Jacek Lewandowski < lewandowski.ja...@gmail.com> a écrit : > I'd like to mention CASSANDRA-17056 (CEP-17) here as it aims to introduce > multiple sstable formats support. It allows for providing an implementation > of SSTableFormat along with SSTableReader and SSTableWriter. That could be > extended easily to support different implementations for certain version > ranges, like one impl for ma-nz, other for oa+, etc. without having a > confusing implementation with a lot of conditional blocks. Old formats in > such case could be maintained separately from the main code and easily > switched any time. > > thanks > - - -- --- ----- -------- ------------- > Jacek Lewandowski > > > wt., 21 lut 2023 o 01:46 Yuki Morishita <yu...@apache.org> napisał(a): > >> Hi, >> >> What I wanted to address in my comment in CASSANDRA-8110( >> https://issues.apache.org/jira/browse/CASSANDRA-8110?focusedCommentId=17641705&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17641705) >> is to focus on better upgrade experience. >> >> Upgrading the cluster can be painful for some orgs with mission critical >> Cassandra cluster, where they cannot tolerate less availability because of >> the inability to replace the downed node. >> They also need to plan rolling back to the previous state when something >> happens along the way. >> The change I proposed in CASSANDRA-8110 is to achieve the goal of at >> least enabling SSTable streaming during the upgrade by not upgrading the >> SSTable version. This can make the cluster to easily rollback to the >> previous version. >> Downgrading SSTable is not the primary focus (though Cassandra needs to >> implement the way to write SSTable in older versions, so it is somewhat >> related.) >> >> I'm preparing the design doc for the change. >> Also, if I should create a separate ticket from CASSANDRA-8110 for the >> clarity of the goal of the change, please let me know. >> >> >> On Tue, Feb 21, 2023 at 5:31 AM Benedict <bened...@apache.org> wrote: >> >>> FWIW I think 8110 is the right approach, even if it isn’t a panacea. We >>> will have to eventually also tackle system schema changes (probably not >>> hard), and may have to think a little carefully about other things, eg with >>> TTLs the format change is only the contract about what values can be >>> present, so we have to make sure the data validity checks are consistent >>> with the format we write. It isn’t as simple as writing an earlier version >>> in this case (unless we permit truncating the TTL, perhaps) >>> >>> On 20 Feb 2023, at 20:24, Benedict <bened...@apache.org> wrote: >>> >>> >>> >>> In a self-organising community, things that aren’t self-policed >>> naturally end up policed in an adhoc manner, and with difficulty. I’m not >>> sure that’s the same as arbitrary enforcement. It seems to me the real >>> issue is nobody noticed this was agreed and/or forgot and didn’t think >>> about it much. >>> >>> But, even without any prior agreement, it’s perfectly reasonable to >>> request that things do not break compatibility if they do not need to, as >>> part of the normal patch integration process. >>> >>> Issues with 3.1->4.0 aren’t particularly relevant as they predate any >>> agreement to do this. But we can and should address the problem of new >>> columns in schema tables, as this happens often between versions. I’m not >>> sure it has in 4.1 though? >>> >>> Regarding downgrade versions, surely this should simply be the same as >>> upgrade versions we support? >>> >>> >>> On 20 Feb 2023, at 20:02, Jeff Jirsa <jji...@gmail.com> wrote: >>> >>> >>> I'm not even convinced even 8110 addresses this - just writing sstables >>> in old versions won't help if we ever add things like new types or new >>> types of collections without other control abilities. Claude's other email >>> in another thread a few hours ago talks about some of these surprises - >>> "Specifically during the 3.1 -> 4.0 changes a column broadcast_port was >>> added to system/local. This means that 3.1 system can not read the table >>> as it has no definition for it. I tried marking the column for deletion in >>> the metadata and in the serialization header. The later got past the >>> column not found problem, but I suspect that it just means that data >>> columns after broadcast_port shifted and so incorrectly read." - this is a >>> harder problem to solve than just versioning sstables and network >>> protocols. >>> >>> Stepping back a bit, we have downgrade ability listed as a goal, but >>> it's not (as far as I can tell) universally enforced, nor is it clear at >>> which point we will be able to concretely say "this release can be >>> downgraded to X". Until we actually define and agree that this is a >>> real goal with a concrete version where downgrade-ability becomes real, it >>> feels like things are somewhat arbitrarily enforced, which is probably very >>> frustrating for people trying to commit work/tickets. >>> >>> - Jeff >>> >>> >>> >>> On Mon, Feb 20, 2023 at 11:48 AM Dinesh Joshi <djo...@apache.org> wrote: >>> >>>> I’m a big fan of maintaining backward compatibility. Downgradability >>>> implies that we could potentially roll back an upgrade at any time. While I >>>> don’t think we need to retain the ability to downgrade in perpetuity it >>>> would be a good objective to maintain strict backward compatibility and >>>> therefore downgradability until a certain point. This would imply >>>> versioning metadata and extending it in such a way that prior version(s) >>>> could continue functioning. This can certainly be expensive to implement >>>> and might bloat on-disk storage. However, we could always offer an option >>>> for the operator to optimize the on-disk structures for the current version >>>> then we can rewrite them in the latest version. This optimizes the storage >>>> and opens up new functionality. This means new features that can work with >>>> old on-disk structures will be available while others that strictly require >>>> new versions of the data structures will be unavailable until the operator >>>> migrates to the new version. This migration IMO should be irreversible. >>>> Beyond this point the operator will lose the ability to downgrade which is >>>> ok. >>>> >>>> Dinesh >>>> >>>> On Feb 20, 2023, at 10:40 AM, Jake Luciani <jak...@gmail.com> wrote: >>>> >>>> >>>> There has been progress on >>>> >>>> https://issues.apache.org/jira/plugins/servlet/mobile#issue/CASSANDRA-8928 >>>> >>>> Which is similar to what datastax does for DSE. Would this be an >>>> acceptable solution? >>>> >>>> Jake >>>> >>>> On Mon, Feb 20, 2023 at 11:17 AM guo Maxwell <cclive1...@gmail.com> >>>> wrote: >>>> >>>>> It seems “An alternative solution is to implement/complete >>>>> CASSANDRA-8110 <https://issues.apache.org/jira/browse/CASSANDRA-8110>” >>>>> can give us more options if it is finished😉 >>>>> >>>>> Branimir Lambov <blam...@apache.org>于2023年2月20日 周一下午11:03写道: >>>>> >>>>>> Hi everyone, >>>>>> >>>>>> There has been a discussion lately about changes to the sstable >>>>>> format in the context of being able to abort a cluster upgrade, and the >>>>>> fact that changes to sstables can prevent downgraded nodes from reading >>>>>> any >>>>>> data written during their temporary operation with the new version. >>>>>> >>>>>> Most of the discussion is in CASSANDRA-18134 >>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-18134>, and is >>>>>> spreading into CASSANDRA-14277 >>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-14227> and >>>>>> CASSANDRA-17698 >>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-17698>, none of >>>>>> which is a good place to discuss the topic seriously. >>>>>> >>>>>> Downgradability is a worthy goal and is listed in the current >>>>>> roadmap. I would like to open a discussion here on how it would be >>>>>> achieved. >>>>>> >>>>>> My understanding of what has been suggested so far translates to: >>>>>> - avoid changes to sstable formats; >>>>>> - if there are changes, implement them in a way that is >>>>>> backwards-compatible, e.g. by duplicating data, so that a new version is >>>>>> presented in a component or portion of a component that legacy nodes will >>>>>> not try to read; >>>>>> - if the latter is not feasible, make sure the changes are only >>>>>> applied if a feature flag has been enabled. >>>>>> >>>>>> To me this approach introduces several risks: >>>>>> - it bloats file and parsing complexity; >>>>>> - it discourages improvement (e.g. CASSANDRA-17698 is no longer a LHF >>>>>> ticket once this requirement is in place); >>>>>> - it needs care to avoid risky solutions to address technical issues >>>>>> with the format versioning (e.g. staying on n-versions for 5.0 and >>>>>> needing >>>>>> a bump for a 4.1 bugfix might require porting over support for new >>>>>> features); >>>>>> - it requires separate and uncoordinated solutions to the problem and >>>>>> switching mechanisms for each individual change. >>>>>> >>>>>> An alternative solution is to implement/complete CASSANDRA-8110 >>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-8110>, which >>>>>> provides a method of writing sstables for a target version. During >>>>>> upgrades, a node could be set to produce sstables corresponding to the >>>>>> older version, and there is a very straightforward way to implement >>>>>> modifications to formats like the tickets above to conform to its >>>>>> requirements. >>>>>> >>>>>> What do people think should be the way forward? >>>>>> >>>>>> Regards, >>>>>> Branimir >>>>>> >>>>>> >>>>>> -- >>>>> you are the apple of my eye ! >>>>> >>>> -- >>>> http://twitter.com/tjake >>>> >>>>