cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Aleksey Yeschenko (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-13595) Short read protection doesn't work at the end of a partition
Date Wed, 13 Sep 2017 11:17:00 GMT

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

Aleksey Yeschenko commented on CASSANDRA-13595:
-----------------------------------------------

bq. The idea is to extend current ShortReadProtection function with across-partition support.

Correct. Short read protection hasn't been implemented properly for range reads, which causes
correctness issues in particular with paging.

I'm currently addressing the few outstanding issues with single partition short reads on 3.0
and above (CASSANDRA-13794, CASSANDRA-12872). This would be an extension of that work, I guess
- or at least there is strong overlap. Feel free to give it a go though - however it may or
may not have to be altered afterwards to harmonise both implementations.

> Short read protection doesn't work at the end of a partition
> ------------------------------------------------------------
>
>                 Key: CASSANDRA-13595
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13595
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Coordination
>            Reporter: Andrés de la Peña
>            Assignee: ZhaoYang
>              Labels: Correctness
>
> It seems that short read protection doesn't work when the short read is done at the end
of a partition in a range query. The final assertion of this dtest fails:
> {code}
> def short_read_partitions_delete_test(self):
>         cluster = self.cluster
>         cluster.set_configuration_options(values={'hinted_handoff_enabled': False})
>         cluster.set_batch_commitlog(enabled=True)
>         cluster.populate(2).start(wait_other_notice=True)
>         node1, node2 = self.cluster.nodelist()
>         session = self.patient_cql_connection(node1)
>         create_ks(session, 'ks', 2)
>         session.execute("CREATE TABLE t (k int, c int, PRIMARY KEY(k, c)) WITH read_repair_chance
= 0.0")
>         # we write 1 and 2 in a partition: all nodes get it.
>         session.execute(SimpleStatement("INSERT INTO t (k, c) VALUES (1, 1)", consistency_level=ConsistencyLevel.ALL))
>         session.execute(SimpleStatement("INSERT INTO t (k, c) VALUES (2, 1)", consistency_level=ConsistencyLevel.ALL))
>         # we delete partition 1: only node 1 gets it.
>         node2.flush()
>         node2.stop(wait_other_notice=True)
>         session = self.patient_cql_connection(node1, 'ks', consistency_level=ConsistencyLevel.ONE)
>         session.execute(SimpleStatement("DELETE FROM t WHERE k = 1"))
>         node2.start(wait_other_notice=True)
>         # we delete partition 2: only node 2 gets it.
>         node1.flush()
>         node1.stop(wait_other_notice=True)
>         session = self.patient_cql_connection(node2, 'ks', consistency_level=ConsistencyLevel.ONE)
>         session.execute(SimpleStatement("DELETE FROM t WHERE k = 2"))
>         node1.start(wait_other_notice=True)
>         # read from both nodes
>         session = self.patient_cql_connection(node1, 'ks', consistency_level=ConsistencyLevel.ALL)
>         assert_none(session, "SELECT * FROM t LIMIT 1")
> {code}
> However, the dtest passes if we remove the {{LIMIT 1}}.
> Short read protection [uses a {{SinglePartitionReadCommand}}|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/service/DataResolver.java#L484],
maybe it should use a {{PartitionRangeReadCommand}} instead?



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


Mime
View raw message