In PR 5b6570be52 we introduced the config option
`sstable_compression_user_table_options` to allow adjusting the default
compression settings for user tables. However, the new option was hooked
into the CQL layer and applied only to CQL base tables, not to the whole
spectrum of user tables: CQL auxiliary tables (materialized views,
secondary indexes, CDC log tables), Alternator base tables, Alternator
auxiliary tables (GSIs, LSIs, Streams).
Fix this by moving the logic into the `schema_builder` via a schema
initializer. This ensures that the default compression settings are
applied uniformly regardless of how the table is created, while also
keeping the logic in a central place.
Register the initializer at startup in all executables where schemas are
being used (`scylla_main()`, `scylla_sstable_main()`, `cql_test_env`).
Finally, remove the ad-hoc logic from `create_table_statement`
(redundant as of this patch), remove the xfail markers from the relevant
tests and adjust `test_describe_cdc_log_table_create_statement` to
expect LZ4WithDicts as the default compressor.
Fixes #26914.
Signed-off-by: Nikos Dragazis <nikolaos.dragazis@scylladb.com>
48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
/*
|
|
* Copyright (C) 2026-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
|
|
#include "db/config.hh"
|
|
#include "db/extensions.hh"
|
|
#include "schema/schema.hh"
|
|
#include "schema/schema_builder.hh"
|
|
|
|
bool is_internal_keyspace(std::string_view name);
|
|
|
|
namespace {
|
|
|
|
/**
|
|
* Registers a schema initializer that applies default compression parameters
|
|
* to user and system tables.
|
|
*
|
|
* System tables default to the LZ4 compressor.
|
|
* User tables default to the configuration option: `sstable_compression_user_table_options`.
|
|
*
|
|
* User tables are all tables not belonging to internal keyspaces, namely
|
|
* CQL base tables, materialized views, secondary indexes, CDC log tables,
|
|
* Alternator base tables, Alternator GSIs, Alternator LSIs and Alternator Streams.
|
|
*/
|
|
inline void register_compression_initializer(db::config& cfg, std::function<bool()> dicts_feature_enabled_fn) {
|
|
schema_builder::register_schema_initializer([&cfg, dicts_feature_enabled_fn = std::move(dicts_feature_enabled_fn)](schema_builder& builder) {
|
|
|
|
if (is_internal_keyspace(builder.ks_name()) || cfg.extensions().is_extension_internal_keyspace(builder.ks_name())) {
|
|
builder.set_compressor_params(compression_parameters::algorithm::lz4);
|
|
} else {
|
|
builder.set_compressor_params(cfg.get_sstable_compression_user_table_options(dicts_feature_enabled_fn()));
|
|
}
|
|
});
|
|
}
|
|
|
|
inline void register_compression_initializer(db::config& cfg, bool dicts_feature_enabled) {
|
|
register_compression_initializer(cfg, [dicts_feature_enabled] { return dicts_feature_enabled; });
|
|
}
|
|
|
|
} |