From 40c86fa09710d8e59f01f839eb26e45d27257876 Mon Sep 17 00:00:00 2001 From: Yufu Zhao Date: Fri, 26 Jul 2024 11:14:07 +0800 Subject: [PATCH] fix(opentelemetry): migration exception when upgrading from below version 3.3 to 3.7 (#13391) --- .../kong/fix-otel-migrations-exception.yml | 3 ++ .../migrations/001_331_to_332.lua | 4 ++ .../migrations/001_331_to_332_spec.lua | 51 ++++++++++++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 changelog/unreleased/kong/fix-otel-migrations-exception.yml diff --git a/changelog/unreleased/kong/fix-otel-migrations-exception.yml b/changelog/unreleased/kong/fix-otel-migrations-exception.yml new file mode 100644 index 000000000000..08ae5efec755 --- /dev/null +++ b/changelog/unreleased/kong/fix-otel-migrations-exception.yml @@ -0,0 +1,3 @@ +message: "**OpenTelemetry:** Fixed an issue where migration fails when upgrading from below version 3.3 to 3.7." +type: bugfix +scope: Plugin diff --git a/kong/plugins/opentelemetry/migrations/001_331_to_332.lua b/kong/plugins/opentelemetry/migrations/001_331_to_332.lua index 3916fba72037..b188c105183f 100644 --- a/kong/plugins/opentelemetry/migrations/001_331_to_332.lua +++ b/kong/plugins/opentelemetry/migrations/001_331_to_332.lua @@ -4,6 +4,10 @@ local operations = require "kong.db.migrations.operations.331_to_332" local function ws_migration_teardown(ops) return function(connector) return ops:fixup_plugin_config(connector, "opentelemetry", function(config) + if not config.queue then + return false + end + if config.queue.max_batch_size == 1 then config.queue.max_batch_size = 200 return true diff --git a/spec/05-migration/plugins/opentelemetry/migrations/001_331_to_332_spec.lua b/spec/05-migration/plugins/opentelemetry/migrations/001_331_to_332_spec.lua index 40251495dc7e..096cd2cdbab0 100644 --- a/spec/05-migration/plugins/opentelemetry/migrations/001_331_to_332_spec.lua +++ b/spec/05-migration/plugins/opentelemetry/migrations/001_331_to_332_spec.lua @@ -4,7 +4,56 @@ local uh = require "spec.upgrade_helpers" if uh.database_type() == 'postgres' then - local handler = uh.get_busted_handler("3.3.0", "3.6.0") + local handler = uh.get_busted_handler("3.0.0", "3.2.0") + handler("opentelemetry plugin migration", function() + lazy_setup(function() + assert(uh.start_kong()) + end) + + lazy_teardown(function () + assert(uh.stop_kong()) + end) + + uh.setup(function () + local admin_client = assert(uh.admin_client()) + + local res = assert(admin_client:send { + method = "POST", + path = "/plugins/", + body = { + name = "opentelemetry", + config = { + endpoint = "http://localhost:8080/v1/traces", + } + }, + headers = { + ["Content-Type"] = "application/json" + } + }) + assert.res_status(201, res) + admin_client:close() + end) + + uh.new_after_finish("has opentelemetry queue configuration", function () + local admin_client = assert(uh.admin_client()) + local res = assert(admin_client:send { + method = "GET", + path = "/plugins/" + }) + local body = cjson.decode(assert.res_status(200, res)) + assert.equal(1, #body.data) + assert.equal("opentelemetry", body.data[1].name) + local expected_config = { + queue = { + max_batch_size = 200 + }, + } + assert.partial_match(expected_config, body.data[1].config) + admin_client:close() + end) + end) + + handler = uh.get_busted_handler("3.3.0", "3.6.0") handler("opentelemetry plugin migration", function() lazy_setup(function() assert(uh.start_kong())