@@ -479,13 +479,17 @@ local function _protocol_step()
479
479
local ack_data = wait_ack (uri , loop_now , opts .ACK_TIMEOUT_SECONDS * 1.0e6 )
480
480
if ack_data ~= nil then
481
481
local member = members .get (uri )
482
+ if member == nil then
483
+ return
484
+ end
482
485
-- calculate time difference between local time and member time
483
486
local delta = _get_clock_delta (ack_data )
484
487
members .set (uri , member .status , member .incarnation , { clock_delta = delta }) -- update timstamp
485
488
return
486
489
end
487
490
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
489
493
-- still dead, do nothing
490
494
return
491
495
end
@@ -510,6 +514,9 @@ local function _protocol_step()
510
514
end
511
515
if sent_indirect > 0 and ack_data ~= nil then
512
516
local member = members .get (uri )
517
+ if member == nil then
518
+ return
519
+ end
513
520
-- calculate time difference between local time and member time
514
521
local delta = _get_clock_delta (ack_data )
515
522
members .set (uri , member .status , member .incarnation , { clock_delta = delta })
@@ -941,6 +948,19 @@ local function set_payload(key, value)
941
948
return true
942
949
end
943
950
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
+
944
964
do -- finish module loading
945
965
opts .after_reload ()
946
966
events .after_reload ()
@@ -961,6 +981,7 @@ return {
961
981
probe_uri = probe_uri ,
962
982
add_member = add_member ,
963
983
get_member = get_member ,
984
+ remove_member = remove_member ,
964
985
set_payload = set_payload ,
965
986
966
987
--- Encryption Functions.
0 commit comments