From 6d875f1ec17f7fd9dcfae0fb28fe0686508248d7 Mon Sep 17 00:00:00 2001 From: Amnon Heiman Date: Sun, 23 Aug 2015 17:02:10 +0300 Subject: [PATCH] token_metadata: Add const when applicable This patch adds a const version for get_datacenter_endpoints and get_topology. It modified the token iterator to use a const version of token_metadata and it make first_token, first_token_index, tokens_end and ring_range to be a const method. Signed-off-by: Amnon Heiman --- locator/token_metadata.cc | 6 +++--- locator/token_metadata.hh | 24 +++++++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/locator/token_metadata.cc b/locator/token_metadata.cc index 01de4505e4..131287c719 100644 --- a/locator/token_metadata.cc +++ b/locator/token_metadata.cc @@ -110,7 +110,7 @@ void token_metadata::update_normal_tokens(std::unordered_map 0); auto it = std::lower_bound(_sorted_tokens.begin(), _sorted_tokens.end(), start); if (it == _sorted_tokens.end()) { @@ -120,7 +120,7 @@ size_t token_metadata::first_token_index(const token& start) { } } -const token& token_metadata::first_token(const token& start) { +const token& token_metadata::first_token(const token& start) const { return _sorted_tokens[first_token_index(start)]; } @@ -212,7 +212,7 @@ void token_metadata::add_bootstrap_token(token t, inet_address endpoint) { boost::iterator_range token_metadata::ring_range( const std::experimental::optional& start, - bool include_min) + bool include_min) const { auto r = ring_range(start ? start->value().token() : dht::minimum_token(), include_min); diff --git a/locator/token_metadata.hh b/locator/token_metadata.hh index 3fc5970ce1..19bd8ae851 100644 --- a/locator/token_metadata.hh +++ b/locator/token_metadata.hh @@ -68,6 +68,12 @@ public: return _dc_endpoints; } + const std::unordered_map>& + get_datacenter_endpoints() const { + return _dc_endpoints; + } + std::unordered_map>>& @@ -126,7 +132,7 @@ private: : _cur_it(it), _ring_pos(pos), _insert_min(false) {} public: - tokens_iterator(const token& start, token_metadata* token_metadata, bool include_min = false) + tokens_iterator(const token& start, const token_metadata* token_metadata, bool include_min = false) : _token_metadata(token_metadata) { _cur_it = _token_metadata->sorted_tokens().begin() + _token_metadata->first_token_index(start); _insert_min = include_min && *_token_metadata->sorted_tokens().begin() != dht::minimum_token(); @@ -180,7 +186,7 @@ private: bool _insert_min; bool _min = false; const token _min_token = dht::minimum_token(); - token_metadata* _token_metadata = nullptr; + const token_metadata* _token_metadata = nullptr; friend class token_metadata; }; @@ -192,8 +198,8 @@ public: void update_normal_token(token token, inet_address endpoint); void update_normal_tokens(std::unordered_set tokens, inet_address endpoint); void update_normal_tokens(std::unordered_map>& endpoint_tokens); - const token& first_token(const token& start); - size_t first_token_index(const token& start); + const token& first_token(const token& start) const; + size_t first_token_index(const token& start) const; std::experimental::optional get_endpoint(const token& token) const; std::vector get_tokens(const inet_address& addr) const; const std::map& get_token_to_endpoint() const { @@ -211,7 +217,7 @@ public: return _bootstrap_tokens; } - tokens_iterator tokens_end() { + tokens_iterator tokens_end() const { return tokens_iterator(sorted_tokens().end(), sorted_tokens().size()); } @@ -223,19 +229,23 @@ public: * * @return The requested range (see the description above) */ - auto ring_range(const token& start, bool include_min = false) { + auto ring_range(const token& start, bool include_min = false) const { auto begin = tokens_iterator(start, this, include_min); auto end = tokens_end(); return boost::make_iterator_range(begin, end); } boost::iterator_range ring_range( - const std::experimental::optional& start, bool include_min = false); + const std::experimental::optional& start, bool include_min = false) const; topology& get_topology() { return _topology; } + const topology& get_topology() const { + return _topology; + } + void debug_show(); #if 0 private static final Logger logger = LoggerFactory.getLogger(TokenMetadata.class);