diff --git a/kong/clustering/services/sync/rpc.lua b/kong/clustering/services/sync/rpc.lua index 3bcd515520f..771e992d9d1 100644 --- a/kong/clustering/services/sync/rpc.lua +++ b/kong/clustering/services/sync/rpc.lua @@ -23,7 +23,6 @@ local MAX_RETRY = 5 local assert = assert local ipairs = ipairs -local sub = string.sub local ngx_null = ngx.null local ngx_log = ngx.log local ngx_ERR = ngx.ERR @@ -60,17 +59,6 @@ local function get_current_version() end -local is_valid_version -do - local VER_PREFIX = "v02_" - - -- version string must start with 'v02_' - is_valid_version = function(v) - return sub(v, 1, 4) == VER_PREFIX - end -end - - function _M:init_cp(manager) local purge_delay = manager.conf.cluster_data_plane_purge_delay @@ -118,7 +106,7 @@ function _M:init_cp(manager) end -- string comparison effectively does the same as number comparison - if not is_valid_version(default_namespace_version) or + if not self.strategy:is_valid_version(default_namespace_version) or default_namespace_version ~= latest_version then return full_sync_result() end diff --git a/kong/clustering/services/sync/strategies/postgres.lua b/kong/clustering/services/sync/strategies/postgres.lua index 20e594d92f3..06da15cabdc 100644 --- a/kong/clustering/services/sync/strategies/postgres.lua +++ b/kong/clustering/services/sync/strategies/postgres.lua @@ -2,12 +2,15 @@ local _M = {} local _MT = { __index = _M } +local sub = string.sub local fmt = string.format local ngx_null = ngx.null -- version string should look like: "v02_0000" -local VERSION_FMT = "v02_%028x" +local VER_PREFIX = "v02_" +local VER_PREFIX_LEN = #VER_PREFIX +local VERSION_FMT = VER_PREFIX .. "%028x" function _M.new(db) @@ -56,6 +59,11 @@ function _M:get_latest_version() end +function _M:is_valid_version(str) + return sub(str, 1, VER_PREFIX_LEN) == VER_PREFIX +end + + function _M:begin_txn() return self.connector:query("BEGIN;") end