From fccc82bce6dcd14a6324eaf040a54e917ebb8610 Mon Sep 17 00:00:00 2001 From: xuruidong Date: Fri, 28 Feb 2025 19:50:03 +0800 Subject: [PATCH] perf(etcd): refactor some code to improve performance Signed-off-by: xuruidong --- apisix/core/config_etcd.lua | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/apisix/core/config_etcd.lua b/apisix/core/config_etcd.lua index 76942adfefd5..38e25a4adf06 100644 --- a/apisix/core/config_etcd.lua +++ b/apisix/core/config_etcd.lua @@ -34,6 +34,7 @@ local NGX_INFO = ngx.INFO local check_schema = require("apisix.core.schema").check local exiting = ngx.worker.exiting local insert_tab = table.insert +local remove_tab = table.remove local type = type local ipairs = ipairs local setmetatable = setmetatable @@ -741,22 +742,23 @@ local function sync_data(self) -- avoid space waste if self.sync_times > 100 then - local values_original = table.clone(self.values) - table.clear(self.values) - - for i = 1, #values_original do - local val = values_original[i] + local pre = 1 + local cur = 1 + table.clear(self.values_hash) + log.info("clear stale data in `values_hash` for key: ", key) + for _, val in ipairs(self.values) do if val then - table.insert(self.values, val) + self.values[pre] = val + key = short_key(self, val.key) + self.values_hash[key] = pre + pre = pre + 1 end - end - table.clear(self.values_hash) - log.info("clear stale data in `values_hash` for key: ", key) + cur = cur + 1 + end - for i = 1, #self.values do - key = short_key(self, self.values[i].key) - self.values_hash[key] = i + for i = cur - 1, pre, -1 do + remove_tab(self.values, i) end self.sync_times = 0