diff --git a/src/emqx.appup.src b/src/emqx.appup.src index fdf2d4aa0..dc12048a8 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -2,20 +2,29 @@ %% Unless you know what you are doing, DO NOT edit manually!! {VSN, [{"4.4.18", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.17", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_plugins,brutal_purge,soft_purge,[]}]}, {"4.4.16", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, @@ -25,7 +34,10 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.15", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, @@ -37,7 +49,8 @@ {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.14", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, @@ -56,7 +69,8 @@ {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}]}, {"4.4.13", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, @@ -76,7 +90,8 @@ {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.12", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, @@ -96,7 +111,8 @@ {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.11", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, @@ -118,7 +134,8 @@ {load_module,emqx_session,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}]}, {"4.4.10", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -148,7 +165,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.9", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -183,7 +201,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.8", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -219,7 +238,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.7", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -255,7 +275,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.6", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -291,7 +312,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.5", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -329,7 +351,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.4", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -373,7 +396,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.3", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -423,7 +447,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.2", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -474,7 +499,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.1", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -529,7 +555,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.0", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {add_module,emqx_const_v2}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -587,18 +614,27 @@ [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {<<".*">>,[]}], [{"4.4.18", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.17", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_plugins,brutal_purge,soft_purge,[]}]}, {"4.4.16", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, @@ -607,7 +643,10 @@ {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.15", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, @@ -618,7 +657,8 @@ {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.14", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, @@ -636,7 +676,8 @@ {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}]}, {"4.4.13", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, @@ -655,7 +696,8 @@ {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.12", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, @@ -674,7 +716,8 @@ {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.11", - [{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, @@ -695,7 +738,8 @@ {load_module,emqx_session,brutal_purge,soft_purge,[]}, {delete_module,emqx_cover}]}, {"4.4.10", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -721,7 +765,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.9", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -751,7 +796,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.8", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -782,7 +828,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.7", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -813,7 +860,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.6", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -844,7 +892,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.5", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -877,7 +926,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.4", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -916,7 +966,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.3", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -960,7 +1011,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.2", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -1005,7 +1057,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.1", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, @@ -1054,7 +1107,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.0", - [{load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, + [{load_module,emqx_cm_locker,brutal_purge,soft_purge,[]}, + {load_module,emqx_tls_lib,brutal_purge,soft_purge,[]}, {load_module,emqx_pool,brutal_purge,soft_purge,[]}, {load_module,emqx_vm,brutal_purge,soft_purge,[]}, {load_module,emqx_keepalive,brutal_purge,soft_purge,[]}, diff --git a/src/emqx_cm.erl b/src/emqx_cm.erl index 1c14fec43..189c26079 100644 --- a/src/emqx_cm.erl +++ b/src/emqx_cm.erl @@ -142,11 +142,14 @@ insert_channel_info(ClientId, Info, Stats) -> %% Note that: It should be called on a lock transaction register_channel(ClientId, ChanPid, #{conn_mod := ConnMod}) when is_pid(ChanPid) -> Chan = {ClientId, ChanPid}, + %% Note that cast/1 should be called before ets:insert/2 to reduce the possibility + %% of leakage in ETS tables due to the process dies before being monitored. + cast({registered, Chan}), true = ets:insert(?CHAN_TAB, Chan), true = ets:insert(?CHAN_CONN_TAB, {Chan, ConnMod}), ok = emqx_cm_registry:register_channel(Chan), mark_channel_connected(ChanPid), - cast({registered, Chan}). + ok. %% @doc Unregister a channel. -spec(unregister_channel(emqx_types:clientid()) -> ok). @@ -380,6 +383,8 @@ force_kill(Pid) -> exit(Pid, kill), ok. +stale_channel_info(Pid) when node(Pid) =/= node() -> + non_local_proc_info; stale_channel_info(Pid) -> process_info(Pid, [status, message_queue_len, current_stacktrace]). diff --git a/src/emqx_cm_locker.erl b/src/emqx_cm_locker.erl index ad17aab06..ddbdd91d9 100644 --- a/src/emqx_cm_locker.erl +++ b/src/emqx_cm_locker.erl @@ -33,9 +33,13 @@ -export([strategy/0]). -endif. +%% The takeover timeout (T_TAKEOVER) in emqx_cm is 15s, we should use a sufficent expiration +%% time to avoid being killed by the ekka_locker before completing the entire takeover task. +-define(EXPIRY_TIMEOUT, 60_000). + -spec(start_link() -> startlink_ret()). start_link() -> - ekka_locker:start_link(?MODULE). + ekka_locker:start_link(?MODULE, ?EXPIRY_TIMEOUT). -spec(trans(emqx_types:clientid(), fun(([node()]) -> any())) -> any()). trans(ClientId, Fun) ->