[ 
https://issues.apache.org/jira/browse/CASSANDRA-7642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14079280#comment-14079280
 ] 

Aleksey Yeschenko commented on CASSANDRA-7642:
----------------------------------------------

Even if it's not much work, it's still feature-creep, and for no good reason at 
that. It'd also be hypocritical to keep saying that it's stupid and yet include 
it in C*.

I'm not against keeping it in the drivers, for those who don't know better, but 
very strongly -1 on making it part of C*.

> Adaptive Consistency
> --------------------
>
>                 Key: CASSANDRA-7642
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7642
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Core
>            Reporter: Rustam Aliyev
>             Fix For: 3.0
>
>
> h4. Problem
> At minimum, application requires consistency level of X, which must be fault 
> tolerant CL. However, when there is no failure it would be advantageous to 
> use stronger consistency Y (Y>X).
> h4. Suggestion
> Application defines minimum (X) and maximum (Y) consistency levels. C* can 
> apply adaptive consistency logic to use Y whenever possible and downgrade to 
> X when failure occurs.
> Implementation should not negatively impact performance. Therefore, state has 
> to be maintained globally (not per request).
> h4. Example
> {{MIN_CL=LOCAL_QUORUM}}
> {{MAX_CL=EACH_QUORUM}}
> h4. Use Case
> Consider a case where user wants to maximize their uptime and consistency. 
> They designing a system using C* where transactions are read/written with 
> LOCAL_QUORUM and distributed across 2 DCs. Occasional inconsistencies between 
> DCs can be tolerated. R/W with LOCAL_QUORUM is satisfactory in most of the 
> cases.
> Application requires new transactions to be read back right after they were 
> generated. Write and read could be done through different DCs (no 
> stickiness). In some cases when user writes into DC1 and reads immediately 
> from DC2, replication delay may cause problems. Transaction won't show up on 
> read in DC2, user will retry and create duplicate transaction. Occasional 
> duplicates are fine and the goal is to minimize number of dups.
> Therefore, we want to perform writes with stronger consistency (EACH_QUORUM) 
> whenever possible without compromising on availability. Using adaptive 
> consistency they should be able to define:
>    {{Read CL = LOCAL_QUORUM}}
>    {{Write CL = ADAPTIVE (MIN:LOCAL_QUORUM, MAX:EACH_QUORUM)}}
> Similar scenario can be described for {{Write CL = ADAPTIVE (MIN:QUORUM, 
> MAX:ALL)}} case.
> h4. Criticism
> # This functionality can/should be implemented by user himself.
> bq. It will be hard for an average user to implement topology monitoring and 
> state machine. Moreover, this is a pattern which repeats.
> # Transparent downgrading violates the CL contract, and that contract 
> considered be just about the most important element of Cassandra's runtime 
> behavior.
> bq.Fully transparent downgrading without any contract is dangerous. However, 
> would it be problem if we specify explicitly only two discrete CL levels - 
> MIN_CL and MAX_CL?
> # If you have split brain DCs (partitioned in CAP), you have to sacrifice 
> either consistency or availability, and auto downgrading sacrifices the 
> consistency in dangerous ways if the application isn't designed to handle it. 
> And if the application is designed to handle it, then it should be able to 
> handle it in normal circumstances, not just degraded/extraordinary ones.
> bq. Agreed. Application should be designed for MIN_CL. In that case, MAX_CL 
> will not be causing much harm, only adding flexibility.
> # It might be a better idea to loudly downgrade, instead of silently 
> downgrading, meaning that the client code does an explicit retry with lower 
> consistency on failure and takes some other kind of action to attempt to 
> inform either users or operators of the problem. The silent part of the 
> downgrading which could be dangerous.
> bq. There are certainly cases where user should be informed when consistency 
> changes in order to perform custom action. For this purpose we could 
> allow/require user to register callback function which will be triggered when 
> consistency level changes. Best practices could be enforced by requiring 
> callback.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to