From e98ec068ca05fd2de49e6ea5b5fe472259664bd0 Mon Sep 17 00:00:00 2001 From: Asias He Date: Tue, 26 May 2015 16:48:14 +0800 Subject: [PATCH] storage_service: Start gossiper inside prepare_to_join --- main.cc | 8 ++------ service/storage_service.hh | 26 +++++++++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/main.cc b/main.cc index f1fd0f827e..0136550623 100644 --- a/main.cc +++ b/main.cc @@ -46,12 +46,8 @@ future<> init_messaging_service(auto listen_address, auto seed_provider) { return gms::get_gossiper().start_single().then([seeds] { auto& gossiper = gms::get_local_gossiper(); gossiper.set_seeds(seeds); - using namespace std::chrono; - auto now = high_resolution_clock::now().time_since_epoch(); - int generation_number = duration_cast(now).count(); - return gossiper.start(generation_number).then([] { - print("Start gossiper service ...\n"); - }); + auto& ss = service::get_local_storage_service(); + return ss.init_server(); }); }); }); diff --git a/service/storage_service.hh b/service/storage_service.hh index 0c6ad0f913..1e326bedb4 100644 --- a/service/storage_service.hh +++ b/service/storage_service.hh @@ -418,13 +418,11 @@ private: } #endif public: - void init_server() - { - init_server(RING_DELAY); + future<> init_server() { + return init_server(RING_DELAY); } - void init_server(int delay) - { + future<> init_server(int delay) { #if 0 logger.info("Cassandra version: {}", FBUtilities.getReleaseVersionString()); logger.info("Thrift API version: {}", cassandraConstants.VERSION); @@ -522,8 +520,10 @@ public: }, "StorageServiceShutdownHook"); Runtime.getRuntime().addShutdownHook(drainOnShutdown); #endif - prepare_to_join(); - join_token_ring(delay); + return prepare_to_join().then([this, delay] { + join_token_ring(delay); + return make_ready_future<>(); + }); #if 0 // Has to be called after the host id has potentially changed in prepareToJoin(). for (ColumnFamilyStore cfs : ColumnFamilyStore.all()) @@ -566,7 +566,7 @@ public: } #endif private: - void prepare_to_join() + future<> prepare_to_join() { if (!joined) { std::map app_states; @@ -611,7 +611,13 @@ private: auto& gossiper = gms::get_local_gossiper(); gossiper.register_(this); - gossiper.start(0/*SystemKeyspace.incrementAndGetGeneration()*/, app_states); + using namespace std::chrono; + auto now = high_resolution_clock::now().time_since_epoch(); + int generation_number = duration_cast(now).count(); + // FIXME: SystemKeyspace.incrementAndGetGeneration() + return gossiper.start(generation_number, app_states).then([] { + print("Start gossiper service ...\n"); + }); #if 0 // gossip snitch infos (local DC and rack) gossipSnitchInfo(); @@ -626,7 +632,9 @@ private: BatchlogManager.instance.start(); #endif } + return make_ready_future<>(); } + void join_token_ring(int delay) { #if 0 joined = true;