From 56d6fdacfe6d8f0d2504e2a4a58feba36120e522 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Tue, 19 May 2015 15:02:18 +0300 Subject: [PATCH] database: Simplify replication strategy initialization Initialize replication strategy when keyspace is being created now that we have access to keyspace_metadata. Signed-off-by: Pekka Enberg --- database.cc | 10 +++++++--- database.hh | 2 +- tests/urchin/cql_test_env.cc | 1 - thrift/handler.cc | 7 ------- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/database.cc b/database.cc index ae2124b099..2a8f5203da 100644 --- a/database.cc +++ b/database.cc @@ -433,7 +433,9 @@ create_keyspace(distributed& db, const keyspace_metadata& ksm) { return make_directory(db.local()._cfg->data_file_directories() + "/" + ksm.name()).then([&ksm, &db] { return db.invoke_on_all([&ksm] (database& db) { auto cfg = db.make_keyspace_config(ksm); - db.add_keyspace(ksm.name(), keyspace(cfg)); + keyspace ks(cfg); + ks.create_replication_strategy(ksm); + db.add_keyspace(ksm.name(), std::move(ks)); }); }); // FIXME: rollback on error, or keyspace directory remains on disk, poisoning @@ -530,7 +532,7 @@ const column_family& database::find_column_family(const utils::UUID& uuid) const } void -keyspace::create_replication_strategy(keyspace_metadata& ksm) { +keyspace::create_replication_strategy(const keyspace_metadata& ksm) { static thread_local locator::token_metadata tm; static locator::simple_snitch snitch; static std::unordered_map options = {{"replication_factor", "3"}}; @@ -593,7 +595,9 @@ database::find_or_create_keyspace(const keyspace_metadata& ksm) { if (i != _keyspaces.end()) { return i->second; } - return _keyspaces.emplace(ksm.name(), keyspace(make_keyspace_config(ksm))).first->second; + keyspace ks(make_keyspace_config(ksm)); + ks.create_replication_strategy(ksm); + return _keyspaces.emplace(ksm.name(), std::move(ks)).first->second; } void diff --git a/database.hh b/database.hh index 70be40724b..e09a93b414 100644 --- a/database.hh +++ b/database.hh @@ -199,7 +199,7 @@ private: public: explicit keyspace(config cfg) : _config(std::move(cfg)) {} user_types_metadata _user_types; - void create_replication_strategy(keyspace_metadata& ksm); + void create_replication_strategy(const keyspace_metadata& ksm); locator::abstract_replication_strategy& get_replication_strategy(); column_family::config make_column_family_config(const schema& s) const; future<> make_directory_for_column_family(const sstring& name, utils::UUID uuid); diff --git a/tests/urchin/cql_test_env.cc b/tests/urchin/cql_test_env.cc index 4746c7596c..0e0cf68dc0 100644 --- a/tests/urchin/cql_test_env.cc +++ b/tests/urchin/cql_test_env.cc @@ -100,7 +100,6 @@ public: auto& ks = db.find_or_create_keyspace(ksm); auto cfg = ks.make_column_family_config(*cf_schema); db.add_column_family(column_family(std::move(cf_schema), std::move(cfg))); - ks.create_replication_strategy(ksm); }); } diff --git a/thrift/handler.cc b/thrift/handler.cc index 828055e7b2..d38572e333 100644 --- a/thrift/handler.cc +++ b/thrift/handler.cc @@ -468,13 +468,6 @@ public: db.add_column_family(std::move(cf)); cf_defs.push_back(s); } - keyspace_metadata ksm(to_sstring(ks_def.name), - to_sstring(ks_def.strategy_class), - std::unordered_map{ks_def.strategy_options.begin(), ks_def.strategy_options.end()}, - ks_def.durable_writes, - cf_defs); - auto& ks = db.find_keyspace(ks_def.name); - ks.create_replication_strategy(ksm); }); }).then([schema_id = std::move(schema_id)] { return make_ready_future(std::move(schema_id));