From 63dd6adb5473e002889485f4afecf47a9d0d1094 Mon Sep 17 00:00:00 2001 From: Ye Cao Date: Mon, 18 Dec 2023 11:11:34 +0800 Subject: [PATCH] Delete the retry logic while launching metadata service and reset the etcd client while probing (#1649) Fixes #1648 Signed-off-by: Ye Cao --- src/server/services/etcd_meta_service.cc | 3 ++ src/server/util/etcd_launcher.cc | 36 ++++++++---------------- src/server/util/redis_launcher.cc | 36 ++++++++---------------- 3 files changed, 25 insertions(+), 50 deletions(-) diff --git a/src/server/services/etcd_meta_service.cc b/src/server/services/etcd_meta_service.cc index dd81a9dabd..161ed9fca6 100644 --- a/src/server/services/etcd_meta_service.cc +++ b/src/server/services/etcd_meta_service.cc @@ -380,6 +380,9 @@ void EtcdMetaService::retryDaeminWatch( } Status EtcdMetaService::probe() { + std::string const& etcd_endpoint = + etcd_spec_["etcd_endpoint"].get_ref(); + etcd_.reset(new etcd::Client(etcd_endpoint)); if (EtcdLauncher::probeEtcdServer(etcd_, prefix_)) { return Status::OK(); } else { diff --git a/src/server/util/etcd_launcher.cc b/src/server/util/etcd_launcher.cc index 71d966df68..f377c17f17 100644 --- a/src/server/util/etcd_launcher.cc +++ b/src/server/util/etcd_launcher.cc @@ -111,16 +111,6 @@ Status EtcdLauncher::LaunchEtcdServer( return Status::OK(); } - LOG(INFO) << "Starting the etcd server"; - - // resolve etcd binary - std::string etcd_cmd = etcd_spec_["etcd_cmd"].get_ref(); - if (etcd_cmd.empty()) { - setenv("LC_ALL", "C", 1); // makes boost's path works as expected. - etcd_cmd = boost::process::search_path("etcd").string(); - } - LOG(INFO) << "Found etcd at: " << etcd_cmd; - RETURN_ON_ERROR(initHostInfo()); bool try_launch = false; if (local_hostnames_.find(endpoint_host_) != local_hostnames_.end() || @@ -129,22 +119,18 @@ Status EtcdLauncher::LaunchEtcdServer( } if (!try_launch) { - LOG(INFO) << "Will not launch an etcd instance."; - int retries = 0; - while (retries < max_probe_retries) { - if (probeEtcdServer(etcd_client, sync_lock)) { - break; - } - retries += 1; - sleep(1); - } - if (retries >= max_probe_retries) { - return Status::EtcdError( - "Etcd has been launched but failed to connect to it"); - } else { - return Status::OK(); - } + return Status::OK(); + } + + LOG(INFO) << "Starting the etcd server"; + + // resolve etcd binary + std::string etcd_cmd = etcd_spec_["etcd_cmd"].get_ref(); + if (etcd_cmd.empty()) { + setenv("LC_ALL", "C", 1); // makes boost's path works as expected. + etcd_cmd = boost::process::search_path("etcd").string(); } + LOG(INFO) << "Found etcd at: " << etcd_cmd; std::string host_to_advertise; if (host_to_advertise.empty()) { diff --git a/src/server/util/redis_launcher.cc b/src/server/util/redis_launcher.cc index a3f542cf8b..119a6b9e93 100644 --- a/src/server/util/redis_launcher.cc +++ b/src/server/util/redis_launcher.cc @@ -73,6 +73,17 @@ Status RedisLauncher::LaunchRedisServer( return Status::OK(); } + RETURN_ON_ERROR(initHostInfo()); + bool try_launch = false; + if (local_hostnames_.find(endpoint_host_) != local_hostnames_.end() || + local_ip_addresses_.find(endpoint_host_) != local_ip_addresses_.end()) { + try_launch = true; + } + + if (!try_launch) { + return Status::OK(); + } + LOG(INFO) << "Starting the redis server"; // resolve redis binary @@ -84,31 +95,6 @@ Status RedisLauncher::LaunchRedisServer( } LOG(INFO) << "Found redis at: " << redis_cmd; - RETURN_ON_ERROR(initHostInfo()); - bool try_launch = false; - if (local_hostnames_.find(endpoint_host_) != local_hostnames_.end() || - local_ip_addresses_.find(endpoint_host_) != local_ip_addresses_.end()) { - try_launch = true; - } - - if (!try_launch) { - LOG(INFO) << "Will not launch a redis instance."; - int retries = 0; - while (retries < max_probe_retries) { - if (probeRedisServer(redis_client, syncredis_client, watch_client)) { - break; - } - retries += 1; - sleep(1); - } - if (retries >= max_probe_retries) { - return Status::RedisError( - "Redis has been launched but failed to connect to it"); - } else { - return Status::OK(); - } - } - std::vector args; args.emplace_back("--port"); args.emplace_back(std::to_string(endpoint_port_));