Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-9424 Schema Improvements
  3. CASSANDRA-9425

Make node-local schema fully immutable

    XMLWordPrintableJSON

    Details

    • Type: Sub-task
    • Status: Resolved
    • Priority: Normal
    • Resolution: Fixed
    • Fix Version/s: 4.0, 4.0-alpha1
    • Component/s: None
    • Labels:
      None

      Description

      The way we handle schema changes currently is inherently racy.

      All of our SchemaAlteringStatement s perform validation on a schema state that's won't necessarily be there when the statement gets executed and mutates schema.

      We should make all the *Metadata classes (KeyspaceMetadata, TableMetadata, ColumnMetadata, immutable, and local schema persistently snapshottable, with a single top-level AtomicReference to the current snapshot. Have DDL statements perform validation and transformation on the same state.

      In pseudo-code, think

      public interface DDLStatement
      {
          /**
           * Validates that the DDL statement can be applied to the provided schema snapshot.
           *
           * @param schema snapshot of schema before executing CREATE KEYSPACE
           */
          void validate(SchemaSnapshot schema);
       
          /**
           * Applies the DDL statement to the provided schema snapshot.
           * Implies that validate() has already been called on the provided snapshot.
           *
           * @param schema snapshot of schema before executing the statement
           * @return snapshot of schema as it would be after executing the statement
           */
          SchemaSnapshot transform(SchemaSnapshot schema);
      }
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                aleksey Aleksey Yeschenko
                Reporter:
                aleksey Aleksey Yeschenko
                Authors:
                Aleksey Yeschenko
                Reviewers:
                Sylvain Lebresne
              • Votes:
                0 Vote for this issue
                Watchers:
                13 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: