From 3ea91504ba677ce54cfe7bcf9a05f7e8a8f370f7 Mon Sep 17 00:00:00 2001 From: Asias He Date: Tue, 11 Aug 2015 10:41:11 +0800 Subject: [PATCH] storage_service: Enable get_saved_tokens and get_initial_tokens --- service/storage_service.cc | 48 ++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/service/storage_service.cc b/service/storage_service.cc index 487dce6c15..a458e00368 100644 --- a/service/storage_service.cc +++ b/service/storage_service.cc @@ -58,6 +58,11 @@ std::experimental::optional get_replace_address() { return {}; } +std::unordered_set get_initial_tokens() { + // FIXME: DatabaseDescriptor.getInitialTokens(); + return std::unordered_set(); +} + bool get_property_join_ring() { // FIXME: Boolean.parseBoolean(System.getProperty("cassandra.join_ring", "true"))) return true; @@ -257,37 +262,30 @@ future<> storage_service::join_token_ring(int delay) { // assert(!_is_bootstrap_mode); // bootstrap will block until finished } else { size_t num_tokens = _db.local().get_config().num_tokens(); - _bootstrap_tokens = boot_strapper::get_random_tokens(_token_metadata, num_tokens); - logger.info("Generated random tokens. tokens are {}", _bootstrap_tokens); -#if 0 - _bootstrap_tokens = SystemKeyspace.getSavedTokens(); - if (_bootstrap_tokens.isEmpty()) - { - Collection initialTokens = DatabaseDescriptor.getInitialTokens(); - if (initialTokens.size() < 1) - { - _bootstrap_tokens = BootStrapper.getRandomTokens(_token_metadata, DatabaseDescriptor.getNumTokens()); - if (DatabaseDescriptor.getNumTokens() == 1) + _bootstrap_tokens = db::system_keyspace::get_saved_tokens(); + if (_bootstrap_tokens.empty()) { + auto initial_tokens = get_initial_tokens(); + if (initial_tokens.size() < 1) { + _bootstrap_tokens = boot_strapper::get_random_tokens(_token_metadata, num_tokens); + if (num_tokens == 1) { logger.warn("Generated random token {}. Random tokens will result in an unbalanced ring; see http://wiki.apache.org/cassandra/Operations", _bootstrap_tokens); - else + } else { logger.info("Generated random tokens. tokens are {}", _bootstrap_tokens); - } - else - { - _bootstrap_tokens = new ArrayList(initialTokens.size()); - for (String token : initialTokens) - _bootstrap_tokens.add(getPartitioner().getTokenFactory().fromString(token)); + } + } else { + for (auto token : initial_tokens) { + // FIXME: token from string + // _bootstrap_tokens.insert(getPartitioner().getTokenFactory().fromString(token)); + } logger.info("Saved tokens not found. Using configuration value: {}", _bootstrap_tokens); } - } - else - { - if (_bootstrap_tokens.size() != DatabaseDescriptor.getNumTokens()) - throw new ConfigurationException("Cannot change the number of tokens from " + _bootstrap_tokens.size() + " to " + DatabaseDescriptor.getNumTokens()); - else + } else { + if (_bootstrap_tokens.size() != num_tokens) { + throw std::runtime_error(sprint("Cannot change the number of tokens from %ld to %ld", _bootstrap_tokens.size(), num_tokens)); + } else { logger.info("Using saved tokens {}", _bootstrap_tokens); + } } -#endif } set_tokens(_bootstrap_tokens).get(); #if 0