> I think if we go down the route of pushing configs around with LWT + caching 
> instead, we should have that be a generic system that is designed for 
> everyone to use. 
Agreed. Otherwise we end up with the same problem Aleksey's speaking about 
above, where we build something for a specific purpose and then maintainers in 
the future with a reasonable need extend or bend it to fit their new need, 
risking destabilizing the original implementation.

Better to have a solid shared primitive other features can build upon.

On Mon, Jan 6, 2025, at 8:33 AM, Jon Haddad wrote:
> Would you mind elaborating on what makes it unsuitable? I don’t have a good 
> mental model on its properties, so i assumed that it could be used to 
> disseminate arbitrary key value pairs like config fairly easily. 
> 
> Somewhat humorously, i think that same assumption was made when putting sai 
> metadata into gossip which caused a cluster with 800 2i to break it. 
> 
> I think if we go down the route of pushing configs around with LWT + caching 
> instead, we should have that be a generic system that is designed for 
> everyone to use. Then we have a gossip replacement, reduce config clutter, 
> and people have something that can be used without adding another bespoke 
> system into the mix. 
> 
> Jon 
> 
> On Mon, Jan 6, 2025 at 6:48 AM Aleksey Yeshchenko <alek...@apple.com> wrote:
>> TCM was designed with a couple of very specific correctness-critical use 
>> cases in mind, not as a generic mechanism for everyone to extend.
>> 
>> It might be *convenient* to employ TCM for some other features, which makes 
>> it tempting to abuse TCM for an unintended purpose, but we shouldn’t do 
>> what's convenient over what is right. There are several ways this often goes 
>> wrong.
>> 
>> For example, the sybsystem gets used as is, without modification, by a new 
>> feature, but in ways that invalidate the assumptions behind the design of 
>> the subsystem - designed for particular use cases.
>> 
>> For another example, the subsystem *almost* works as is for the new feature, 
>> but doesn't *quite* work as is, so changes are made to it, and reviewed, by 
>> someone not familiar enough with the subsystem design and implementation. 
>> One of such changes eventually introduces a bug to the shared critical 
>> subsystem, and now everyone is having a bad time.
>> 
>> The risks are real, and I’d strongly prefer that we didn’t co-opt a critical 
>> subsystem for a non-critical use-case for this reason alone.
>> 
>>> On 21 Dec 2024, at 23:18, Jordan West <jorda...@gmail.com> wrote:
>>> 
>>> I tend to lean towards Josh's perspective. Gossip was poorly tested and 
>>> implemented. I dont think it's a good parallel or at least I hope it's not. 
>>> Taken to the extreme we shouldn't touch the database at all otherwise, 
>>> which isn't practical. That said, anything touching important subsystems 
>>> needs more care, testing, and time to bake. I think we're mostly discussing 
>>> "being careful" of which I am totally on board with. I don't think Benedict 
>>> ever said "don't use TCM", in fact he's said the opposite, but emphasized 
>>> the care that is required when we do, which is totally reasonable. 
>>>   
>>> Back to capabilities, Riak built them on an eventually consistent subsystem 
>>> and they worked fine. If you have a split brain you likely dont want to 
>>> communicate agreement as is (or have already learned about agreement and 
>>> its not an issue). That said, I don't think we have an EC layer in C* I 
>>> would want to rely on outside of distributed tables. So in the context of 
>>> what we have existing I think TCM is a better fit. I still need to dig a 
>>> little more to be convinced and plan to do that as I draft the CEP.
>>> 
>>> Jordan
>>> 
>>> On Sat, Dec 21, 2024 at 5:51 AM Benedict <bened...@apache.org> wrote:
>>>> 
>>>> I’m not saying we need to tease out bugs from TCM. I’m saying every time 
>>>> someone touches something this central to correctness we introduce a risk 
>>>> of breaking it, and that we should exercise that risk judiciously. This 
>>>> has zero to do with the amount of data we’re pushing through it, and 100% 
>>>> to do with writing bad code.
>>>> 
>>>> We treated gossip carefully in part because it was hard to work with, but 
>>>> in part because getting it wrong was particularly bad. We should retain 
>>>> the latter reason for caution.
>>>> 
>>>> We also absolutely do not need TCM for consistency. We have consistent 
>>>> database functionality for that. TCM is special because it cannot rely on 
>>>> the database mechanisms, as it underpins them. That is the whole point of 
>>>> why we should treat it carefully.
>>>> 
>>>>> On 21 Dec 2024, at 13:43, Josh McKenzie <jmcken...@apache.org> wrote:
>>>>> 
>>>>> To play the devil's advocate - the more we exercise TCM the more bugs we 
>>>>> suss out. To Jon's point, the volume of information we're talking about 
>>>>> here in terms of capabilities dissemination shouldn't stress TCM at all.
>>>>> 
>>>>> I think a reasonable heuristic for relying on TCM for something is 
>>>>> whether there's a big difference in UX on something being eventually 
>>>>> consistent vs. strongly consistent. Exposing features to clients based on 
>>>>> whether the entire cluster supports them seems like the kind of thing 
>>>>> that could cause pain if we're in a split-brain, 
>>>>> cluster-is-settling-on-agreement kind of paradigm.
>>>>> 
>>>>> On Fri, Dec 20, 2024, at 3:17 PM, Benedict wrote:
>>>>>> 
>>>>>> Mostly conceptual; the problem with a linearizable history is that if 
>>>>>> you lose some of it (eg because some logic bug prevents you from 
>>>>>> processing some epoch) you stop the world until an operator can step in 
>>>>>> to perform surgery about what the history should be.
>>>>>> 
>>>>>> I do know of one recent bug to schema changes in cep-15 that broke TCM 
>>>>>> in this way. That particular avenue will be hardened, but the fewer 
>>>>>> places we risk this the better IMO. 
>>>>>> 
>>>>>> Of course, there are steps we could take to expose a limited API 
>>>>>> targeting these use cases, as well as using a separate log for ancillary 
>>>>>> functionality, that might better balance risk:reward. But equally I’m 
>>>>>> not sure it makes sense to TCM all the things, and maybe dogfooding our 
>>>>>> own database features and developing functionality that enables our own 
>>>>>> use cases could be better where it isn’t necessary 🤷‍♀️
>>>>>> 
>>>>>> 
>>>>>>> On 20 Dec 2024, at 19:22, Jordan West <jorda...@gmail.com> wrote:
>>>>>>> 
>>>>>>> On Fri, Dec 20, 2024 at 11:06 AM Benedict <bened...@apache.org> wrote:
>>>>>>>> 
>>>>>>>> If TCM breaks we all have a really bad time, much worse than if any 
>>>>>>>> one of these features individually has problems. If you break TCM in 
>>>>>>>> the right way the cluster could become inoperable, or operations like 
>>>>>>>> topology changes may be prevented. 
>>>>>>> 
>>>>>>> Benedict, when you say this are you speaking hypothetically (in the 
>>>>>>> sense that by using TCM more we increase the probability of using it 
>>>>>>> "wrong" and hitting an unknown edge case) or are there known ways today 
>>>>>>> that TCM "breaks"?  
>>>>>>> 
>>>>>>> Jordan
>>>>>>>  
>>>>>>>> This means that even a parallel log has some risk if we end up 
>>>>>>>> modifying shared functionality.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On 20 Dec 2024, at 18:47, Štefan Miklošovič <smikloso...@apache.org> 
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> I stand corrected. C in TCM is "cluster" :D Anyway. Configuration is 
>>>>>>>>> super reasonable to be put there.
>>>>>>>>> 
>>>>>>>>> On Fri, Dec 20, 2024 at 7:42 PM Štefan Miklošovič 
>>>>>>>>> <smikloso...@apache.org> wrote:
>>>>>>>>>> I am super hesitant to base distributed guardrails or any 
>>>>>>>>>> configuration for that matter on anything but TCM. Does not "C" in 
>>>>>>>>>> TCM stand for "configuration" anyway? So rename it to TSM like 
>>>>>>>>>> "schema" then if it is meant to be just for that. It seems to be 
>>>>>>>>>> quite ridiculous to code tables with caches on top when we have way 
>>>>>>>>>> more effective tooling thanks to CEP-21 to deal with that with clear 
>>>>>>>>>> advantages of getting rid of all of that old mechanism we have in 
>>>>>>>>>> place.
>>>>>>>>>> 
>>>>>>>>>> I have not seen any concrete examples of risks why using TCM should 
>>>>>>>>>> be just for what it is currently for. Why not put the configuration 
>>>>>>>>>> meant to be cluster-wide into that?
>>>>>>>>>> 
>>>>>>>>>> What is it ... performance? What does even the term "additional 
>>>>>>>>>> complexity" mean? Complex in what? Do you think that putting there 3 
>>>>>>>>>> types of transformations in case of guardrails which flip some 
>>>>>>>>>> booleans and numbers would suddenly make TCM way more complex? Come 
>>>>>>>>>> on ...
>>>>>>>>>> 
>>>>>>>>>> This has nothing to do with what Jordan is trying to introduce. I 
>>>>>>>>>> think we all agree he knows what he is doing and if he evaluates 
>>>>>>>>>> that TCM is too much for his use case (or it is not a good fit) that 
>>>>>>>>>> is perfectly fine. 
>>>>>>>>>> 
>>>>>>>>>> On Fri, Dec 20, 2024 at 7:22 PM Paulo Motta <pa...@apache.org> wrote:
>>>>>>>>>>> > It should be possible to use distributed system tables just fine 
>>>>>>>>>>> > for capabilities, config and guardrails.
>>>>>>>>>>> 
>>>>>>>>>>> I have been thinking about this recently and I agree we should be 
>>>>>>>>>>> wary about introducing new TCM states and create additional 
>>>>>>>>>>> complexity that can be serviced by existing data dissemination 
>>>>>>>>>>> mechanisms (gossip/system tables). I would prefer that we take a 
>>>>>>>>>>> more phased and incremental approach to introduce new TCM states.
>>>>>>>>>>> 
>>>>>>>>>>> As a way to accomplish that, I have thought about introducing a new 
>>>>>>>>>>> generic TCM state "In Maintenance", where schema or membership 
>>>>>>>>>>> changes are "frozen/disallowed" while an external operation is 
>>>>>>>>>>> taking place. This "external operation" could mean many things:
>>>>>>>>>>> - Upgrade
>>>>>>>>>>> - Downgrade
>>>>>>>>>>> - Migration
>>>>>>>>>>> - Capability Enablement/Disablement
>>>>>>>>>>> 
>>>>>>>>>>> These could be sub-states of the "Maintenance" TCM state, that 
>>>>>>>>>>> could be managed externally (via cache/gossip/system 
>>>>>>>>>>> tables/sidecar). Once these sub-states are validated thouroughly 
>>>>>>>>>>> and mature enough, we could "promote" them to top-level TCM states.
>>>>>>>>>>> 
>>>>>>>>>>> In the end what really matters is that cluster and schema 
>>>>>>>>>>> membership changes do not happen while a miscellaneous operation is 
>>>>>>>>>>> taking place.
>>>>>>>>>>> 
>>>>>>>>>>> Would this make sense as an initial way to integrate TCM with 
>>>>>>>>>>> capabilities framework ?
>>>>>>>>>>> 
>>>>>>>>>>> On Fri, Dec 20, 2024 at 4:53 AM Benedict <bened...@apache.org> 
>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> If you perform a read from a distributed table on startup you will 
>>>>>>>>>>>> find the latest information. What catchup are you thinking of? I 
>>>>>>>>>>>> don’t think any of the features we talked about need a log, only 
>>>>>>>>>>>> the latest information.
>>>>>>>>>>>> 
>>>>>>>>>>>> We can (and should) probably introduce event listeners for 
>>>>>>>>>>>> distributed tables, as this is also a really great feature, but I 
>>>>>>>>>>>> don’t think this should be necessary here.
>>>>>>>>>>>> 
>>>>>>>>>>>> Regarding disagreements: if you use LWTs then there are no 
>>>>>>>>>>>> consistency issues to worry about.
>>>>>>>>>>>> 
>>>>>>>>>>>> Again, I’m not opposed to using TCM, although I am a little 
>>>>>>>>>>>> worried TCM is becoming our new hammer with everything a nail. It 
>>>>>>>>>>>> would be better IMO to keep TCM scoped to essential functionality 
>>>>>>>>>>>> as it’s critical to correctness. Perhaps we could extend its APIs 
>>>>>>>>>>>> to less critical services without intertwining them with 
>>>>>>>>>>>> membership, schema and epoch handling.
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> On 20 Dec 2024, at 09:43, Štefan Miklošovič 
>>>>>>>>>>>>> <smikloso...@apache.org> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I find TCM way more comfortable to work with. The capability of 
>>>>>>>>>>>>> log being replayed on restart and catching up with everything 
>>>>>>>>>>>>> else automatically is god-sent. If we had that on "good old 
>>>>>>>>>>>>> distributed tables", then is it not true that we would need to 
>>>>>>>>>>>>> take extra care of that, e.g. we would need to repair it etc ... 
>>>>>>>>>>>>> It might be the source of the discrepancies / disagreements etc. 
>>>>>>>>>>>>> TCM is just "maintenance-free" and _just works_.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I think I was also investigating distributed tables but was just 
>>>>>>>>>>>>> pulled towards TCM naturally because of its goodies.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Fri, Dec 20, 2024 at 10:08 AM Benedict <bened...@apache.org> 
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> TCM is a perfectly valid basis for this, but TCM is only really 
>>>>>>>>>>>>>> *necessary* to solve meta config problems where we can’t rely on 
>>>>>>>>>>>>>> the rest of the database working. Particularly placement issues, 
>>>>>>>>>>>>>> which is why schema and membership need to live there.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> It should be possible to use distributed system tables just fine 
>>>>>>>>>>>>>> for capabilities, config and guardrails.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> That said, it’s possible config might be better represented as 
>>>>>>>>>>>>>> part of the schema (and we already store some relevant config 
>>>>>>>>>>>>>> there) in which case it would live in TCM automatically. 
>>>>>>>>>>>>>> Migrating existing configs to a distributed setup will be fun 
>>>>>>>>>>>>>> however we do it though.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Capabilities also feel naturally related to other membership 
>>>>>>>>>>>>>> information, so TCM might be the most suitable place, 
>>>>>>>>>>>>>> particularly for handling downgrades after capabilities have 
>>>>>>>>>>>>>> been enabled (if we ever expect to support turning off 
>>>>>>>>>>>>>> capabilities and then downgrading - which today we mostly don’t).
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 20 Dec 2024, at 08:42, Štefan Miklošovič 
>>>>>>>>>>>>>>> <smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Jordan,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I also think that having it on TCM would be ideal and we should 
>>>>>>>>>>>>>>> explore this path first before doing anything custom.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Regarding my idea about the guardrails in TCM, when I 
>>>>>>>>>>>>>>> prototyped that and wanted to make it happen, there was a 
>>>>>>>>>>>>>>> little bit of a pushback (1) (even though super reasonable one) 
>>>>>>>>>>>>>>> that TCM is just too young at the moment and it would be 
>>>>>>>>>>>>>>> desirable to go through some stabilisation period.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Another idea was that we should not make just guardrails happen 
>>>>>>>>>>>>>>> but the whole config should be in TCM. From what I put 
>>>>>>>>>>>>>>> together, Sam / Alex does not seem to be opposed to this idea, 
>>>>>>>>>>>>>>> rather the opposite, but having CEP about that is way more 
>>>>>>>>>>>>>>> involved than having just guardrails there. I consider 
>>>>>>>>>>>>>>> guardrails to be kind of special and I do not think that having 
>>>>>>>>>>>>>>> all configurations in TCM (which guardrails are part of) is the 
>>>>>>>>>>>>>>> absolute must in order to deliver that. I may start with 
>>>>>>>>>>>>>>> guardrails CEP and you may explore Capabilities CEP on TCM too, 
>>>>>>>>>>>>>>> if that makes sense?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I just wanted to raise the point about the time this would be 
>>>>>>>>>>>>>>> delivered. If Capabilities are built on TCM and I wanted to do 
>>>>>>>>>>>>>>> Guardrails on TCM too but was explained it is probably too 
>>>>>>>>>>>>>>> soon, I guess you would experience something similar.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Sam's comment is from May and maybe a lot has changed since in 
>>>>>>>>>>>>>>> then and his comment is not applicable anymore. It would be 
>>>>>>>>>>>>>>> great to know if we could build on top of the current trunk 
>>>>>>>>>>>>>>> already or we will wait until 5.1/6.0 is delivered.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> (1) 
>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/CASSANDRA-19593?focusedCommentId=17844326&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17844326
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Fri, Dec 20, 2024 at 2:17 AM Jordan West 
>>>>>>>>>>>>>>> <jorda...@gmail.com> wrote:
>>>>>>>>>>>>>>>> Firstly, glad to see the support and enthusiasm here and in 
>>>>>>>>>>>>>>>> the recent Slack discussion. I think there is enough for me to 
>>>>>>>>>>>>>>>> start drafting a CEP.
>>>>>>>>>>>>>>>>  
>>>>>>>>>>>>>>>> Stefan, global configuration and capabilities do have some 
>>>>>>>>>>>>>>>> overlap but not full overlap. For example, you may want to set 
>>>>>>>>>>>>>>>> globally that a cluster enables feature X or control the 
>>>>>>>>>>>>>>>> threshold for a guardrail but you still need to know if all 
>>>>>>>>>>>>>>>> nodes support feature X or have that guardrail, the latter is 
>>>>>>>>>>>>>>>> what capabilities targets. I do think capabilities are a step 
>>>>>>>>>>>>>>>> towards supporting global configuration and the work you 
>>>>>>>>>>>>>>>> described is another step (that we could do after capabilities 
>>>>>>>>>>>>>>>> or in parallel with them in mind). I am also supportive of 
>>>>>>>>>>>>>>>> exploring global configuration for the reasons you mentioned. 
>>>>>>>>>>>>>>>>  
>>>>>>>>>>>>>>>> In terms of how capabilities get propagated across the 
>>>>>>>>>>>>>>>> cluster, I hadn't put much thought into it yet past likely TCM 
>>>>>>>>>>>>>>>> since this will be a new feature that lands after TCM. In 
>>>>>>>>>>>>>>>> Riak, we had gossip (but more mature than C*s -- this was an 
>>>>>>>>>>>>>>>> area I contributed to a lot so very familiar) to disseminate 
>>>>>>>>>>>>>>>> less critical information such as capabilities and a separate 
>>>>>>>>>>>>>>>> layer that did TCM. Since we don't have this in C* I don't 
>>>>>>>>>>>>>>>> think we would want to build a separate distribution channel 
>>>>>>>>>>>>>>>> for capabilities metadata when we already have TCM in place. 
>>>>>>>>>>>>>>>> But I plan to explore this more as I draft the CEP.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Jordan
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Thu, Dec 19, 2024 at 1:48 PM Štefan Miklošovič 
>>>>>>>>>>>>>>>> <smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>> Hi Jordan,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> what would this look like from the implementation 
>>>>>>>>>>>>>>>>> perspective? I was experimenting with transactional 
>>>>>>>>>>>>>>>>> guardrails where an operator would control the content of a 
>>>>>>>>>>>>>>>>> virtual table which would be backed by TCM so whatever 
>>>>>>>>>>>>>>>>> guardrail we would change, this would be automatically and 
>>>>>>>>>>>>>>>>> transparently propagated to every node in a cluster. The POC 
>>>>>>>>>>>>>>>>> worked quite nicely. TCM is just a vehicle to commit a change 
>>>>>>>>>>>>>>>>> which would spread around and all these settings would 
>>>>>>>>>>>>>>>>> survive restarts. We would have the same configuration 
>>>>>>>>>>>>>>>>> everywhere which is not currently the case because guardrails 
>>>>>>>>>>>>>>>>> are configured per node and if not persisted to yaml, on 
>>>>>>>>>>>>>>>>> restart their values would be forgotten.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Guardrails are just an example, what is quite obvious is to 
>>>>>>>>>>>>>>>>> expand this idea to the whole configuration in yaml. Of 
>>>>>>>>>>>>>>>>> course, not all properties in yaml make sense to be the same 
>>>>>>>>>>>>>>>>> cluster-wise (ip addresses etc ...), but the ones which do 
>>>>>>>>>>>>>>>>> would be again set everywhere the same way.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> The approach I described above is that we make sure that the 
>>>>>>>>>>>>>>>>> configuration is same everywhere, hence there can be no 
>>>>>>>>>>>>>>>>> misunderstanding what features this or that node has, if we 
>>>>>>>>>>>>>>>>> say that all nodes have to have a particular feature because 
>>>>>>>>>>>>>>>>> we said so in TCM log so on restart / replay, a node with 
>>>>>>>>>>>>>>>>> "catch up" with whatever features it is asked to turn on.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Your approach seems to be that we distribute what all 
>>>>>>>>>>>>>>>>> capabilities / features a cluster supports and that each 
>>>>>>>>>>>>>>>>> individual node configures itself in some way or not to 
>>>>>>>>>>>>>>>>> comply?
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Is there any intersection in these approaches? At first sight 
>>>>>>>>>>>>>>>>> it seems somehow related. How is one different from another 
>>>>>>>>>>>>>>>>> from your point of view?
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> (1) https://issues.apache.org/jira/browse/CASSANDRA-19593
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Thu, Dec 19, 2024 at 12:00 AM Jordan West 
>>>>>>>>>>>>>>>>> <jw...@apache.org> wrote:
>>>>>>>>>>>>>>>>>> In a recent discussion on the pains of upgrading one topic 
>>>>>>>>>>>>>>>>>> that came up is a feature that Riak had called Capabilities 
>>>>>>>>>>>>>>>>>> [1]. A major pain with upgrades is that each node 
>>>>>>>>>>>>>>>>>> independently decides when to start using new or modified 
>>>>>>>>>>>>>>>>>> functionality. Even when we put this behind a config (like 
>>>>>>>>>>>>>>>>>> storage compatibility mode) each node immediately enables 
>>>>>>>>>>>>>>>>>> the feature when the config is changed and the node is 
>>>>>>>>>>>>>>>>>> restarted. This causes various types of upgrade pain such as 
>>>>>>>>>>>>>>>>>> failed streams and schema disagreement. A recent example of 
>>>>>>>>>>>>>>>>>> this is CASSANRA-20118 [2]. In some cases operators can 
>>>>>>>>>>>>>>>>>> prevent this from happening through careful coordination 
>>>>>>>>>>>>>>>>>> (e.g. ensuring upgrade sstables only runs after the whole 
>>>>>>>>>>>>>>>>>> cluster is upgraded) but typically requires custom code in 
>>>>>>>>>>>>>>>>>> whatever control plane the operator is using. A capabilities 
>>>>>>>>>>>>>>>>>> framework would distribute the state of what features each 
>>>>>>>>>>>>>>>>>> node has (and their status e.g. enabled or not) so that the 
>>>>>>>>>>>>>>>>>> cluster can choose to opt in to new features once the whole 
>>>>>>>>>>>>>>>>>> cluster has them available. From experience, having this in 
>>>>>>>>>>>>>>>>>> Riak made upgrades a significantly less risky process and 
>>>>>>>>>>>>>>>>>> also paved a path towards repeatable downgrades. I think 
>>>>>>>>>>>>>>>>>> Cassandra would benefit from it as well.
>>>>>>>>>>>>>>>>>>   
>>>>>>>>>>>>>>>>>> Further, other tools like analytics could benefit from 
>>>>>>>>>>>>>>>>>> having this information since currently it's up to the 
>>>>>>>>>>>>>>>>>> operator to manually determine the state of the cluster in 
>>>>>>>>>>>>>>>>>> some cases. 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I am considering drafting a CEP proposal for this feature 
>>>>>>>>>>>>>>>>>> but wanted to take the general temperature of the community 
>>>>>>>>>>>>>>>>>> and get some early thoughts while working on the draft. 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Looking forward to hearing y'alls thoughts,
>>>>>>>>>>>>>>>>>> Jordan
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> [1] 
>>>>>>>>>>>>>>>>>> https://github.com/basho/riak_core/blob/25d9a6fa917eb8a2e95795d64eb88d7ad384ed88/src/riak_core_capability.erl#L23-L72
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> [2] https://issues.apache.org/jira/browse/CASSANDRA-20118
>>>>> 

Reply via email to