[
https://issues.apache.org/jira/browse/CASSANDRA-8273?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15266427#comment-15266427
]
Robert Stupp commented on CASSANDRA-8273:
-----------------------------------------
{{ALLOW FILTERING}} cannot provide _any_ consistency guarantee, since even
{{ONE}} could end up on a replica with stale data - but that's the expected
behavior for CL {{ONE}}.
I think the point that may confuse people, is that {{ALLOW FILTERING}} +
{{QUORUM}} doesn't really respect the CL.
Maybe it's worth to add a warning, if CL > {{ONE}} is used with {{ALLOW
FILTERING}}. WDYT?
With CL {{ONE}} + {{ALLOW FILTERING}} _and_ partition (or token) restriction,
it shouldn't make a (big) difference where the filtering takes place. But for
filtering queries w/ 2i (or no partition/token restriction) it could make a
huge difference.
Maybe we can use replica filtering for CL {{ONE}} and coordinator filtering
otherwise. OTOH, as you said, it makes the code path more complex.
(PS: Strike my last comment.)
> Allow filtering queries can return stale data
> ---------------------------------------------
>
> Key: CASSANDRA-8273
> URL: https://issues.apache.org/jira/browse/CASSANDRA-8273
> Project: Cassandra
> Issue Type: Bug
> Reporter: Sylvain Lebresne
>
> Data filtering is done replica side. That means that a single replica with
> stale data may make the whole query return that stale data.
> For instance, consider 3 replicas A, B and C, and the following situation:
> {noformat}
> CREATE TABLE test (k int PRIMARY KEY, v1 text, v2 int);
> CREATE INDEX ON test(v1);
> INSERT INTO test(k, v1, v2) VALUES (0, 'foo', 1);
> {noformat}
> with every replica up to date. Now, suppose that the following queries are
> done at {{QUORUM}}:
> {noformat}
> UPDATE test SET v2 = 2 WHERE k = 0;
> SELECT * FROM test WHERE v1 = 'foo' AND v2 = 1;
> {noformat}
> then, if A and B acknowledge the insert but C respond to the read before
> having applied the insert, then the now stale result will be returned. Let's
> note that this is a problem related to filtering, not 2ndary indexes.
> This issue share similarity with CASSANDRA-8272 but contrarily to that former
> issue, I'm not sure how to fix it. Obviously, moving the filtering to the
> coordinator would remove that problem, but doing so would, on top of not
> being trivial to implmenent, have serious performance impact since we can't
> know in advance how much data will be filtered and we may have to redo query
> to replica multiple times.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)