diff --git a/locator/snitch_base.hh b/locator/snitch_base.hh index dfbe36d57b..4147be65ef 100644 --- a/locator/snitch_base.hh +++ b/locator/snitch_base.hh @@ -15,6 +15,7 @@ #include #include +#include "locator/types.hh" #include "gms/inet_address.hh" #include "inet_address_vectors.hh" #include "gms/versioned_value.hh" @@ -70,6 +71,13 @@ public: */ virtual sstring get_datacenter() const = 0; + locator::endpoint_dc_rack get_location() const { + return locator::endpoint_dc_rack{ + .dc = get_datacenter(), + .rack = get_rack(), + }; + } + /** * returns whatever info snitch wants to gossip */ diff --git a/main.cc b/main.cc index bb23bf9dfb..9b5d2f1004 100644 --- a/main.cc +++ b/main.cc @@ -852,7 +852,7 @@ To start the scylla server proper, simply invoke as: scylla server (or just scyl supervisor::notify("starting tokens manager"); locator::token_metadata::config tm_cfg; tm_cfg.topo_cfg.this_endpoint = utils::fb_utilities::get_broadcast_address(); - tm_cfg.topo_cfg.local_dc_rack = { snitch.local()->get_datacenter(), snitch.local()->get_rack() }; + tm_cfg.topo_cfg.local_dc_rack = snitch.local()->get_location(); if (snitch.local()->get_name() == "org.apache.cassandra.locator.SimpleSnitch") { // // Simple snitch wants sort_by_proximity() not to reorder nodes anyhow diff --git a/service/storage_service.cc b/service/storage_service.cc index 5c66aea211..7df0f2f888 100644 --- a/service/storage_service.cc +++ b/service/storage_service.cc @@ -5653,12 +5653,7 @@ future<> storage_service::snitch_reconfigured() { auto& snitch = _snitch.local(); co_await mutate_token_metadata([&snitch] (mutable_token_metadata_ptr tmptr) -> future<> { // re-read local rack and DC info - auto endpoint = utils::fb_utilities::get_broadcast_address(); - auto dr = locator::endpoint_dc_rack { - .dc = snitch->get_datacenter(), - .rack = snitch->get_rack(), - }; - tmptr->update_topology(endpoint, std::move(dr)); + tmptr->update_topology(utils::fb_utilities::get_broadcast_address(), snitch->get_location()); return make_ready_future<>(); });