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..8214d9cf6 100644 --- a/cartridge/confapplier.lua +++ b/cartridge/confapplier.lua @@ -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 diff --git a/test/integration/expel_test.lua b/test/integration/expel_test.lua index 1ddfbadbc..1e0586558 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 = {}, @@ -93,4 +93,14 @@ 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. + + 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', ret) + end) end