Skip to content

Commit 4da9183

Browse files
Add members.remove function (#54)
1 parent 70a1847 commit 4da9183

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
99
### Added
1010

1111
- IPv6 support.
12+
- `remove_member` function to clean up member data.
1213

1314

1415
## [2.4.1] - 2023-09-28
16+
1517
### Fixed
1618

1719
- Log overflow when inner fibers weren't canceled.

membership.lua

+22-1
Original file line numberDiff line numberDiff line change
@@ -479,13 +479,17 @@ local function _protocol_step()
479479
local ack_data = wait_ack(uri, loop_now, opts.ACK_TIMEOUT_SECONDS * 1.0e6)
480480
if ack_data ~= nil then
481481
local member = members.get(uri)
482+
if member == nil then
483+
return
484+
end
482485
-- calculate time difference between local time and member time
483486
local delta = _get_clock_delta(ack_data)
484487
members.set(uri, member.status, member.incarnation, { clock_delta = delta }) -- update timstamp
485488
return
486489
end
487490
end
488-
if members.get(uri).status >= opts.DEAD then
491+
local member = members.get(uri)
492+
if member ~= nil and member.status >= opts.DEAD then
489493
-- still dead, do nothing
490494
return
491495
end
@@ -510,6 +514,9 @@ local function _protocol_step()
510514
end
511515
if sent_indirect > 0 and ack_data ~= nil then
512516
local member = members.get(uri)
517+
if member == nil then
518+
return
519+
end
513520
-- calculate time difference between local time and member time
514521
local delta = _get_clock_delta(ack_data)
515522
members.set(uri, member.status, member.incarnation, { clock_delta = delta })
@@ -941,6 +948,19 @@ local function set_payload(key, value)
941948
return true
942949
end
943950

951+
--- Remove a member. Don't use it unless you having a trouble with stale members.
952+
-- @function remove_member
953+
-- @tparam uri string
954+
local function remove_member(uri)
955+
checks('string')
956+
local member = members.get(uri)
957+
if member == nil then
958+
return
959+
end
960+
961+
members.remove(uri)
962+
end
963+
944964
do -- finish module loading
945965
opts.after_reload()
946966
events.after_reload()
@@ -961,6 +981,7 @@ return {
961981
probe_uri = probe_uri,
962982
add_member = add_member,
963983
get_member = get_member,
984+
remove_member = remove_member,
964985
set_payload = set_payload,
965986

966987
--- Encryption Functions.

membership/members.lua

+9
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,13 @@ function members.count()
117117
return count
118118
end
119119

120+
function members.remove(uri)
121+
checks('string')
122+
123+
_all_members[uri] = nil
124+
local stash = rawget(_G, '__membership_stash')
125+
stash['members._all_members'][uri] = nil
126+
stash['_resolve_cache'][uri] = nil
127+
end
128+
120129
return members

0 commit comments

Comments
 (0)