diff --git a/gms/version_generator.cc b/gms/version_generator.cc index 586e2761e3cd..894e71df4708 100644 --- a/gms/version_generator.cc +++ b/gms/version_generator.cc @@ -8,6 +8,12 @@ * SPDX-License-Identifier: (AGPL-3.0-or-later and Apache-2.0) */ +#include +#include +#include +#include +#include "log.hh" +#include "seastarx.hh" #include "version_generator.hh" namespace gms { @@ -16,8 +22,15 @@ namespace version_generator { // For us, we run the gossiper on a single CPU, and don't need to use atomics. static version_type version; +static logging::logger logger("version_generator"); + version_type get_next_version() noexcept { + if (this_shard_id() != 0) [[unlikely]] { + on_fatal_internal_error(logger, format( + "{} can only be called on shard 0, but it was called on shard {}", + __FUNCTION__, this_shard_id())); + } return ++version; } diff --git a/service/misc_services.cc b/service/misc_services.cc index 8c9b53ab2110..f5bfb8d95ad5 100644 --- a/service/misc_services.cc +++ b/service/misc_services.cc @@ -204,8 +204,10 @@ future cache_hitrate_calculator::recalculate_hitrates() llogger.debug("Send CACHE_HITRATES update max_diff={}, published_nr={}", _diff, _published_nr); ++_published_nr; _published_time = now; - return _gossiper.add_local_application_state(gms::application_state::CACHE_HITRATES, - gms::versioned_value::cache_hitrates(_gstate)).then([recalculate_duration] { + return container().invoke_on(0, [&gstate = _gstate] (cache_hitrate_calculator& self) { + return self._gossiper.add_local_application_state(gms::application_state::CACHE_HITRATES, + gms::versioned_value::cache_hitrates(gstate)); + }).then([recalculate_duration] { return recalculate_duration; }); } else {