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

CEP-15 (Accord): When starting a transaction in a table where Accord is not enabled, should fail fast rather than fail with lack of ranges

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Normal
    • Resolution: Fixed
    • NA
    • Accord
    • None

    Description

      Reported in Slack: https://the-asf.slack.com/archives/C0459N9R5C6/p1712831271287869

      The “accord_demo.txt” has the following

      ccm create accord-cql-poc -n 3
      ccm start
      
      bin/cqlsh -e "create keyspace ks with replication={'class':'SimpleStrategy', 'replication_factor':3};"
      bin/cqlsh -e "create table ks.tbl1 (k int primary key, v int);"
      bin/cqlsh -e "create table ks.tbl2 (k int primary key, v int);"
      
      bin/nodetool -h 0000:0000:0000:0000:0000:ffff:7f00:0001 -p 7100 createepochunsafe
      bin/nodetool -h 0000:0000:0000:0000:0000:ffff:7f00:0001 -p 7200 createepochunsafe
      bin/nodetool -h 0000:0000:0000:0000:0000:ffff:7f00:0001 -p 7300 createepochunsafe
      
      BEGIN TRANSACTION
        LET row1 = (SELECT * FROM ks.tbl1 WHERE k = 1);
        SELECT row1.v;
        IF row1 IS NULL THEN
          INSERT INTO ks.tbl1 (k, v) VALUES (1, 2);
        END IF
      COMMIT TRANSACTION;
      

      If you run that it fails in an unclear way

      cqlsh> BEGIN TRANSACTION
         ...   LET row1 = (SELECT * FROM ks.tbl1 WHERE k = 1);
         ...   SELECT row1.v;
         ...   IF row1 IS NULL THEN
         ...     INSERT INTO ks.tbl1 (k, v) VALUES (1, 2);
         ...   END IF
         ... COMMIT TRANSACTION;
      NoHostAvailable: ('Unable to complete the operation against any hosts', {<Host: 127.0.0.1:9042 datacenter1>: <Error from server: code=0000 [Server error] message="java.lang.IllegalStateException: Unable to select a HomeKey as the topology does not have any ranges for epoch 17">})
      

      The issue is that the table was not marked as an Accord table; aka missing

      WITH transactional_mode='full'
      

      The demo should be updated to show this, but the error message should also be improved. We validate that the table exists but now that the metadata is required we should also enforce this in CQL validation

      Attachments

        Issue Links

          Activity

            People

              shiraishi Youki Shiraishi
              dcapwell David Capwell
              Youki Shiraishi
              Caleb Rackliffe, David Capwell
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1.5h
                  1.5h