diff --git a/db/system_keyspace.cc b/db/system_keyspace.cc index 32d9a0f6e0..2821fdc7e9 100644 --- a/db/system_keyspace.cc +++ b/db/system_keyspace.cc @@ -599,19 +599,24 @@ future> update_local_tokens( } future>> load_tokens() { - // FIXME -#if 0 - SetMultimap tokenMap = HashMultimap.create(); - for (UntypedResultSet.Row row : executeInternal("SELECT peer, tokens FROM system." + PEERS)) - { - InetAddress peer = row.getInetAddress("peer"); - if (row.has("tokens")) - tokenMap.putAll(peer, deserializeTokens(row.getSet("tokens", UTF8Type.instance))); - } + sstring req = "SELECT peer, tokens FROM system.%s"; + return execute_cql(req, PEERS).then([] (::shared_ptr msg) { + auto ret = make_lw_shared>>(); + return do_for_each(*msg, [ret] (auto& row) { + auto peer = gms::inet_address(row.template get_as("peer")); + if (row.has("tokens")) { + auto blob = row.get_blob("tokens"); + auto cdef = peers()->get_column_definition("tokens"); + auto deserialized = cdef->type->deserialize(blob); + auto tokens = boost::any_cast(deserialized); - return tokenMap; -#endif - return make_ready_future>>(); + ret->emplace(peer, decode_tokens(tokens)); + } + return make_ready_future<>(); + }).then([ret] () mutable { + return std::move(*ret); + }); + }); } future> load_host_ids() {