system_keyspace: prepare forward-declared members

In anticipation of making system_keyspace a class instead of a
namespace, rename any member that is currently forward-declared,
since one can't forward-declare a class member. Each member
is taken out of the system_keyspace namespace and gains a
system_keyspace prefix. Aliases are added to reduce code churn.

The result isn't lovely, but can be adjusted later.
This commit is contained in:
Avi Kivity
2021-09-13 14:32:42 +03:00
parent c6ce81d6a0
commit 115d6d8d4c
11 changed files with 64 additions and 48 deletions

View File

@@ -881,7 +881,7 @@ void set_column_family(http_context& ctx, routes& r) {
auto ks_cf = parse_fully_qualified_cf_name(req->param["name"]);
auto&& ks = std::get<0>(ks_cf);
auto&& cf_name = std::get<1>(ks_cf);
return db::system_keyspace::load_view_build_progress().then([ks, cf_name, &ctx](const std::vector<db::system_keyspace::view_build_progress>& vb) mutable {
return db::system_keyspace::load_view_build_progress().then([ks, cf_name, &ctx](const std::vector<db::system_keyspace_view_build_progress>& vb) mutable {
std::set<sstring> vp;
for (auto b : vb) {
if (b.view.first == ks) {

View File

@@ -48,7 +48,7 @@ future<> notify_new_client(client_data cd) {
// FIXME: consider prepared statement
const static sstring req
= format("INSERT INTO system.{} (address, port, client_type, connection_stage, shard_id, protocol_version, username) "
"VALUES (?, ?, ?, ?, ?, ?, ?);", db::system_keyspace::CLIENTS);
"VALUES (?, ?, ?, ?, ?, ?, ?);", db::system_keyspace_CLIENTS);
return db::qctx->execute_cql(req,
std::move(cd.ip), cd.port, to_string(cd.ct), to_string(cd.connection_stage), cd.shard_id,
@@ -60,7 +60,7 @@ future<> notify_disconnected_client(net::inet_address addr, int port, client_typ
// FIXME: consider prepared statement
const static sstring req
= format("DELETE FROM system.{} where address=? AND port=? AND client_type=?;",
db::system_keyspace::CLIENTS);
db::system_keyspace_CLIENTS);
return db::qctx->execute_cql(req, std::move(addr), port, to_string(ct)).discard_result();
}
@@ -69,7 +69,7 @@ future<> clear_clientlist() {
return db_local.truncate(
db_local.find_keyspace(db::system_keyspace_name()),
db_local.find_column_family(db::system_keyspace_name(),
db::system_keyspace::CLIENTS),
db::system_keyspace_CLIENTS),
[] { return make_ready_future<db_clock::time_point>(db_clock::now()); },
false /* with_snapshot */);
}

View File

@@ -28,8 +28,8 @@
#include <optional>
namespace db::system_keyspace {
extern const char *const CLIENTS;
namespace db {
extern const char *const system_keyspace_CLIENTS;
}
enum class client_type {
@@ -99,7 +99,7 @@ struct notify_client_change {
future<> operator()(net::inet_address addr, int port, client_type ct, T&& value) {
const static sstring req
= format("UPDATE system.{} SET {}=? WHERE address=? AND port=? AND client_type=?;",
db::system_keyspace::CLIENTS, column_literal<column_enum_val>);
db::system_keyspace_CLIENTS, column_literal<column_enum_val>);
return db::qctx->execute_cql(req, std::forward<T>(value), std::move(addr), port, to_string(ct)).discard_result();
}

View File

@@ -123,9 +123,8 @@ class rp_handle;
class data_listeners;
class large_data_handler;
namespace system_keyspace {
future<> make(database& db, service::storage_service& ss);
}
future<> system_keyspace_make(database& db, service::storage_service& ss);
}
namespace locator {
@@ -1354,7 +1353,7 @@ public:
private:
using system_keyspace = bool_class<struct system_keyspace_tag>;
void create_in_memory_keyspace(const lw_shared_ptr<keyspace_metadata>& ksm, system_keyspace system);
friend future<> db::system_keyspace::make(database& db, service::storage_service& ss);
friend future<> db::system_keyspace_make(database& db, service::storage_service& ss);
void setup_metrics();
void setup_scylla_memory_diagnostics_producer();

View File

@@ -101,7 +101,7 @@
#include "cql3/untyped_result_set.hh"
#include "cql3/functions/user_aggregate.hh"
using namespace db::system_keyspace;
using namespace db;
using namespace std::chrono_literals;
@@ -236,12 +236,12 @@ future<> save_system_schema(cql3::query_processor& qp, const sstring & ksname) {
// delete old, possibly obsolete entries in schema tables
co_await parallel_for_each(all_table_names(schema_features::full()), [ksm] (sstring cf) -> future<> {
auto deletion_timestamp = schema_creation_timestamp() - 1;
auto deletion_timestamp = system_keyspace::schema_creation_timestamp() - 1;
co_await qctx->execute_cql(format("DELETE FROM {}.{} USING TIMESTAMP {} WHERE keyspace_name = ?", NAME, cf,
deletion_timestamp), ksm->name()).discard_result();
});
{
auto mvec = make_create_keyspace_mutations(ksm, schema_creation_timestamp(), true);
auto mvec = make_create_keyspace_mutations(ksm, system_keyspace::schema_creation_timestamp(), true);
co_await qp.proxy().mutate_locally(std::move(mvec), tracing::trace_state_ptr());
}
}
@@ -275,7 +275,7 @@ schema_ptr keyspaces() {
"keyspace definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -317,7 +317,7 @@ schema_ptr tables() {
"table definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -346,7 +346,7 @@ schema_ptr scylla_tables(schema_features features) {
sb.with_column("partitioner", utf8_type);
offset += 2;
}
sb.with_version(generate_schema_version(id, offset));
sb.with_version(system_keyspace::generate_schema_version(id, offset));
sb.with_null_sharder();
return sb.build();
};
@@ -388,7 +388,7 @@ static schema_ptr columns_schema(const char* columns_table_name) {
"column definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}
@@ -424,7 +424,7 @@ static schema_ptr computed_columns_schema(const char* columns_table_name) {
"computed columns"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}
@@ -454,7 +454,7 @@ schema_ptr dropped_columns() {
"dropped column registry"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -480,7 +480,7 @@ schema_ptr triggers() {
"trigger definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -525,7 +525,7 @@ schema_ptr views() {
"view definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -552,7 +552,7 @@ schema_ptr indexes() {
"secondary index definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -579,7 +579,7 @@ schema_ptr types() {
"user defined type definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -609,7 +609,7 @@ schema_ptr functions() {
"user defined function definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -639,7 +639,7 @@ schema_ptr aggregates() {
"user defined aggregate definitions"
));
builder.set_gc_grace_seconds(schema_gc_grace);
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build();
}();
@@ -659,7 +659,7 @@ schema_ptr scylla_table_schema_history() {
builder.with_column("type", utf8_type);
builder.set_comment("Scylla specific table to store a history of column mappings "
"for each table schema version upon an CREATE TABLE/ALTER TABLE operations");
builder.with_version(generate_schema_version(builder.uuid()));
builder.with_version(system_keyspace::generate_schema_version(builder.uuid()));
builder.with_null_sharder();
return builder.build(schema_builder::compact_storage::no);
}();

View File

@@ -1371,6 +1371,8 @@ future<> setup(distributed<database>& db,
});
}
}
struct truncation_record {
static constexpr uint32_t current_magic = 0x53435452; // 'S' 'C' 'T' 'R'
@@ -1378,7 +1380,7 @@ struct truncation_record {
std::vector<db::replay_position> positions;
db_clock::time_point time_stamp;
};
}
}
#include "idl/replay_position.dist.hh"
@@ -2021,13 +2023,15 @@ static bool maybe_write_in_user_memory(schema_ptr s, database& db) {
|| s == v3::scylla_views_builds_in_progress();
}
future<> make(database& db, service::storage_service& ss) {
register_virtual_tables(ss);
}
future<> system_keyspace_make(database& db, service::storage_service& ss) {
system_keyspace::register_virtual_tables(ss);
auto& db_config = db.get_config();
auto enable_cache = db_config.enable_cache();
bool durable = db_config.data_file_directories().size() > 0;
for (auto&& table : all_tables(db_config)) {
for (auto&& table : system_keyspace::all_tables(db_config)) {
auto ks_name = table->ks_name();
if (!db.has_keyspace(ks_name)) {
auto ksm = make_lw_shared<keyspace_metadata>(ks_name,
@@ -2039,7 +2043,7 @@ future<> make(database& db, service::storage_service& ss) {
}
auto& ks = db.find_keyspace(ks_name);
auto cfg = ks.make_column_family_config(*table, db);
if (maybe_write_in_user_memory(table, db)) {
if (system_keyspace::maybe_write_in_user_memory(table, db)) {
cfg.dirty_memory_manager = &db._dirty_memory_manager;
} else {
cfg.memtable_scheduling_group = default_scheduling_group();
@@ -2048,7 +2052,13 @@ future<> make(database& db, service::storage_service& ss) {
db.add_column_family(ks, table, std::move(cfg));
}
install_virtual_readers(db);
system_keyspace::install_virtual_readers(db);
}
namespace system_keyspace {
future<> make(database& db, service::storage_service& ss) {
return system_keyspace_make(db, ss);
}
future<utils::UUID> get_local_host_id() {
@@ -2419,4 +2429,6 @@ sstring system_keyspace_name() {
return system_keyspace::NAME;
}
const char *const system_keyspace_CLIENTS = system_keyspace::CLIENTS;
} // namespace db

View File

@@ -51,6 +51,7 @@
#include "db_clock.hh"
#include "db/commitlog/replay_position.hh"
#include "mutation_query.hh"
#include "system_keyspace_view_types.hh"
#include <map>
#include <seastar/core/distributed.hh>
#include "cdc/generation_id.hh"
@@ -169,8 +170,8 @@ struct range_estimates {
int64_t mean_partition_size;
};
using view_name = std::pair<sstring, sstring>;
struct view_build_progress;
using view_name = system_keyspace_view_name;
using view_build_progress = system_keyspace_view_build_progress;
extern schema_ptr hints();
extern schema_ptr batchlog();
@@ -362,4 +363,8 @@ future<bool> cdc_is_rewritten();
future<> cdc_set_rewritten(std::optional<cdc::generation_id_v1>);
} // namespace system_keyspace
future<> system_keyspace_make(database& db, service::storage_service& ss);
extern const char *const system_keyspace_CLIENTS;
} // namespace db

View File

@@ -34,12 +34,12 @@ class token;
}
namespace db::system_keyspace {
namespace db {
using view_name = std::pair<sstring, sstring>;
using system_keyspace_view_name = std::pair<sstring, sstring>;
struct view_build_progress {
view_name view;
struct system_keyspace_view_build_progress {
system_keyspace_view_name view;
dht::token first_token;
std::optional<dht::token> next_token;
shard_id cpu_id;

View File

@@ -1610,8 +1610,8 @@ void view_builder::reshard(
void view_builder::setup_shard_build_step(
view_builder_init_state& vbi,
std::vector<system_keyspace::view_name> built,
std::vector<system_keyspace::view_build_progress> in_progress) {
std::vector<system_keyspace_view_name> built,
std::vector<system_keyspace_view_build_progress> in_progress) {
// Shard 0 makes cleanup changes to the system tables, but none that could conflict
// with the other shards; everyone is thus able to proceed independently.
auto base_table_exists = [this] (const view_ptr& view) {
@@ -1625,7 +1625,7 @@ void view_builder::setup_shard_build_step(
return false;
}
};
auto maybe_fetch_view = [&, this] (system_keyspace::view_name& name) {
auto maybe_fetch_view = [&, this] (system_keyspace_view_name& name) {
try {
auto s = _db.find_schema(name.first, name.second);
if (s->is_view()) {

View File

@@ -46,10 +46,10 @@ class system_distributed_keyspace;
}
namespace db::system_keyspace {
namespace db {
using view_name = std::pair<sstring, sstring>;
class view_build_progress;
using system_keyspace_view_name = std::pair<sstring, sstring>;
class system_keyspace_view_build_progress;
}
@@ -227,7 +227,7 @@ private:
future<> initialize_reader_at_current_token(build_step&);
void load_view_status(view_build_status, std::unordered_set<utils::UUID>&);
void reshard(std::vector<std::vector<view_build_status>>, std::unordered_set<utils::UUID>&);
void setup_shard_build_step(view_builder_init_state& vbi, std::vector<system_keyspace::view_name>, std::vector<system_keyspace::view_build_progress>);
void setup_shard_build_step(view_builder_init_state& vbi, std::vector<system_keyspace_view_name>, std::vector<system_keyspace_view_build_progress>);
future<> calculate_shard_build_step(view_builder_init_state& vbi);
future<> add_new_view(view_ptr, build_step&);
future<> do_build_step();

View File

@@ -20,11 +20,11 @@
*/
namespace db {
namespace system_keyspace {
struct truncation_record {
uint32_t magic;
std::vector<db::replay_position> positions;
db_clock::time_point time_stamp;
};
}
}