diff --git a/changelog/unreleased/reconfiguration-completion-detection.yml b/changelog/unreleased/reconfiguration-completion-detection.yml deleted file mode 100644 index 585195b81dcb..000000000000 --- a/changelog/unreleased/reconfiguration-completion-detection.yml +++ /dev/null @@ -1,3 +0,0 @@ -message: Provide mechanism to detect completion of reconfiguration on the proxy path. This is for internal testing only. -type: feature -scope: Core diff --git a/kong/clustering/config_helper.lua b/kong/clustering/config_helper.lua index 313ee26e34e1..db3ef9053697 100644 --- a/kong/clustering/config_helper.lua +++ b/kong/clustering/config_helper.lua @@ -285,7 +285,6 @@ end ---@field config_table table ---@field config_hash string ---@field hashes table ----@field current_transaction_id? string|number ---@param declarative_config table @@ -343,7 +342,7 @@ local function update(declarative_config, msg) -- executed by worker 0 local res - res, err = declarative.load_into_cache_with_events(entities, meta, new_hash, hashes, msg.current_transaction_id) + res, err = declarative.load_into_cache_with_events(entities, meta, new_hash, hashes) if not res then ---@type kong.clustering.config_helper.update.err_t.reload err_t = { @@ -355,11 +354,6 @@ local function update(declarative_config, msg) return nil, err, err_t end - if kong.configuration.log_level == "debug" then - ngx_log(ngx.DEBUG, _log_prefix, "loaded configuration with transaction ID ", - msg.current_transaction_id) - end - return true end diff --git a/kong/clustering/control_plane.lua b/kong/clustering/control_plane.lua index dcb880162a2a..317466e2a827 100644 --- a/kong/clustering/control_plane.lua +++ b/kong/clustering/control_plane.lua @@ -10,7 +10,6 @@ local compat = require("kong.clustering.compat") local constants = require("kong.constants") local events = require("kong.clustering.events") local calculate_config_hash = require("kong.clustering.config_helper").calculate_config_hash -local global = require("kong.global") local string = string @@ -134,12 +133,6 @@ function _M:export_deflated_reconfigure_payload() hashes = hashes, } - local current_transaction_id - if kong.configuration.log_level == "debug" then - current_transaction_id = global.get_current_transaction_id() - payload.current_transaction_id = current_transaction_id - end - self.reconfigure_payload = payload payload, err = cjson_encode(payload) @@ -160,10 +153,6 @@ function _M:export_deflated_reconfigure_payload() self.current_config_hash = config_hash self.deflated_reconfigure_payload = payload - if kong.configuration.log_level == "debug" then - ngx_log(ngx_DEBUG, _log_prefix, "exported configuration with transaction id ", current_transaction_id) - end - return payload, nil, config_hash end diff --git a/kong/db/declarative/import.lua b/kong/db/declarative/import.lua index 132996bed5ab..80141a17996d 100644 --- a/kong/db/declarative/import.lua +++ b/kong/db/declarative/import.lua @@ -572,7 +572,7 @@ do local DECLARATIVE_LOCK_KEY = "declarative:lock" -- make sure no matter which path it exits, we released the lock. - load_into_cache_with_events = function(entities, meta, hash, hashes, transaction_id) + load_into_cache_with_events = function(entities, meta, hash, hashes) local kong_shm = ngx.shared.kong local ok, err = kong_shm:add(DECLARATIVE_LOCK_KEY, 0, DECLARATIVE_LOCK_TTL) @@ -588,10 +588,6 @@ do ok, err = load_into_cache_with_events_no_lock(entities, meta, hash, hashes) - if ok and transaction_id then - ok, err = kong_shm:set("declarative:current_transaction_id", transaction_id) - end - kong_shm:delete(DECLARATIVE_LOCK_KEY) return ok, err diff --git a/kong/global.lua b/kong/global.lua index 0acfda1698ce..ace19ae87fbe 100644 --- a/kong/global.lua +++ b/kong/global.lua @@ -69,7 +69,6 @@ end local _GLOBAL = { phases = phase_checker.phases, - CURRENT_TRANSACTION_ID = 0, } @@ -295,14 +294,4 @@ function _GLOBAL.init_timing() end -function _GLOBAL.get_current_transaction_id() - local rows, err = kong.db.connector:query("select txid_current() as _pg_transaction_id") - if not rows then - return nil, "could not query postgres for current transaction id: " .. err - else - return tonumber(rows[1]._pg_transaction_id) - end -end - - return _GLOBAL diff --git a/kong/init.lua b/kong/init.lua index f669d6a724b0..d37a08325a06 100644 --- a/kong/init.lua +++ b/kong/init.lua @@ -1832,10 +1832,6 @@ local function serve_content(module) ngx.header["Access-Control-Allow-Origin"] = ngx.req.get_headers()["Origin"] or "*" - if kong.configuration.log_level == "debug" then - ngx.header["Kong-Test-Transaction-Id"] = kong_global.get_current_transaction_id() - end - lapis.serve(module) ctx.KONG_ADMIN_CONTENT_ENDED_AT = get_updated_now_ms() diff --git a/kong/runloop/handler.lua b/kong/runloop/handler.lua index f944675c165e..01efbdfbf3aa 100644 --- a/kong/runloop/handler.lua +++ b/kong/runloop/handler.lua @@ -13,7 +13,6 @@ local concurrency = require "kong.concurrency" local lrucache = require "resty.lrucache" local ktls = require "resty.kong.tls" local request_id = require "kong.tracing.request_id" -local global = require "kong.global" local PluginsIterator = require "kong.runloop.plugins_iterator" @@ -51,7 +50,6 @@ local http_version = ngx.req.http_version local request_id_get = request_id.get local escape = require("kong.tools.uri").escape local encode = require("string.buffer").encode -local yield = require("kong.tools.yield").yield local req_dyn_hook_run_hooks = req_dyn_hook.run_hooks @@ -87,7 +85,6 @@ local QUESTION_MARK = byte("?") local ARRAY_MT = require("cjson.safe").array_mt local HOST_PORTS = {} -local IS_DEBUG = false local SUBSYSTEMS = constants.PROTOCOLS_WITH_SUBSYSTEM @@ -751,8 +748,6 @@ do wasm.set_state(wasm_state) end - global.CURRENT_TRANSACTION_ID = kong_shm:get("declarative:current_transaction_id") or 0 - return true end) -- concurrency.with_coroutine_mutex @@ -897,7 +892,6 @@ return { init_worker = { before = function() - IS_DEBUG = (kong.configuration.log_level == "debug") -- TODO: PR #9337 may affect the following line local prefix = kong.configuration.prefix or ngx.config.prefix() @@ -973,13 +967,6 @@ return { return end - -- Before rebuiding the internal structures, retrieve the current PostgreSQL transaction ID to make it the - -- current transaction ID after the rebuild has finished. - local rebuild_transaction_id, err = global.get_current_transaction_id() - if not rebuild_transaction_id then - log(ERR, err) - end - local router_update_status, err = rebuild_router({ name = "router", timeout = 0, @@ -1008,14 +995,6 @@ return { log(ERR, "could not rebuild wasm filter chains via timer: ", err) end end - - if rebuild_transaction_id then - -- Yield to process any pending invalidations - yield() - - log(DEBUG, "configuration processing completed for transaction ID ", rebuild_transaction_id) - global.CURRENT_TRANSACTION_ID = rebuild_transaction_id - end end local _, err = kong.timer:named_every("rebuild", @@ -1113,25 +1092,6 @@ return { }, access = { before = function(ctx) - if IS_DEBUG then - -- If this is a version-conditional request, abort it if this dataplane has not processed at least the - -- specified configuration version yet. - local if_kong_transaction_id = kong.request and kong.request.get_header('if-kong-test-transaction-id') - if if_kong_transaction_id then - if_kong_transaction_id = tonumber(if_kong_transaction_id) - if if_kong_transaction_id and if_kong_transaction_id >= global.CURRENT_TRANSACTION_ID then - return kong.response.error( - 503, - "Service Unavailable", - { - ["X-Kong-Reconfiguration-Status"] = "pending", - ["Retry-After"] = tostring(kong.configuration.worker_state_update_frequency or 1), - } - ) - end - end - end - -- if there is a gRPC service in the context, don't re-execute the pre-access -- phase handler - it has been executed before the internal redirect if ctx.service and (ctx.service.protocol == "grpc" or diff --git a/spec/02-integration/04-admin_api/02-kong_routes_spec.lua b/spec/02-integration/04-admin_api/02-kong_routes_spec.lua index 06e5ae656958..675e00eb58b4 100644 --- a/spec/02-integration/04-admin_api/02-kong_routes_spec.lua +++ b/spec/02-integration/04-admin_api/02-kong_routes_spec.lua @@ -50,8 +50,6 @@ describe("Admin API - Kong routes with strategy #" .. strategy, function() res2.headers["Date"] = nil res1.headers["X-Kong-Admin-Latency"] = nil res2.headers["X-Kong-Admin-Latency"] = nil - res1.headers["Kong-Test-Transaction-Id"] = nil - res2.headers["Kong-Test-Transaction-Id"] = nil assert.same(res1.headers, res2.headers) end) diff --git a/spec/02-integration/04-admin_api/24-reconfiguration-completion_spec.lua b/spec/02-integration/04-admin_api/24-reconfiguration-completion_spec.lua deleted file mode 100644 index 8f89d9c1d721..000000000000 --- a/spec/02-integration/04-admin_api/24-reconfiguration-completion_spec.lua +++ /dev/null @@ -1,156 +0,0 @@ -local helpers = require "spec.helpers" -local cjson = require "cjson" - -describe("Admin API - Reconfiguration Completion -", function() - - local WORKER_STATE_UPDATE_FREQ = 1 - - local admin_client - local proxy_client - - local function run_tests() - - local res = admin_client:post("/plugins", { - body = { - name = "request-termination", - config = { - status_code = 200, - body = "kong terminated the request", - } - }, - headers = { ["Content-Type"] = "application/json" }, - }) - assert.res_status(201, res) - - res = admin_client:post("/services", { - body = { - name = "test-service", - url = "http://127.0.0.1", - }, - headers = { ["Content-Type"] = "application/json" }, - }) - local body = assert.res_status(201, res) - local service = cjson.decode(body) - - -- We're running the route setup in `eventually` to cover for the unlikely case that reconfiguration completes - -- between adding the route and requesting the path through the proxy path. - - local next_path do - local path_suffix = 0 - function next_path() - path_suffix = path_suffix + 1 - return "/" .. tostring(path_suffix) - end - end - - local service_path - local kong_transaction_id - - assert.eventually(function() - service_path = next_path() - - res = admin_client:post("/services/" .. service.id .. "/routes", { - body = { - paths = { service_path } - }, - headers = { ["Content-Type"] = "application/json" }, - }) - assert.res_status(201, res) - kong_transaction_id = res.headers['kong-test-transaction-id'] - assert.is_string(kong_transaction_id) - - res = proxy_client:get(service_path, - { - headers = { - ["If-Kong-Test-Transaction-Id"] = kong_transaction_id - } - }) - assert.res_status(503, res) - assert.equals("pending", res.headers['x-kong-reconfiguration-status']) - local retry_after = tonumber(res.headers['retry-after']) - ngx.sleep(retry_after) - end) - .has_no_error() - - assert.eventually(function() - res = proxy_client:get(service_path, - { - headers = { - ["If-Kong-Test-Transaction-Id"] = kong_transaction_id - } - }) - body = assert.res_status(200, res) - assert.equals("kong terminated the request", body) - end) - .has_no_error() - end - - describe("#traditional mode -", function() - lazy_setup(function() - helpers.get_db_utils() - assert(helpers.start_kong({ - worker_consistency = "eventual", - worker_state_update_frequency = WORKER_STATE_UPDATE_FREQ, - })) - admin_client = helpers.admin_client() - proxy_client = helpers.proxy_client() - end) - - teardown(function() - if admin_client then - admin_client:close() - end - if proxy_client then - proxy_client:close() - end - helpers.stop_kong() - end) - - it("rejects proxy requests if worker state has not been updated yet", run_tests) - end) - - describe("#hybrid mode -", function() - lazy_setup(function() - helpers.get_db_utils() - - assert(helpers.start_kong({ - role = "control_plane", - database = "postgres", - prefix = "cp", - cluster_cert = "spec/fixtures/kong_clustering.crt", - cluster_cert_key = "spec/fixtures/kong_clustering.key", - lua_ssl_trusted_certificate = "spec/fixtures/kong_clustering.crt", - cluster_listen = "127.0.0.1:9005", - cluster_telemetry_listen = "127.0.0.1:9006", - nginx_conf = "spec/fixtures/custom_nginx.template", - })) - - assert(helpers.start_kong({ - role = "data_plane", - database = "off", - prefix = "dp", - cluster_cert = "spec/fixtures/kong_clustering.crt", - cluster_cert_key = "spec/fixtures/kong_clustering.key", - lua_ssl_trusted_certificate = "spec/fixtures/kong_clustering.crt", - cluster_control_plane = "127.0.0.1:9005", - cluster_telemetry_endpoint = "127.0.0.1:9006", - proxy_listen = "0.0.0.0:9002", - })) - admin_client = helpers.admin_client() - proxy_client = helpers.proxy_client("127.0.0.1", 9002) - end) - - teardown(function() - if admin_client then - admin_client:close() - end - if proxy_client then - proxy_client:close() - end - helpers.stop_kong("dp") - helpers.stop_kong("cp") - end) - - it("rejects proxy requests if worker state has not been updated yet", run_tests) - end) -end)