In PR5b6570be52we 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> (cherry picked from commit1e37781d86)
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; });
|
|
}
|
|
|
|
} |