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 <penberg@cloudius-systems.com>
This commit is contained in:
Pekka Enberg
2015-05-19 15:02:18 +03:00
parent cd35617855
commit 56d6fdacfe
4 changed files with 8 additions and 12 deletions

View File

@@ -433,7 +433,9 @@ create_keyspace(distributed<database>& 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<sstring, sstring> 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

View File

@@ -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);

View File

@@ -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);
});
}

View File

@@ -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<sstring, sstring>{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::string>(std::move(schema_id));