From d1817e9e1b88bb912508e53011a7083e35f20cb3 Mon Sep 17 00:00:00 2001 From: Benny Halevy Date: Sun, 2 Apr 2023 12:41:20 +0300 Subject: [PATCH] utils: move generation-number to gms Although get_generation_number implementation is completely generic, it is used exclusively to seed the gossip generation number. Following patches will define a strong gms::generation_id type and this function should return it. Signed-off-by: Benny Halevy --- configure.py | 2 +- db/system_keyspace.cc | 6 +++--- {utils => gms}/generation-number.cc | 2 +- {utils => gms}/generation-number.hh | 2 +- gms/gossiper.cc | 4 ++-- service/storage_service.cc | 4 ++-- utils/CMakeLists.txt | 1 - 7 files changed, 10 insertions(+), 11 deletions(-) rename {utils => gms}/generation-number.cc (95%) rename {utils => gms}/generation-number.hh (88%) diff --git a/configure.py b/configure.py index 091d896bd7..26ecdfff8b 100755 --- a/configure.py +++ b/configure.py @@ -700,7 +700,7 @@ scylla_core = (['message/messaging_service.cc', 'utils/limiting_data_source.cc', 'utils/updateable_value.cc', 'utils/directories.cc', - 'utils/generation-number.cc', + 'gms/generation-number.cc', 'utils/rjson.cc', 'utils/human_readable.cc', 'utils/histogram_metrics_helper.cc', diff --git a/db/system_keyspace.cc b/db/system_keyspace.cc index 33f056d2bf..13c522f3d5 100644 --- a/db/system_keyspace.cc +++ b/db/system_keyspace.cc @@ -51,7 +51,7 @@ #include "db/view/build_progress_virtual_reader.hh" #include "db/schema_tables.hh" #include "index/built_indexes_virtual_reader.hh" -#include "utils/generation-number.hh" +#include "gms/generation-number.hh" #include "db/virtual_table.hh" #include "service/storage_service.hh" #include "protocol_server.hh" @@ -3125,11 +3125,11 @@ future system_keyspace::increment_and_get_generation() { // seconds-since-epoch isn't a foolproof new generation // (where foolproof is "guaranteed to be larger than the last one seen at this ip address"), // but it's as close as sanely possible - generation = utils::get_generation_number(); + generation = gms::get_generation_number(); } else { // Other nodes will ignore gossip messages about a node that have a lower generation than previously seen. int stored_generation = rs->one().template get_as("gossip_generation") + 1; - int now = utils::get_generation_number(); + int now = gms::get_generation_number(); if (stored_generation >= now) { slogger.warn("Using stored Gossip Generation {} as it is greater than current system time {}." "See CASSANDRA-3654 if you experience problems", stored_generation, now); diff --git a/utils/generation-number.cc b/gms/generation-number.cc similarity index 95% rename from utils/generation-number.cc rename to gms/generation-number.cc index 34daee0ab6..3c8a6cd05a 100644 --- a/utils/generation-number.cc +++ b/gms/generation-number.cc @@ -9,7 +9,7 @@ #include #include "generation-number.hh" -namespace utils { +namespace gms { int get_generation_number() { using namespace std::chrono; diff --git a/utils/generation-number.hh b/gms/generation-number.hh similarity index 88% rename from utils/generation-number.hh rename to gms/generation-number.hh index deef890bd4..f2444ec1ad 100644 --- a/utils/generation-number.hh +++ b/gms/generation-number.hh @@ -8,7 +8,7 @@ #pragma once -namespace utils { +namespace gms { int get_generation_number(); diff --git a/gms/gossiper.cc b/gms/gossiper.cc index e8b0ff3a92..6e22c618e8 100644 --- a/gms/gossiper.cc +++ b/gms/gossiper.cc @@ -38,7 +38,7 @@ #include #include #include -#include "utils/generation-number.hh" +#include "gms/generation-number.hh" #include "locator/token_metadata.hh" #include "utils/exceptions.hh" @@ -567,7 +567,7 @@ future<> gossiper::do_apply_state_locally(gms::inet_address node, const endpoint int local_generation = local_state.get_heart_beat_state().get_generation(); int remote_generation = remote_state.get_heart_beat_state().get_generation(); logger.trace("{} local generation {}, remote generation {}", node, local_generation, remote_generation); - if (remote_generation > utils::get_generation_number() + MAX_GENERATION_DIFFERENCE) { + if (remote_generation > get_generation_number() + MAX_GENERATION_DIFFERENCE) { // assume some peer has corrupted memory and is broadcasting an unbelievable generation about another peer (or itself) logger.warn("received an invalid gossip generation for peer {}; local generation = {}, received generation = {}", node, local_generation, remote_generation); diff --git a/service/storage_service.cc b/service/storage_service.cc index d48f3716a2..85b24a9c60 100644 --- a/service/storage_service.cc +++ b/service/storage_service.cc @@ -59,7 +59,7 @@ #include "repair/repair.hh" #include "repair/row_level.hh" #include "service/priority_manager.hh" -#include "utils/generation-number.hh" +#include "gms/generation-number.hh" #include #include #include @@ -2948,7 +2948,7 @@ future<> storage_service::start_gossiping() { co_await ss._sys_ks.local().get_local_tokens(), cdc_gen_ts); ss._gossiper.force_newer_generation(); - co_await ss._gossiper.start_gossiping(utils::get_generation_number()); + co_await ss._gossiper.start_gossiping(gms::get_generation_number()); } catch (...) { should_stop_gossiper = true; } diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index a2ecbd1b82..185a9787e2 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -21,7 +21,6 @@ target_sources(utils error_injection.cc exceptions.cc file_lock.cc - generation-number.cc gz/crc_combine.cc gz/crc_combine_table.cc hashers.cc