This feature, when enabled, will modify how schema versions are calculated and stored. - In group 0 mode, schema versions are persisted by the group 0 command that performs the schema change, then reused by each node instead of being calculated as a digest (hash) by each node independently. - In RECOVERY mode or before Raft upgrade procedure finishes, when we perform a schema change, we revert to the old digest-based way, taking into account the possibility of having performed group0-mode schema changes (that used persistent versions). As we will see in future commits, this will be done by storing additional flags and tombstones in system tables. By "schema versions" we mean both the UUIDs returned from `schema::version()` and the "global" schema version (the one we gossip as `application_state::SCHEMA`). For now, in this commit, the feature is always disabled. Once all necessary code is setup in following commits, we will enable it together with Raft.
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
/*
|
|
* Copyright (C) 2019-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "enum_set.hh"
|
|
|
|
namespace db {
|
|
|
|
enum class schema_feature {
|
|
VIEW_VIRTUAL_COLUMNS,
|
|
|
|
// When set, the schema digest is calculated in a way such that it doesn't change after all
|
|
// tombstones in an empty partition expire.
|
|
// See https://github.com/scylladb/scylla/issues/4485
|
|
DIGEST_INSENSITIVE_TO_EXPIRY,
|
|
COMPUTED_COLUMNS,
|
|
CDC_OPTIONS,
|
|
PER_TABLE_PARTITIONERS,
|
|
SCYLLA_KEYSPACES,
|
|
SCYLLA_AGGREGATES,
|
|
|
|
// When enabled, schema_mutations::digest() will skip empty mutations (with only tombstones),
|
|
// so that the digest remains the same after schema tables are compacted.
|
|
TABLE_DIGEST_INSENSITIVE_TO_EXPIRY,
|
|
|
|
// When enabled we'll add a new column to the `system_schema.scylla_tables` table.
|
|
GROUP0_SCHEMA_VERSIONING,
|
|
};
|
|
|
|
using schema_features = enum_set<super_enum<schema_feature,
|
|
schema_feature::VIEW_VIRTUAL_COLUMNS,
|
|
schema_feature::DIGEST_INSENSITIVE_TO_EXPIRY,
|
|
schema_feature::COMPUTED_COLUMNS,
|
|
schema_feature::CDC_OPTIONS,
|
|
schema_feature::PER_TABLE_PARTITIONERS,
|
|
schema_feature::SCYLLA_KEYSPACES,
|
|
schema_feature::SCYLLA_AGGREGATES,
|
|
schema_feature::TABLE_DIGEST_INSENSITIVE_TO_EXPIRY,
|
|
schema_feature::GROUP0_SCHEMA_VERSIONING
|
|
>>;
|
|
|
|
}
|