cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sam Overton (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CASSANDRA-9966) batched CAS statements are not serializable
Date Mon, 03 Aug 2015 18:58:06 GMT
Sam Overton created CASSANDRA-9966:
--------------------------------------

             Summary: batched CAS statements are not serializable
                 Key: CASSANDRA-9966
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9966
             Project: Cassandra
          Issue Type: Bug
          Components: Core
            Reporter: Sam Overton
            Priority: Critical


It is possible to batch CAS statements such that their outcome is different to the outcome
were they executed sequentially outside of a batch.

eg.

a | b | c
a | 1 | 1

BEGIN BATCH
UPDATE foo SET b=2 WHERE a='a' iF c=1
UPDATE foo SET c=2 WHERE a='a' IF b=1
APPLY BATCH

results in 

a | b | c
a | 2 | 2

If these statements were not batched, the outcome would be 

UPDATE foo SET b=2 WHERE a='a' iF c=1

a | b | c
a | 2 | 1

UPDATE foo SET c=2 WHERE a='a' IF b=1
applied=false (pre-condition b=1 not met)

Cassandra already checks for incompatible preconditions within a batch (eg one statement with
IF c=1 and another statement with IF c=2). It should also check for mutations to columns in
one statement that affect the pre-conditions of another statement, or it should evaluate the
statement pre-conditions sequentially after applying the mutations of the previous statement
to an in-memory model of the partition.

For backwards compatibility this would have to be a new "strict" batch mode, eg.
BEGIN STRICT BATCH



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message