Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-9966

Option to apply statements within a batch sequentially

Agile BoardAttach filesAttach ScreenshotBulk Copy AttachmentsBulk Move AttachmentsAdd voteVotersWatch issueWatchersCreate sub-taskConvert to sub-taskMoveLinkCloneLabelsUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    Description

      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

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned Assign to me
            soverton Sam Overton

            Dates

              Created:
              Updated:

              Slack

                Issue deployment