From 4ae068c5b2c47e2939d7fbe724d163ca0db435f8 Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 5 Jun 2025 00:30:09 +0800 Subject: [PATCH 01/20] Update informer_factory.lua Spelling error. post_List should be post_list --- apisix/discovery/kubernetes/informer_factory.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apisix/discovery/kubernetes/informer_factory.lua b/apisix/discovery/kubernetes/informer_factory.lua index fd434c047391..3420c1aed58f 100644 --- a/apisix/discovery/kubernetes/informer_factory.lua +++ b/apisix/discovery/kubernetes/informer_factory.lua @@ -298,7 +298,7 @@ local function list_watch(informer, apiserver) end informer.fetch_state = "list finished" - if informer.post_List then + if informer.post_list then informer:post_list() end From 2e30cd986c17bd9fc5419d76df2db507bce00344 Mon Sep 17 00:00:00 2001 From: chuanFF Date: Tue, 2 Sep 2025 00:16:26 +0800 Subject: [PATCH 02/20] =?UTF-8?q?pre=5Flist/post=5Flist=20bug=20fix?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discovery/kubernetes/informer_factory.lua | 2 +- apisix/discovery/kubernetes/init.lua | 32 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/apisix/discovery/kubernetes/informer_factory.lua b/apisix/discovery/kubernetes/informer_factory.lua index 3420c1aed58f..d31841b1e20d 100644 --- a/apisix/discovery/kubernetes/informer_factory.lua +++ b/apisix/discovery/kubernetes/informer_factory.lua @@ -285,7 +285,7 @@ local function list_watch(informer, apiserver) core.log.info("begin to list ", informer.kind) informer.fetch_state = "listing" - if informer.pre_List then + if informer.pre_list then informer:pre_list() end diff --git a/apisix/discovery/kubernetes/init.lua b/apisix/discovery/kubernetes/init.lua index 695a9dd7f684..e60367b4e81a 100644 --- a/apisix/discovery/kubernetes/init.lua +++ b/apisix/discovery/kubernetes/init.lua @@ -194,15 +194,29 @@ local function on_endpoint_deleted(handle, endpoint) end -local function pre_list(handle) - handle.endpoint_dict:flush_all() -end +local pre_list +local post_list +do + local existing_keys + function pre_list(handle) + existing_keys = handle.endpoint_dict:get_keys(0) + end -local function post_list(handle) - handle.endpoint_dict:flush_expired() + local function post_list(handle) + local current_keys = handle.endpoint_dict:get_keys(0) + local current_keys_hash = {} + for _, key in ipairs(current_keys) do + current_keys_hash[key] = true + end + for _, key in ipairs(existing_keys) do + if not current_keys_hash[key] then + handle.endpoint_dict:delete(key) + end + end + existing_keys = {} +end end - local function setup_label_selector(conf, informer) informer.label_selector = conf.label_selector @@ -369,7 +383,7 @@ local function get_apiserver(conf) end local function create_endpoint_lrucache(endpoint_dict, endpoint_key, endpoint_port) - local endpoint_content = endpoint_dict:get_stale(endpoint_key) + local endpoint_content = endpoint_dict:get(endpoint_key) if not endpoint_content then core.log.error("get empty endpoint content from discovery DIC, this should not happen ", endpoint_key) @@ -497,7 +511,7 @@ local function single_mode_nodes(service_name) local endpoint_dict = ctx local endpoint_key = match[1] local endpoint_port = match[2] - local endpoint_version = endpoint_dict:get_stale(endpoint_key .. "#version") + local endpoint_version = endpoint_dict:get(endpoint_key .. "#version") if not endpoint_version then core.log.info("get empty endpoint version from discovery DICT ", endpoint_key) return nil @@ -612,7 +626,7 @@ local function multiple_mode_nodes(service_name) local endpoint_key = match[2] local endpoint_port = match[3] - local endpoint_version = endpoint_dict:get_stale(endpoint_key .. "#version") + local endpoint_version = endpoint_dict:get(endpoint_key .. "#version") if not endpoint_version then core.log.info("get empty endpoint version from discovery DICT ", endpoint_key) return nil From c21247fcd6aac19baf5d524dbaf034b0ee57e08e Mon Sep 17 00:00:00 2001 From: chuanFF Date: Tue, 2 Sep 2025 23:14:58 +0800 Subject: [PATCH 03/20] =?UTF-8?q?pre=5Flist/post=5Flist=20bug=20fix?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apisix/discovery/kubernetes/init.lua | 44 +++++++++++++++------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/apisix/discovery/kubernetes/init.lua b/apisix/discovery/kubernetes/init.lua index e60367b4e81a..a31cf2b330ef 100644 --- a/apisix/discovery/kubernetes/init.lua +++ b/apisix/discovery/kubernetes/init.lua @@ -51,7 +51,7 @@ local function sort_nodes_cmp(left, right) return left.port < right.port end -local function on_endpoint_slices_modified(handle, endpoint) +local function on_endpoint_slices_modified(handle, endpoint, operate) if handle.namespace_selector and not handle:namespace_selector(endpoint.metadata.namespace) then return @@ -115,9 +115,12 @@ local function on_endpoint_slices_modified(handle, endpoint) core.log.error("set endpoint into discovery DICT failed, ", err) handle.endpoint_dict:delete(endpoint_key .. "#version") end + if operate == "list" then + handle.endpoint_list_hash[endpoint_key] = true + end end -local function on_endpoint_modified(handle, endpoint) +local function on_endpoint_modified(handle, endpoint, operate) if handle.namespace_selector and not handle:namespace_selector(endpoint.metadata.namespace) then return @@ -178,6 +181,9 @@ local function on_endpoint_modified(handle, endpoint) core.log.error("set endpoint into discovery DICT failed, ", err) handle.endpoint_dict:delete(endpoint_key .. "#version") end + if operate == "list" then + handle.endpoint_list_hash[endpoint_key] = true + end end @@ -194,30 +200,26 @@ local function on_endpoint_deleted(handle, endpoint) end -local pre_list -local post_list -do - local existing_keys - function pre_list(handle) - existing_keys = handle.endpoint_dict:get_keys(0) - end +local function pre_list(handle) + handle.current_keys_hash = {} + handle.existing_keys = handle.endpoint_dict:get_keys(0) +end - local function post_list(handle) - local current_keys = handle.endpoint_dict:get_keys(0) - local current_keys_hash = {} - for _, key in ipairs(current_keys) do - current_keys_hash[key] = true - end - for _, key in ipairs(existing_keys) do - if not current_keys_hash[key] then - handle.endpoint_dict:delete(key) - end +local function post_list(handle) + if not handle.existing_keys or not handle.endpoint_list_hash then + return + end + for _, key in ipairs(handle.existing_keys) do + if not handle.current_keys_hash[key] then + handle.endpoint_dict:delete(key) end - existing_keys = {} -end + end + handle.existing_keys = nil + handle.current_keys_hash = nil end + local function setup_label_selector(conf, informer) informer.label_selector = conf.label_selector end From 370d0875a14e713694279fe6b20e7e15dbeca51d Mon Sep 17 00:00:00 2001 From: chuanFF Date: Tue, 2 Sep 2025 23:19:58 +0800 Subject: [PATCH 04/20] =?UTF-8?q?pre=5Flist/post=5Flist=20bug=20fix?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apisix/discovery/kubernetes/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apisix/discovery/kubernetes/init.lua b/apisix/discovery/kubernetes/init.lua index a31cf2b330ef..424b642309ae 100644 --- a/apisix/discovery/kubernetes/init.lua +++ b/apisix/discovery/kubernetes/init.lua @@ -116,7 +116,7 @@ local function on_endpoint_slices_modified(handle, endpoint, operate) handle.endpoint_dict:delete(endpoint_key .. "#version") end if operate == "list" then - handle.endpoint_list_hash[endpoint_key] = true + handle.current_keys_hash[endpoint_key] = true end end @@ -182,7 +182,7 @@ local function on_endpoint_modified(handle, endpoint, operate) handle.endpoint_dict:delete(endpoint_key .. "#version") end if operate == "list" then - handle.endpoint_list_hash[endpoint_key] = true + handle.current_keys_hash[endpoint_key] = true end end @@ -207,7 +207,7 @@ end local function post_list(handle) - if not handle.existing_keys or not handle.endpoint_list_hash then + if not handle.existing_keys or not handle.current_keys_hash then return end for _, key in ipairs(handle.existing_keys) do From 899633ec1f21f9e1f9c3ebe56e33a546e73ac341 Mon Sep 17 00:00:00 2001 From: chuanFF Date: Wed, 3 Sep 2025 01:04:22 +0800 Subject: [PATCH 05/20] =?UTF-8?q?pre=5Flist/post=5Flist=20bug=20fix?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D-=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apisix/discovery/kubernetes/init.lua | 1 + t/kubernetes/discovery/kubernetes3.t | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/apisix/discovery/kubernetes/init.lua b/apisix/discovery/kubernetes/init.lua index 424b642309ae..9d16b1fc6eb1 100644 --- a/apisix/discovery/kubernetes/init.lua +++ b/apisix/discovery/kubernetes/init.lua @@ -212,6 +212,7 @@ local function post_list(handle) end for _, key in ipairs(handle.existing_keys) do if not handle.current_keys_hash[key] then + core.log.debug("kubernetes discovery module find dirty data in shared dict, key:", key) handle.endpoint_dict:delete(key) end end diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index 60b224820f38..703a4702934d 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -493,3 +493,15 @@ GET /dump GET /dump --- response_body_like .*"name":"default/kubernetes".* + + + +=== TEST 7: test pre_list and post_list work +--- yaml_config eval: $::single_yaml_config +--- log_level: debug +--- extra_init_by_lua +local ngx = ngx +local dict = ngx.shared["kubernetes"] +dict:set("dirty_key", true) +--- grep_error_log_out +kubernetes discovery module find dirty data in shared dict From 750733e7998265f7b5ac8bdb9b1181207a3922c4 Mon Sep 17 00:00:00 2001 From: chuanFF Date: Thu, 4 Sep 2025 00:26:40 +0800 Subject: [PATCH 06/20] =?UTF-8?q?pre=5Flist/post=5Flist=20bug=20fix?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D-=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- t/kubernetes/discovery/kubernetes3.t | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index 703a4702934d..2fe0ee5ad89e 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -503,5 +503,12 @@ GET /dump local ngx = ngx local dict = ngx.shared["kubernetes"] dict:set("dirty_key", true) +--- config + location /t { + return 200 + } +--- request +GET /t +--- error_code: 200 --- grep_error_log_out kubernetes discovery module find dirty data in shared dict From 977557bfa7ba09724fd20d187cb705f01f0812f5 Mon Sep 17 00:00:00 2001 From: chuanFF Date: Thu, 4 Sep 2025 00:55:45 +0800 Subject: [PATCH 07/20] get_healthcheck_events_module spelling fix --- t/kubernetes/discovery/kubernetes3.t | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index 2fe0ee5ad89e..e2c645392316 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -497,18 +497,17 @@ GET /dump === TEST 7: test pre_list and post_list work +--- config + location /t { + return 200 + } --- yaml_config eval: $::single_yaml_config --- log_level: debug --- extra_init_by_lua local ngx = ngx local dict = ngx.shared["kubernetes"] dict:set("dirty_key", true) ---- config - location /t { - return 200 - } --- request GET /t ---- error_code: 200 --- grep_error_log_out kubernetes discovery module find dirty data in shared dict From d1e513cbe035c3e6216c1b1db591e430648273be Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:18:53 +0800 Subject: [PATCH 08/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index e2c645392316..35c9306d137c 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -497,16 +497,16 @@ GET /dump === TEST 7: test pre_list and post_list work +--- log_level: debug +--- yaml_config eval: $::single_yaml_config +--- extra_init_by_lua + local ngx = ngx + local dict = ngx.shared["kubernetes"] + dict:set("dirty_key", true) --- config location /t { return 200 } ---- yaml_config eval: $::single_yaml_config ---- log_level: debug ---- extra_init_by_lua -local ngx = ngx -local dict = ngx.shared["kubernetes"] -dict:set("dirty_key", true) --- request GET /t --- grep_error_log_out From 31df72a4765f5661d11dae81e534e91ce1a927bb Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:41:50 +0800 Subject: [PATCH 09/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index 35c9306d137c..f692cff556ad 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -503,11 +503,7 @@ GET /dump local ngx = ngx local dict = ngx.shared["kubernetes"] dict:set("dirty_key", true) ---- config - location /t { - return 200 - } --- request -GET /t +GET /dump --- grep_error_log_out kubernetes discovery module find dirty data in shared dict From 1a6055ef3ab78cb4fd338c8306711f27025d2bb2 Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:09:17 +0800 Subject: [PATCH 10/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 2 ++ 1 file changed, 2 insertions(+) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index f692cff556ad..8425d3ff2bb4 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -505,5 +505,7 @@ GET /dump dict:set("dirty_key", true) --- request GET /dump +--- grep_error_log eval +qr/kubernetes discovery module find dirty data in shared dict/ --- grep_error_log_out kubernetes discovery module find dirty data in shared dict From 7c1dabd7d194ceb9c831653406e6669e71fdb98e Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 14:10:04 +0800 Subject: [PATCH 11/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index 8425d3ff2bb4..27b85d174bcc 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -242,6 +242,10 @@ _EOC_ } } + location /t { + return 200 + } + _EOC_ $block->set_value("config", $config); @@ -504,7 +508,7 @@ GET /dump local dict = ngx.shared["kubernetes"] dict:set("dirty_key", true) --- request -GET /dump +GET /t --- grep_error_log eval qr/kubernetes discovery module find dirty data in shared dict/ --- grep_error_log_out From b1315a2beefc8b48ffd780ad6c8109361580661c Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 14:18:58 +0800 Subject: [PATCH 12/20] Update init.lua --- apisix/discovery/kubernetes/init.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apisix/discovery/kubernetes/init.lua b/apisix/discovery/kubernetes/init.lua index 9d16b1fc6eb1..b6092d8ee51d 100644 --- a/apisix/discovery/kubernetes/init.lua +++ b/apisix/discovery/kubernetes/init.lua @@ -114,9 +114,11 @@ local function on_endpoint_slices_modified(handle, endpoint, operate) if err then core.log.error("set endpoint into discovery DICT failed, ", err) handle.endpoint_dict:delete(endpoint_key .. "#version") + return end if operate == "list" then handle.current_keys_hash[endpoint_key] = true + handle.current_keys_hash[endpoint_key .. "#version"] = true end end @@ -180,9 +182,11 @@ local function on_endpoint_modified(handle, endpoint, operate) if err then core.log.error("set endpoint into discovery DICT failed, ", err) handle.endpoint_dict:delete(endpoint_key .. "#version") + return end if operate == "list" then handle.current_keys_hash[endpoint_key] = true + handle.current_keys_hash[endpoint_key .. "#version"] = true end end @@ -212,7 +216,7 @@ local function post_list(handle) end for _, key in ipairs(handle.existing_keys) do if not handle.current_keys_hash[key] then - core.log.debug("kubernetes discovery module find dirty data in shared dict, key:", key) + core.log.info("kubernetes discovery module find dirty data in shared dict, key:", key) handle.endpoint_dict:delete(key) end end From 1cd65568b4d0e5273cfa9f46b3fb87f224c7111e Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 14:25:57 +0800 Subject: [PATCH 13/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index 27b85d174bcc..a0607a65ed52 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -500,8 +500,8 @@ GET /dump -=== TEST 7: test pre_list and post_list work ---- log_level: debug +=== TEST 7: test pre_list and post_list work for single-k8s +--- log_level: info --- yaml_config eval: $::single_yaml_config --- extra_init_by_lua local ngx = ngx @@ -513,3 +513,19 @@ GET /t qr/kubernetes discovery module find dirty data in shared dict/ --- grep_error_log_out kubernetes discovery module find dirty data in shared dict + + + +=== TEST 8: test pre_list and post_list work for multi-k8s +--- log_level: info +--- yaml_config eval: $::yaml_config +--- extra_init_by_lua + local ngx = ngx + local dict = ngx.shared["kubernetes-first"] + dict:set("dirty_key", true) +--- request +GET /t +--- grep_error_log eval +qr/kubernetes discovery module find dirty data in shared dict/ +--- grep_error_log_out +kubernetes discovery module find dirty data in shared dict From 2f04ec1e2637579c879ca0e93ff2ca534f813afd Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:52:20 +0800 Subject: [PATCH 14/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index a0607a65ed52..c2a3d41314fc 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -243,7 +243,7 @@ _EOC_ } location /t { - return 200 + return 200; } _EOC_ From b133cdb930d25c331edc421b57ea83e72b748add Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 18:05:07 +0800 Subject: [PATCH 15/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index c2a3d41314fc..b468126bea93 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -509,6 +509,8 @@ GET /dump dict:set("dirty_key", true) --- request GET /t +--- no_error_log +[error] --- grep_error_log eval qr/kubernetes discovery module find dirty data in shared dict/ --- grep_error_log_out @@ -525,6 +527,8 @@ kubernetes discovery module find dirty data in shared dict dict:set("dirty_key", true) --- request GET /t +--- no_error_log +[error] --- grep_error_log eval qr/kubernetes discovery module find dirty data in shared dict/ --- grep_error_log_out From 08b56a786cacfe64e5fe69f1bfceaf0870856e1c Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 20:19:54 +0800 Subject: [PATCH 16/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index b468126bea93..0a59ca43f7d6 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -97,7 +97,7 @@ _EOC_ use t::APISIX 'no_plan'; repeat_each(1); -log_level('warn'); +log_level('info'); no_root_location(); no_shuffle(); workers(4); @@ -501,7 +501,6 @@ GET /dump === TEST 7: test pre_list and post_list work for single-k8s ---- log_level: info --- yaml_config eval: $::single_yaml_config --- extra_init_by_lua local ngx = ngx @@ -519,7 +518,6 @@ kubernetes discovery module find dirty data in shared dict === TEST 8: test pre_list and post_list work for multi-k8s ---- log_level: info --- yaml_config eval: $::yaml_config --- extra_init_by_lua local ngx = ngx From a584109b410c3762d073df2c34fe22857d79e798 Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 21:27:50 +0800 Subject: [PATCH 17/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index 0a59ca43f7d6..af626cafe5ac 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -504,8 +504,13 @@ GET /dump --- yaml_config eval: $::single_yaml_config --- extra_init_by_lua local ngx = ngx + local core = require("apisix.core") + local dict = ngx.shared["kubernetes"] - dict:set("dirty_key", true) + local ok,err = dict:set("dirty_key", true) + if not ok then + core.log.error("set dirty_key to dict fail, err: ", err) + end --- request GET /t --- no_error_log @@ -521,8 +526,13 @@ kubernetes discovery module find dirty data in shared dict --- yaml_config eval: $::yaml_config --- extra_init_by_lua local ngx = ngx + local core = require("apisix.core") + local dict = ngx.shared["kubernetes-first"] - dict:set("dirty_key", true) + local ok,err = dict:set("dirty_key", true) + if not ok then + core.log.error("set dirty_key to dict fail, err: ", err) + end --- request GET /t --- no_error_log From 7d21358e4063cd1ece2469b03fcd09e4bb739530 Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 21:53:38 +0800 Subject: [PATCH 18/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index af626cafe5ac..fb54316f2fe0 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -97,7 +97,7 @@ _EOC_ use t::APISIX 'no_plan'; repeat_each(1); -log_level('info'); +log_level('warn'); no_root_location(); no_shuffle(); workers(4); @@ -243,7 +243,10 @@ _EOC_ } location /t { - return 200; + content_by_lua_block { + ngx.sleep(1) + ngx.exit(200) + } } _EOC_ @@ -501,6 +504,7 @@ GET /dump === TEST 7: test pre_list and post_list work for single-k8s +--- log_level: info --- yaml_config eval: $::single_yaml_config --- extra_init_by_lua local ngx = ngx @@ -523,6 +527,7 @@ kubernetes discovery module find dirty data in shared dict === TEST 8: test pre_list and post_list work for multi-k8s +--- log_level: info --- yaml_config eval: $::yaml_config --- extra_init_by_lua local ngx = ngx From d0788bce6d80a1a0bca8d5743c434a0f55a10722 Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 23:24:25 +0800 Subject: [PATCH 19/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 90 +++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 3 deletions(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index fb54316f2fe0..dd7a73a38a92 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -244,7 +244,7 @@ _EOC_ location /t { content_by_lua_block { - ngx.sleep(1) + ngx.sleep(2) ngx.exit(200) } } @@ -503,7 +503,7 @@ GET /dump -=== TEST 7: test pre_list and post_list work for single-k8s +=== TEST 7: test pre_list and post_list work for single-k8s with endpoint_slices --- log_level: info --- yaml_config eval: $::single_yaml_config --- extra_init_by_lua @@ -526,7 +526,7 @@ kubernetes discovery module find dirty data in shared dict -=== TEST 8: test pre_list and post_list work for multi-k8s +=== TEST 8: test pre_list and post_list work for multi-k8s with endpoint_slices --- log_level: info --- yaml_config eval: $::yaml_config --- extra_init_by_lua @@ -546,3 +546,87 @@ GET /t qr/kubernetes discovery module find dirty data in shared dict/ --- grep_error_log_out kubernetes discovery module find dirty data in shared dict + + + +=== TEST 9: test pre_list and post_list work for single-k8s with endpoints +--- log_level: info +--- yaml_config +apisix: + node_listen: 1984 +deployment: + role: data_plane + role_data_plane: + config_provider: yaml +discovery: + kubernetes: + service: + host: "127.0.0.1" + port: "6443" + client: + token_file: "/tmp/var/run/secrets/kubernetes.io/serviceaccount/token" + watch_endpoint_slices: false +--- extra_init_by_lua + local ngx = ngx + local core = require("apisix.core") + + local dict = ngx.shared["kubernetes"] + local ok,err = dict:set("dirty_key", true) + if not ok then + core.log.error("set dirty_key to dict fail, err: ", err) + end +--- request +GET /t +--- no_error_log +[error] +--- grep_error_log eval +qr/kubernetes discovery module find dirty data in shared dict/ +--- grep_error_log_out +kubernetes discovery module find dirty data in shared dict + + + +=== TEST 10: test pre_list and post_list work for multi-k8s with endpoints +--- log_level: info +--- yaml_config +apisix: + node_listen: 1984 +deployment: + role: data_plane + role_data_plane: + config_provider: yaml +discovery: + kubernetes: + - id: first + service: + host: "127.0.0.1" + port: "6443" + client: + token_file: "/tmp/var/run/secrets/kubernetes.io/serviceaccount/token" + watch_endpoint_slices: true + - id: second + service: + schema: "http" + host: "127.0.0.1" + port: "6445" + client: + token_file: "/tmp/var/run/secrets/kubernetes.io/serviceaccount/token" + watch_endpoint_slices: false +--- extra_init_by_lua + local ngx = ngx + local core = require("apisix.core") + + local dict = ngx.shared["kubernetes-first"] + local ok,err = dict:set("dirty_key", true) + if not ok then + core.log.error("set dirty_key to dict fail, err: ", err) + end +--- request +GET /t +--- no_error_log +[error] +--- grep_error_log eval +qr/kubernetes discovery module find dirty data in shared dict/ +--- grep_error_log_out +kubernetes discovery module find dirty data in shared dict + From 74a19edb724cbc35d5a9a3d0255e69f6b094c25e Mon Sep 17 00:00:00 2001 From: ChuanFF <48383420+ChuanFF@users.noreply.github.com> Date: Thu, 4 Sep 2025 23:31:30 +0800 Subject: [PATCH 20/20] Update kubernetes3.t --- t/kubernetes/discovery/kubernetes3.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/kubernetes/discovery/kubernetes3.t b/t/kubernetes/discovery/kubernetes3.t index dd7a73a38a92..e6a3ed2d0c29 100644 --- a/t/kubernetes/discovery/kubernetes3.t +++ b/t/kubernetes/discovery/kubernetes3.t @@ -603,7 +603,7 @@ discovery: port: "6443" client: token_file: "/tmp/var/run/secrets/kubernetes.io/serviceaccount/token" - watch_endpoint_slices: true + watch_endpoint_slices: false - id: second service: schema: "http"