From 021dd47c242e7dd9da21e2f206ce33244a851050 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Thu, 19 Dec 2024 20:10:07 +0300 Subject: [PATCH 1/7] Mark expelled instances as `left` --- CHANGELOG.rst | 2 ++ cartridge/confapplier.lua | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index acbcca21c..c804be224 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -24,6 +24,8 @@ Changed - Update ``membership`` dependency to `2.4.6 `_. +- Expelled instances are now marked as ``left`` in ``membership``. + ------------------------------------------------------------------------------- [2.13.0] - 2024-11-28 ------------------------------------------------------------------------------- diff --git a/cartridge/confapplier.lua b/cartridge/confapplier.lua index a8e0b4570..c74c3d957 100644 --- a/cartridge/confapplier.lua +++ b/cartridge/confapplier.lua @@ -12,10 +12,10 @@ local yaml = require('yaml').new() local fiber = require('fiber') local errors = require('errors') local checks = require('checks') -local membership = require('membership') local uri_tools = require('uri') local socket = require('socket') local json = require('json') +local membership = require('membership') local vars = require('cartridge.vars').new('cartridge.confapplier') local pool = require('cartridge.pool') @@ -292,6 +292,7 @@ local function apply_config(clusterwide_config) if failover.is_leader() then for _, uuid, _ in fun.filter(topology.expelled, topology_cfg.servers) do box.space._cluster.index.uuid:delete(uuid) + membership.mark_left(topology_cfg.servers[uuid].uri) end end From b7105b07a7659cba8c99b97422bba6d2bb971398 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Tue, 14 Jan 2025 23:01:41 +0300 Subject: [PATCH 2/7] Revert line shift --- cartridge/confapplier.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cartridge/confapplier.lua b/cartridge/confapplier.lua index c74c3d957..8214d9cf6 100644 --- a/cartridge/confapplier.lua +++ b/cartridge/confapplier.lua @@ -12,10 +12,10 @@ local yaml = require('yaml').new() local fiber = require('fiber') local errors = require('errors') local checks = require('checks') +local membership = require('membership') local uri_tools = require('uri') local socket = require('socket') local json = require('json') -local membership = require('membership') local vars = require('cartridge.vars').new('cartridge.confapplier') local pool = require('cartridge.pool') From 27b7cb70978de56dbd1bd3a411671ead21a0004e Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Tue, 14 Jan 2025 23:50:05 +0300 Subject: [PATCH 3/7] Add test --- test/integration/expel_test.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/integration/expel_test.lua b/test/integration/expel_test.lua index 1ddfbadbc..fa8d3a319 100644 --- a/test/integration/expel_test.lua +++ b/test/integration/expel_test.lua @@ -93,4 +93,12 @@ function g.test_api() g.A1.net_box.space._cluster:select(), {{1, g.r1_uuid}, {3, g.r3_uuid}} ) + + -- Check explicitly that expelled leader has left membership. Just in case also. + local ret = g.A1:exec(function() + local membership = require('membership') + return membership.members() + end) + + t.assert_equals(ret[g.cluster:server('A-2').advertise_uri].status, 'left') end From c00ae63b1da6dcb4ff76a142cfad3bebfc6f17db Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Tue, 14 Jan 2025 23:58:22 +0300 Subject: [PATCH 4/7] Add retrying --- test/integration/expel_test.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/integration/expel_test.lua b/test/integration/expel_test.lua index fa8d3a319..e51abdca8 100644 --- a/test/integration/expel_test.lua +++ b/test/integration/expel_test.lua @@ -100,5 +100,7 @@ function g.test_api() return membership.members() end) - t.assert_equals(ret[g.cluster:server('A-2').advertise_uri].status, 'left') + g.cluster.helpers.retrying({}, function () + t.assert_equals(ret[g.cluster:server('A-2').advertise_uri].status, 'left') + end) end From be3b74e9d3eb2bd940a1c241371a7f8f8e6fa079 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Wed, 15 Jan 2025 00:41:19 +0300 Subject: [PATCH 5/7] Fix call --- test/integration/expel_test.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/expel_test.lua b/test/integration/expel_test.lua index e51abdca8..9730bc460 100644 --- a/test/integration/expel_test.lua +++ b/test/integration/expel_test.lua @@ -100,7 +100,7 @@ function g.test_api() return membership.members() end) - g.cluster.helpers.retrying({}, function () + g.cluster:retrying({}, function () t.assert_equals(ret[g.cluster:server('A-2').advertise_uri].status, 'left') end) end From b061a1ce516c4a8dd840c49390b2aa15e2fc298d Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Thu, 16 Jan 2025 02:06:12 +0300 Subject: [PATCH 6/7] Fix test --- test/integration/expel_test.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/expel_test.lua b/test/integration/expel_test.lua index 9730bc460..9275198ff 100644 --- a/test/integration/expel_test.lua +++ b/test/integration/expel_test.lua @@ -9,7 +9,7 @@ g.before_all(function() datadir = fio.tempdir(), use_vshard = false, server_command = helpers.entrypoint('srv_basic'), - cookie = helpers.random_cookie(), + cookie = 'secret', --helpers.random_cookie(), replicasets = {{ alias = 'A', roles = {}, @@ -95,12 +95,12 @@ function g.test_api() ) -- Check explicitly that expelled leader has left membership. Just in case also. - local ret = g.A1:exec(function() - local membership = require('membership') - return membership.members() - end) g.cluster:retrying({}, function () + local ret = g.A1:exec(function() + local membership = require('membership') + return membership.members() + end) t.assert_equals(ret[g.cluster:server('A-2').advertise_uri].status, 'left') end) end From 20e367edf48813aed0010519c8139f47d80a40d6 Mon Sep 17 00:00:00 2001 From: Igor Zolotarev Date: Thu, 16 Jan 2025 02:14:36 +0300 Subject: [PATCH 7/7] Add timeout --- test/integration/expel_test.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/expel_test.lua b/test/integration/expel_test.lua index 9275198ff..1e0586558 100644 --- a/test/integration/expel_test.lua +++ b/test/integration/expel_test.lua @@ -96,11 +96,11 @@ function g.test_api() -- Check explicitly that expelled leader has left membership. Just in case also. - g.cluster:retrying({}, function () + g.cluster:retrying({timeout = 10}, function () local ret = g.A1:exec(function() local membership = require('membership') return membership.members() end) - t.assert_equals(ret[g.cluster:server('A-2').advertise_uri].status, 'left') + t.assert_equals(ret[g.cluster:server('A-2').advertise_uri].status, 'left', ret) end) end