The default part I was referring to incremental repair.

SASI still has a pretty fatal issue where nodes OOM: 
https://issues.apache.org/jira/browse/CASSANDRA-12662 
<https://issues.apache.org/jira/browse/CASSANDRA-12662> 



> On Oct 4, 2017, at 12:21 PM, Pavel Yaskevich <pove...@gmail.com> wrote:
> 
> On Wed, Oct 4, 2017 at 12:09 PM, Jon Haddad <j...@jonhaddad.com 
> <mailto:j...@jonhaddad.com>> wrote:
> 
>> MVs work fine for *some use cases*, not the general use case.  That’s why
>> there should be a flag.  To opt into the feature when the behavior is only
>> known to be correct under a certain set of circumstances.  Nobody is saying
>> the flag should be “enable_terrible_feature_nobody_tested_and_we_all_hate”,
>> or something ridiculous like that.  It’s not an attack against the work
>> done by anyone, the level of effort put in, or minimizing the complexity of
>> the problem.  “enable_materialized_views” would be just fine.
>> 
>> We should be honest to people about what they’re getting into.  You may
>> not be aware of this, but a lot of people still believe Cassandra isn’t a
>> DB that you should put in prod.  It’s because features like SASI, MVs,  or
>> incremental repair get merged in prematurely (or even made the default),
>> without having been thoroughly tested, understood and vetted by trusted
>> community members.  New users hit the snags because they deploy the
>> bleeding edge code and hit the bugs.
>> 
> 
> I beg to differ in case of SASI, it has been tested and vetted and ported
> to different versions. I'm pretty sure it still has better test coverage
> then most of the project does, it's not a "default" and you actually have
> to opt-in to it by creating a custom index, how is that premature or
> misleading to users?
> 
> 
>> 
>> That’s not how the process should work.
>> 
>> Ideally, we’d follow a process that looks a lot more like this:
>> 
>> 1. New feature is built with an opt in flag.  Unknowns are documented, the
>> risk of using the feature is known to the end user.
>> 2. People test and use the feature that know what they’re doing.  They are
>> able to read the code, submit patches, and help flush out the issues.  They
>> do so in low risk environments.  In the case of MVs, they can afford to
>> drop and rebuild the view over a week, or rebuild the cluster altogether.
>> We may not even need to worry as much about backwards compatibility.
>> 3. The feature matures.  More tests are written.  More people become aware
>> of how to contribute to the feature’s stability.
>> 4. After a while, we vote on removing the feature flag and declare it
>> stable for general usage.
>> 
>> If nobody actually cares about a feature (why it was it written in the
>> first place?), then it would never get to 2, 3, 4.  It would take a while
>> for big features like MVs to be marked stable, and that’s fine, because it
>> takes a long time to actually stabilize them.  I think we can all agree
>> they are really, really hard problems to solve, and maybe it takes a while.
>> 
>> Jon
>> 
>> 
>> 
>>> On Oct 4, 2017, at 11:44 AM, Josh McKenzie <jmcken...@apache.org> wrote:
>>> 
>>>> 
>>>> So you’d rather continue to lie to users about the stability of the
>>>> feature rather than admitting it was merged in prematurely?
>>> 
>>> 
>>> Much like w/SASI, this is something that's in the code-base that for
>>>> certain use-cases apparently works just fine.
>>> 
>>> I don't know of any outstanding issues with the feature,
>>> 
>>> There appear to be varying levels of understanding of the implementation
>>>> details of MV's (that seem to directly correlate with faith in the
>>>> feature's correctness for the use-cases recommended)
>>> 
>>> We have users in the wild relying on MV's with apparent success (same
>> holds
>>>> true of all the other punching bags that have come up in this thread)
>>> 
>>> You're right, Jon. That's clearly exactly what I'm saying.
>>> 
>>> 
>>> On Wed, Oct 4, 2017 at 2:39 PM, Jon Haddad <j...@jonhaddad.com> wrote:
>>> 
>>>> So you’d rather continue to lie to users about the stability of the
>>>> feature rather than admitting it was merged in prematurely?  I’d rather
>>>> come clean and avoid future problems, and give people the opportunity to
>>>> stop using MVs rather than let them keep taking risks they’re unaware
>> of.
>>>> This is incredibly irresponsible in my opinion.
>>>> 
>>>>> On Oct 4, 2017, at 11:26 AM, Josh McKenzie <jmcken...@apache.org>
>> wrote:
>>>>> 
>>>>>> 
>>>>>> Oh, come on. You're being disingenuous.
>>>>> 
>>>>> Not my intent. MV's (and SASI, for example) are fairly well isolated;
>> we
>>>>> have a history of other changes that are much more broadly and higher
>>>>> impact risk-wise across the code-base.
>>>>> 
>>>>> If I were an operator and built a critical part of my business on a
>>>>> released feature that developers then decided to default-disable as
>>>>> 'experimental' post-hoc, I'd think long and hard about using any new
>>>>> features in that project in the future (and revisit my confidence in
>> all
>>>>> other features I relied on, and the software as a whole). We have users
>>>> in
>>>>> the wild relying on MV's with apparent success (same holds true of all
>>>> the
>>>>> other punching bags that have come up in this thread) and I'd hate to
>> see
>>>>> us alienate them by being over-aggressive in the way we handle this.
>>>>> 
>>>>> I'd much rather we continue to aggressively improve and continue to
>>>> analyze
>>>>> MV's stability before a 4.0 release and then use the experimental flag
>> in
>>>>> the future, if at all possible.
>>>>> 
>>>>> On Wed, Oct 4, 2017 at 2:01 PM, Benedict Elliott Smith <_@
>>>> belliottsmith.com>
>>>>> wrote:
>>>>> 
>>>>>> Can't we promote these behavioural flags to keyspace properties (with
>>>>>> suitable permissions to edit necessary)?
>>>>>> 
>>>>>> I agree that enabling/disabling features shouldn't require a rolling
>>>>>> restart, and nor should switching their consistency safety level.
>>>>>> 
>>>>>> I think this would be the most suitable equivalent to ALLOW FILTERING
>>>> for
>>>>>> MVs.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> On 4 Oct 2017, at 12:31, Jeremy Hanna <jeremy.hanna1...@gmail.com>
>>>>>> wrote:
>>>>>>> 
>>>>>>> Not to detract from the discussion about whether or not to classify X
>>>> or
>>>>>> Y as experimental but https://issues.apache.org/
>>>> jira/browse/CASSANDRA-8303
>>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-8303> was originally
>>>>>> about operators preventing users from abusing features (e.g. allow
>>>>>> filtering).  Could that concept be extended to features like MVs or
>>>> SASI or
>>>>>> anything else?  On the one hand it is nice to be able to set those
>>>> things
>>>>>> dynamically without a rolling restart as well as by user.  On the
>> other
>>>>>> it’s less clear about defaults.  There could be a property file or
>> just
>>>> in
>>>>>> the yaml, the operator could specify the default features that are
>>>> enabled
>>>>>> for users and then it could be overridden within that framework.
>>>>>>> 
>>>>>>>> On Oct 4, 2017, at 10:24 AM, Aleksey Yeshchenko <alek...@apple.com>
>>>>>> wrote:
>>>>>>>> 
>>>>>>>> We already have those for UDFs and CDC.
>>>>>>>> 
>>>>>>>> We should have more: for triggers, SASI, and MVs, at least.
>> Operators
>>>>>> need a way to disable features they haven’t validated.
>>>>>>>> 
>>>>>>>> We already have sufficient consensus to introduce the flags, and we
>>>>>> should. There also seems to be sufficient consensus on emitting
>>>> warnings.
>>>>>>>> 
>>>>>>>> The debate is now on their defaults for MVs in 3.0, 3.11, and 4.0. I
>>>>>> agree with Sylvain that flipping the default in a minor would be
>>>> invasive.
>>>>>> We shouldn’t do that.
>>>>>>>> 
>>>>>>>> For trunk, though, I think we should default to off. When it comes
>> to
>>>>>> releasing 4.0 we can collectively decide if there is sufficient trust
>> in
>>>>>> MVs at the time to warrant flipping the default to true. Ultimately we
>>>> can
>>>>>> decide this in a PMC vote. If I misread the consensus regarding the
>>>> default
>>>>>> for 4.0, then we might as well vote on that. What I see is sufficient
>>>>>> distrust coming from core committers, including the author of the v1
>>>>>> design, to warrant opt-in for MVs.
>>>>>>>> 
>>>>>>>> If we don’t trust in them as developers, we shouldn’t be cavalier
>> with
>>>>>> the users, either. Not until that trust is gained/regained.
>>>>>>>> 
>>>>>>>> —
>>>>>>>> AY
>>>>>>>> 
>>>>>>>> On 4 October 2017 at 13:26:10, Stefan Podkowinski (s...@apache.org)
>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Introducing feature flags for enabling or disabling different code
>>>> paths
>>>>>>>> is not sustainable in the long run. It's hard enough to keep up with
>>>>>>>> integration testing with the couple of Jenkins jobs that we have.
>>>>>>>> Running jobs for all permutations of flags that we keep around,
>> would
>>>>>>>> turn out impractical. But if we don't, I'm pretty sure something
>> will
>>>>>>>> fall off the radar and it won't take long until someone reports that
>>>>>>>> enabling feature X after the latest upgrade will simply not work
>>>>>> anymore.
>>>>>>>> 
>>>>>>>> There may also be some more subtle assumptions and cross
>> dependencies
>>>>>>>> between features that may cause side effects by disabling a feature
>>>> (or
>>>>>>>> parts of it), even if it's just e.g. a metric value that suddenly
>>>> won't
>>>>>>>> get updated anymore, but is used somewhere else. We'll also have to
>>>>>>>> consider migration paths for turning a feature on and off again
>>>> without
>>>>>>>> causing any downtime. If I was to turn on e.g. MVs on a single node
>> in
>>>>>>>> my cluster, then this should not cause any issues on the other nodes
>>>>>>>> that still have MV code paths disabled. Again, this would need to be
>>>>>> tested.
>>>>>>>> 
>>>>>>>> So to be clear, my point is that any flags should be implemented in
>> a
>>>>>>>> really non-invasive way on the user facing side only, e.g. by
>>>> emitting a
>>>>>>>> log message or cqlsh error. At this point, I'm not really sure if it
>>>>>>>> would be a good idea to add them to cassandra.yaml, as I'm pretty
>> sure
>>>>>>>> that eventually they will be used to change the behaviour of our
>> code,
>>>>>>>> beside printing a log message.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On 04.10.17 10:03, Mick Semb Wever wrote:
>>>>>>>>>>> CDC sounds like it is in the same basket, but it already has the
>>>>>>>>>>> `cdc_enabled` yaml flag which defaults false.
>>>>>>>>>> I went this route because I was incredibly wary of changing the CL
>>>>>>>>>> code and wanted to shield non-CDC users from any and all risk I
>>>>>>>>>> reasonably could.
>>>>>>>>> 
>>>>>>>>> This approach so far is my favourite. (Thanks Josh.)
>>>>>>>>> 
>>>>>>>>> The flag name `cdc_enabled` is simple and, without adjectives, does
>>>> not
>>>>>>>>> imply "experimental" or "beta" or anything like that.
>>>>>>>>> It does make life easier for both operators and the C* developers.
>>>>>>>>> 
>>>>>>>>> I'm also fond of how Apache projects often vote both on the release
>>>> as
>>>>>> well
>>>>>>>>> as its stability flag: Alpha|Beta|GA (General Availability).
>>>>>>>>> https://httpd.apache.org/dev/release.html
>>>>>>>>> http://www.apache.org/legal/release-policy.html#release-types
>>>>>>>>> 
>>>>>>>>> Given the importance of The Database, i'd be keen to see attached
>>>> such
>>>>>>>>> community-agreed quality references. And going further, not just to
>>>> the
>>>>>>>>> releases but also to substantial new features (those yet to reach
>>>> GA).
>>>>>> Then
>>>>>>>>> the downloads page could provide a table something like
>>>>>>>>> https://paste.apache.org/FzrQ
>>>>>>>>> 
>>>>>>>>> It's just one idea to throw out there, and while it hijacks the
>>>> thread
>>>>>> a
>>>>>>>>> bit, it could even with just the quality tag on releases go a long
>>>> way
>>>>>> with
>>>>>>>>> user trust. Especially if we really are humble about it and use GA
>>>>>>>>> appropriately. For example I'm perfectly happy using a beta in
>>>>>> production
>>>>>>>>> if I see the community otherwise has good processes in place and
>>>>>> there's
>>>>>>>>> strong testing and staging resources to take advantage of. And as
>>>> Kurt
>>>>>> has
>>>>>>>>> implied many users are indeed smart and wise enough to know how to
>>>>>> safely
>>>>>>>>> test and cautiously use even alpha features in production.
>>>>>>>>> 
>>>>>>>>> Anyway, with or without the above idea, yaml flag names that don't
>>>>>>>>> use adjectives could address Kurt's concerns about pulling the rug
>>>> from
>>>>>>>>> under the feet of existing users. Such a flag is but a small
>>>>>> improvement
>>>>>>>>> suitable for a minor release (you must read the NEWS.txt before
>> even
>>>> a
>>>>>>>>> patch upgrade), and the documentation is only making explicit what
>>>>>> should
>>>>>>>>> have been all along. Users shouldn't feel that we're returning
>>>> features
>>>>>>>>> into "alpha|beta" mode when what we're actually doing is improving
>>>> the
>>>>>>>>> community's quality assurance documentation.
>>>>>>>>> 
>>>>>>>>> Mick
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> ------------------------------------------------------------
>> ---------
>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org
>>>>>>>> For additional commands, e-mail: dev-h...@cassandra.apache.org
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org
>>>>>> For additional commands, e-mail: dev-h...@cassandra.apache.org
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org
>>>> For additional commands, e-mail: dev-h...@cassandra.apache.org
>>>> 
>>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org 
>> <mailto:dev-unsubscr...@cassandra.apache.org>
>> For additional commands, e-mail: dev-h...@cassandra.apache.org 
>> <mailto:dev-h...@cassandra.apache.org>

Reply via email to