From f02441d10e951250db72fe57fad042a6cff033a7 Mon Sep 17 00:00:00 2001 From: chronolaw Date: Wed, 28 Feb 2024 09:21:08 +0800 Subject: [PATCH 1/3] fix(router/atc): reset rebuilding flag if route has no id --- .../kong/fix-router-rebuing-flag.yml | 5 +++ kong/router/atc.lua | 1 + spec/01-unit/08-router_spec.lua | 40 +++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 changelog/unreleased/kong/fix-router-rebuing-flag.yml diff --git a/changelog/unreleased/kong/fix-router-rebuing-flag.yml b/changelog/unreleased/kong/fix-router-rebuing-flag.yml new file mode 100644 index 00000000000..a9def0bb2f8 --- /dev/null +++ b/changelog/unreleased/kong/fix-router-rebuing-flag.yml @@ -0,0 +1,5 @@ +message: | + Fix an issue where router's rebuilding flag is not reset correctly + if a route has no proper id +type: bugfix +scope: Core diff --git a/kong/router/atc.lua b/kong/router/atc.lua index b186a1b29bb..330cf78837d 100644 --- a/kong/router/atc.lua +++ b/kong/router/atc.lua @@ -285,6 +285,7 @@ local function new_from_previous(routes, get_exp_and_priority, old_router) local route_id = route.id if not route_id then + old_router.rebuilding = false return nil, "could not categorize route" end diff --git a/spec/01-unit/08-router_spec.lua b/spec/01-unit/08-router_spec.lua index f209586c895..9085e296b29 100644 --- a/spec/01-unit/08-router_spec.lua +++ b/spec/01-unit/08-router_spec.lua @@ -2131,6 +2131,46 @@ for _, flavor in ipairs({ "traditional", "traditional_compatible", "expressions" assert.spy(add_matcher).was_called(2) assert.spy(remove_matcher).was_called(2) end) + + it("works well if route has no proper id", function() + local wrong_use_case = { + { + service = service, + route = { + id = nil, -- no id here + paths = { "/foo", }, + updated_at = 100, + }, + }, + } + + local nrouter = new_router(wrong_use_case, router) + assert.is_nil(nrouter) + assert.falsy(router.rebuilding) + + local use_case = { + { + service = service, + route = { + id = "e8fb37f1-102d-461e-9c51-6608a6bb8101", + paths = { "/foo1", }, + updated_at = 100, + }, + }, + } + + local nrouter = assert(new_router(use_case, router)) + + assert.equal(nrouter, router) + assert.falsy(router.rebuilding) + + local match_t = nrouter:select("GET", "/foo1") + assert.truthy(match_t) + assert.same(use_case[1].route, match_t.route) + + match_t = nrouter:select("GET", "/bar") + assert.falsy(match_t) + end) end) describe("check empty route fields", function() From 92a5a33d8093debda622c4bab7a0c4cb0daa7d7a Mon Sep 17 00:00:00 2001 From: chronolaw Date: Fri, 1 Mar 2024 11:46:06 +0800 Subject: [PATCH 2/3] changelog tuning --- changelog/unreleased/kong/fix-router-rebuing-flag.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog/unreleased/kong/fix-router-rebuing-flag.yml b/changelog/unreleased/kong/fix-router-rebuing-flag.yml index a9def0bb2f8..3ff155b395a 100644 --- a/changelog/unreleased/kong/fix-router-rebuing-flag.yml +++ b/changelog/unreleased/kong/fix-router-rebuing-flag.yml @@ -1,5 +1,5 @@ message: | - Fix an issue where router's rebuilding flag is not reset correctly - if a route has no proper id + Fix an issue where router may not work correctly + when the routes configuration changed. type: bugfix scope: Core From ce88a85f02da0f4735727edd1dcdc405fc0b233a Mon Sep 17 00:00:00 2001 From: Qi Date: Fri, 1 Mar 2024 13:22:47 +0800 Subject: [PATCH 3/3] Update changelog/unreleased/kong/fix-router-rebuing-flag.yml --- changelog/unreleased/kong/fix-router-rebuing-flag.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/unreleased/kong/fix-router-rebuing-flag.yml b/changelog/unreleased/kong/fix-router-rebuing-flag.yml index 3ff155b395a..62740912f3c 100644 --- a/changelog/unreleased/kong/fix-router-rebuing-flag.yml +++ b/changelog/unreleased/kong/fix-router-rebuing-flag.yml @@ -1,5 +1,5 @@ message: | - Fix an issue where router may not work correctly + Fixed an issue where router may not work correctly when the routes configuration changed. type: bugfix scope: Core