From 45c0694853d047d9616db5ea46983f23b77731ad Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Thu, 6 Jul 2023 00:39:39 +0300 Subject: [PATCH] Clear etcd_local addresses on reload and also skip duplicates --- src/etcd_state_client.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/etcd_state_client.cpp b/src/etcd_state_client.cpp index 1d76b0c8..39bab751 100644 --- a/src/etcd_state_client.cpp +++ b/src/etcd_state_client.cpp @@ -187,22 +187,30 @@ void etcd_state_client_t::add_etcd_url(std::string addr) check_addr = addr; if (pos == std::string::npos) addr += "/v3"; + bool local = false; int i; for (i = 0; i < local_ips.size(); i++) { if (local_ips[i] == check_addr) { - this->etcd_local.push_back(addr); + local = true; break; } } - if (i >= local_ips.size()) - this->etcd_addresses.push_back(addr); + auto & to = local ? this->etcd_local : this->etcd_addresses; + for (i = 0; i < to.size(); i++) + { + if (to[i] == addr) + break; + } + if (i >= to.size()) + to.push_back(addr); } } void etcd_state_client_t::parse_config(const json11::Json & config) { + this->etcd_local.clear(); this->etcd_addresses.clear(); if (config["etcd_address"].is_string()) {