fix(sessds): Rename session_persistence to durable_sessions

This commit is contained in:
ieQu1 2024-05-16 19:08:02 +02:00
parent ee6e7174cf
commit 73f17249e9
No known key found for this signature in database
GPG Key ID: 488654DF3FED6FDE
24 changed files with 45 additions and 43 deletions

View File

@ -56,7 +56,7 @@ init_per_testcase(t_session_gc = TestCase, Config) ->
n => 3, n => 3,
roles => [core, core, core], roles => [core, core, core],
extra_emqx_conf => extra_emqx_conf =>
"\n session_persistence {" "\n durable_sessions {"
"\n last_alive_update_interval = 500ms " "\n last_alive_update_interval = 500ms "
"\n session_gc_interval = 1s " "\n session_gc_interval = 1s "
"\n session_gc_batch_size = 2 " "\n session_gc_batch_size = 2 "
@ -116,7 +116,7 @@ app_specs() ->
app_specs(_Opts = #{}). app_specs(_Opts = #{}).
app_specs(Opts) -> app_specs(Opts) ->
DefaultEMQXConf = "session_persistence {enable = true, renew_streams_interval = 1s}", DefaultEMQXConf = "durable_sessions {enable = true, renew_streams_interval = 1s}",
ExtraEMQXConf = maps:get(extra_emqx_conf, Opts, ""), ExtraEMQXConf = maps:get(extra_emqx_conf, Opts, ""),
[ [
{emqx, DefaultEMQXConf ++ ExtraEMQXConf} {emqx, DefaultEMQXConf ++ ExtraEMQXConf}

View File

@ -58,7 +58,7 @@ is_persistence_enabled() ->
-spec is_persistence_enabled(emqx_types:zone()) -> boolean(). -spec is_persistence_enabled(emqx_types:zone()) -> boolean().
is_persistence_enabled(Zone) -> is_persistence_enabled(Zone) ->
emqx_config:get_zone_conf(Zone, [session_persistence, enable]). emqx_config:get_zone_conf(Zone, [durable_sessions, enable]).
-spec storage_backend() -> emqx_ds:create_db_opts(). -spec storage_backend() -> emqx_ds:create_db_opts().
storage_backend() -> storage_backend() ->
@ -68,7 +68,7 @@ storage_backend() ->
%% `emqx_persistent_session_ds': %% `emqx_persistent_session_ds':
-spec force_ds(emqx_types:zone()) -> boolean(). -spec force_ds(emqx_types:zone()) -> boolean().
force_ds(Zone) -> force_ds(Zone) ->
emqx_config:get_zone_conf(Zone, [session_persistence, force_persistence]). emqx_config:get_zone_conf(Zone, [durable_sessions, force_persistence]).
storage_backend(Path) -> storage_backend(Path) ->
ConfigTree = #{'_config_handler' := {Module, Function}} = emqx_config:get(Path), ConfigTree = #{'_config_handler' := {Module, Function}} = emqx_config:get(Path),
@ -78,12 +78,12 @@ storage_backend(Path) ->
-spec add_handler() -> ok. -spec add_handler() -> ok.
add_handler() -> add_handler() ->
emqx_config_handler:add_handler([session_persistence], ?MODULE). emqx_config_handler:add_handler([durable_sessions], ?MODULE).
pre_config_update([session_persistence], #{<<"enable">> := New}, #{<<"enable">> := Old}) when pre_config_update([durable_sessions], #{<<"enable">> := New}, #{<<"enable">> := Old}) when
New =/= Old New =/= Old
-> ->
{error, "Hot update of session_persistence.enable parameter is currently not supported"}; {error, "Hot update of durable_sessions.enable parameter is currently not supported"};
pre_config_update(_Root, _NewConf, _OldConf) -> pre_config_update(_Root, _NewConf, _OldConf) ->
ok. ok.

View File

@ -81,7 +81,7 @@ handle_info(_Info, State) ->
%%-------------------------------------------------------------------------------- %%--------------------------------------------------------------------------------
ensure_gc_timer() -> ensure_gc_timer() ->
Timeout = emqx_config:get([session_persistence, message_retention_period]), Timeout = emqx_config:get([durable_sessions, message_retention_period]),
_ = erlang:send_after(Timeout, self(), #gc{}), _ = erlang:send_after(Timeout, self(), #gc{}),
ok. ok.
@ -114,7 +114,7 @@ now_ms() ->
maybe_gc() -> maybe_gc() ->
AllGens = emqx_ds:list_generations_with_lifetimes(?PERSISTENT_MESSAGE_DB), AllGens = emqx_ds:list_generations_with_lifetimes(?PERSISTENT_MESSAGE_DB),
NowMS = now_ms(), NowMS = now_ms(),
RetentionPeriod = emqx_config:get([session_persistence, message_retention_period]), RetentionPeriod = emqx_config:get([durable_sessions, message_retention_period]),
TimeThreshold = NowMS - RetentionPeriod, TimeThreshold = NowMS - RetentionPeriod,
maybe_create_new_generation(AllGens, TimeThreshold), maybe_create_new_generation(AllGens, TimeThreshold),
?tp_span( ?tp_span(

View File

@ -102,6 +102,6 @@ tally_persistent_subscriptions(State0) ->
State0#{subs_count := N}. State0#{subs_count := N}.
ensure_subs_tally_timer() -> ensure_subs_tally_timer() ->
Timeout = emqx_config:get([session_persistence, subscription_count_refresh_interval]), Timeout = emqx_config:get([durable_sessions, subscription_count_refresh_interval]),
_ = erlang:send_after(Timeout, self(), #tally_subs{}), _ = erlang:send_after(Timeout, self(), #tally_subs{}),
ok. ok.

View File

@ -1150,10 +1150,10 @@ expiry_interval(ConnInfo) ->
%% zone, since the GC process is responsible for all sessions %% zone, since the GC process is responsible for all sessions
%% regardless of the zone. %% regardless of the zone.
bump_interval() -> bump_interval() ->
emqx_config:get([session_persistence, last_alive_update_interval]). emqx_config:get([durable_sessions, last_alive_update_interval]).
get_config(#{zone := Zone}, Key) -> get_config(#{zone := Zone}, Key) ->
emqx_config:get_zone_conf(Zone, [session_persistence | Key]). emqx_config:get_zone_conf(Zone, [durable_sessions | Key]).
-spec try_get_live_session(emqx_types:clientid()) -> -spec try_get_live_session(emqx_types:clientid()) ->
{pid(), session()} | not_found | not_persistent. {pid(), session()} | not_found | not_persistent.

View File

@ -93,7 +93,7 @@ handle_info(_Info, State) ->
%%-------------------------------------------------------------------------------- %%--------------------------------------------------------------------------------
ensure_gc_timer() -> ensure_gc_timer() ->
Timeout = emqx_config:get([session_persistence, session_gc_interval]), Timeout = emqx_config:get([durable_sessions, session_gc_interval]),
_ = erlang:send_after(Timeout, self(), #gc{}), _ = erlang:send_after(Timeout, self(), #gc{}),
ok. ok.
@ -133,8 +133,8 @@ start_gc() ->
). ).
gc_context() -> gc_context() ->
GCInterval = emqx_config:get([session_persistence, session_gc_interval]), GCInterval = emqx_config:get([durable_sessions, session_gc_interval]),
BumpInterval = emqx_config:get([session_persistence, last_alive_update_interval]), BumpInterval = emqx_config:get([durable_sessions, last_alive_update_interval]),
TimeThreshold = max(GCInterval, BumpInterval) * 3, TimeThreshold = max(GCInterval, BumpInterval) * 3,
NowMS = now_ms(), NowMS = now_ms(),
#{ #{
@ -149,7 +149,7 @@ gc_context() ->
}. }.
gc_loop(MinLastAlive, MinLastAliveWillMsg, It0) -> gc_loop(MinLastAlive, MinLastAliveWillMsg, It0) ->
GCBatchSize = emqx_config:get([session_persistence, session_gc_batch_size]), GCBatchSize = emqx_config:get([durable_sessions, session_gc_batch_size]),
case emqx_persistent_session_ds_state:session_iterator_next(It0, GCBatchSize) of case emqx_persistent_session_ds_state:session_iterator_next(It0, GCBatchSize) of
{[], _It} -> {[], _It} ->
ok; ok;

View File

@ -303,9 +303,9 @@ roots(low) ->
converter => fun flapping_detect_converter/2 converter => fun flapping_detect_converter/2
} }
)}, )},
{session_persistence, {durable_sessions,
sc( sc(
ref("session_persistence"), ref("durable_sessions"),
#{ #{
importance => ?IMPORTANCE_HIDDEN importance => ?IMPORTANCE_HIDDEN
} }
@ -1652,12 +1652,12 @@ fields("trace") ->
desc => ?DESC(fields_trace_payload_encode) desc => ?DESC(fields_trace_payload_encode)
})} })}
]; ];
fields("session_persistence") -> fields("durable_sessions") ->
[ [
{"enable", {"enable",
sc( sc(
boolean(), #{ boolean(), #{
desc => ?DESC(session_persistence_enable), desc => ?DESC(durable_sessions_enable),
default => false default => false
} }
)}, )},
@ -2091,7 +2091,7 @@ desc("ocsp") ->
"Per listener OCSP Stapling configuration."; "Per listener OCSP Stapling configuration.";
desc("crl_cache") -> desc("crl_cache") ->
"Global CRL cache options."; "Global CRL cache options.";
desc("session_persistence") -> desc("durable_sessions") ->
"Settings governing durable sessions persistence."; "Settings governing durable sessions persistence.";
desc(durable_storage) -> desc(durable_storage) ->
?DESC(durable_storage); ?DESC(durable_storage);

View File

@ -34,7 +34,7 @@ roots() ->
conn_congestion, conn_congestion,
force_gc, force_gc,
overload_protection, overload_protection,
session_persistence durable_sessions
]. ].
zones_without_default() -> zones_without_default() ->

View File

@ -465,7 +465,7 @@ zone_global_defaults() ->
enable => false enable => false
}, },
stats => #{enable => true}, stats => #{enable => true},
session_persistence => durable_sessions =>
#{ #{
enable => false, enable => false,
batch_size => 100, batch_size => 100,

View File

@ -46,7 +46,7 @@ init_per_testcase(t_session_subscription_iterators = TestCase, Config) ->
init_per_testcase(t_message_gc = TestCase, Config) -> init_per_testcase(t_message_gc = TestCase, Config) ->
Opts = #{ Opts = #{
extra_emqx_conf => extra_emqx_conf =>
"\n session_persistence.message_retention_period = 3s" "\n durable_sessions.message_retention_period = 3s"
"\n durable_storage.messages.n_shards = 3" "\n durable_storage.messages.n_shards = 3"
}, },
common_init_per_testcase(TestCase, [{n_shards, 3} | Config], Opts); common_init_per_testcase(TestCase, [{n_shards, 3} | Config], Opts);
@ -554,7 +554,7 @@ app_specs(Opts) ->
ExtraEMQXConf = maps:get(extra_emqx_conf, Opts, ""), ExtraEMQXConf = maps:get(extra_emqx_conf, Opts, ""),
[ [
emqx_durable_storage, emqx_durable_storage,
{emqx, "session_persistence {enable = true}" ++ ExtraEMQXConf} {emqx, "durable_sessions {enable = true}" ++ ExtraEMQXConf}
]. ].
cluster() -> cluster() ->

View File

@ -68,7 +68,7 @@ groups() ->
init_per_group(persistence_disabled, Config) -> init_per_group(persistence_disabled, Config) ->
[ [
{emqx_config, ?EMQX_CONFIG ++ "session_persistence { enable = false }"}, {emqx_config, ?EMQX_CONFIG ++ "durable_sessions { enable = false }"},
{persistence, false} {persistence, false}
| Config | Config
]; ];
@ -76,7 +76,7 @@ init_per_group(persistence_enabled, Config) ->
[ [
{emqx_config, {emqx_config,
?EMQX_CONFIG ++ ?EMQX_CONFIG ++
"session_persistence {\n" "durable_sessions {\n"
" enable = true\n" " enable = true\n"
" last_alive_update_interval = 100ms\n" " last_alive_update_interval = 100ms\n"
" renew_streams_interval = 100ms\n" " renew_streams_interval = 100ms\n"

View File

@ -38,7 +38,7 @@ init_per_suite(Config) ->
AppSpecs = [ AppSpecs = [
emqx_durable_storage, emqx_durable_storage,
{emqx, #{ {emqx, #{
config => #{session_persistence => #{enable => true}}, config => #{durable_sessions => #{enable => true}},
override_env => [{boot_modules, [broker]}] override_env => [{boot_modules, [broker]}]
}} }}
], ],

View File

@ -69,7 +69,7 @@ init_per_group(persistence_enabled = Group, Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[ [
{emqx, {emqx,
"session_persistence = {\n" "durable_sessions = {\n"
" enable = true\n" " enable = true\n"
" last_alive_update_interval = 100ms\n" " last_alive_update_interval = 100ms\n"
" renew_streams_interval = 100ms\n" " renew_streams_interval = 100ms\n"
@ -85,7 +85,7 @@ init_per_group(persistence_enabled = Group, Config) ->
]; ];
init_per_group(persistence_disabled = Group, Config) -> init_per_group(persistence_disabled = Group, Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[{emqx, "session_persistence.enable = false"}], [{emqx, "durable_sessions.enable = false"}],
#{work_dir => emqx_cth_suite:work_dir(Group, Config)} #{work_dir => emqx_cth_suite:work_dir(Group, Config)}
), ),
[ [

View File

@ -208,7 +208,7 @@ hidden_roots() ->
<<"stats">>, <<"stats">>,
<<"broker">>, <<"broker">>,
<<"persistent_session_store">>, <<"persistent_session_store">>,
<<"session_persistence">>, <<"durable_sessions">>,
<<"plugins">>, <<"plugins">>,
<<"zones">> <<"zones">>
]. ].

View File

@ -82,7 +82,7 @@ init_per_group(persistent_sessions = Group, Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[ [
emqx_conf, emqx_conf,
{emqx, "session_persistence {enable = true}"}, {emqx, "durable_sessions {enable = true}"},
{emqx_retainer, ?BASE_RETAINER_CONF}, {emqx_retainer, ?BASE_RETAINER_CONF},
emqx_management, emqx_management,
emqx_mgmt_api_test_util:emqx_dashboard( emqx_mgmt_api_test_util:emqx_dashboard(

View File

@ -65,7 +65,7 @@
<<"limiter">>, <<"limiter">>,
<<"log">>, <<"log">>,
<<"persistent_session_store">>, <<"persistent_session_store">>,
<<"session_persistence">>, <<"durable_sessions">>,
<<"prometheus">>, <<"prometheus">>,
<<"crl_cache">>, <<"crl_cache">>,
<<"conn_congestion">>, <<"conn_congestion">>,

View File

@ -46,7 +46,7 @@ groups() ->
init_per_group(persistence_disabled, Config) -> init_per_group(persistence_disabled, Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[ [
{emqx, "session_persistence { enable = false }"}, {emqx, "durable_sessions { enable = false }"},
emqx_management emqx_management
], ],
#{work_dir => emqx_cth_suite:work_dir(Config)} #{work_dir => emqx_cth_suite:work_dir(Config)}
@ -59,7 +59,7 @@ init_per_group(persistence_enabled, Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[ [
{emqx, {emqx,
"session_persistence {\n" "durable_sessions {\n"
" enable = true\n" " enable = true\n"
" last_alive_update_interval = 100ms\n" " last_alive_update_interval = 100ms\n"
" renew_streams_interval = 100ms\n" " renew_streams_interval = 100ms\n"

View File

@ -79,7 +79,7 @@ end_per_suite(Config) ->
init_per_group(persistent_sessions, Config) -> init_per_group(persistent_sessions, Config) ->
AppSpecs = [ AppSpecs = [
{emqx, "session_persistence.enable = true"}, {emqx, "durable_sessions.enable = true"},
emqx_management emqx_management
], ],
Dashboard = emqx_mgmt_api_test_util:emqx_dashboard( Dashboard = emqx_mgmt_api_test_util:emqx_dashboard(

View File

@ -29,7 +29,7 @@ all() ->
init_per_suite(Config) -> init_per_suite(Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[ [
{emqx, "session_persistence.enable = true"}, {emqx, "durable_sessions.enable = true"},
emqx_management, emqx_management,
{emqx_dashboard, "dashboard.listeners.http { enable = true, bind = 18083 }"} {emqx_dashboard, "dashboard.listeners.http { enable = true, bind = 18083 }"}
], ],

View File

@ -61,7 +61,7 @@ init_per_suite(Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[ [
{emqx, {emqx,
"session_persistence {\n" "durable_sessions {\n"
" enable = true\n" " enable = true\n"
" renew_streams_interval = 10ms\n" " renew_streams_interval = 10ms\n"
"}"}, "}"},

View File

@ -27,7 +27,7 @@ all() ->
init_per_suite(Config) -> init_per_suite(Config) ->
Apps = emqx_cth_suite:start( Apps = emqx_cth_suite:start(
[ [
{emqx, "session_persistence.enable = true"}, {emqx, "durable_sessions.enable = true"},
emqx_management, emqx_management,
emqx_mgmt_api_test_util:emqx_dashboard() emqx_mgmt_api_test_util:emqx_dashboard()
], ],

View File

@ -1,2 +1,2 @@
Make it possible to override `session_persistence` settings per zone. Make it possible to override `durable_sessions` settings per zone.
Since durable sessions are inherently more expensive to maintain than the regular sessions, it's desirable to grant the operator finer control of session durability for different classes of clients. Since durable sessions are inherently more expensive to maintain than the regular sessions, it's desirable to grant the operator finer control of session durability for different classes of clients.

View File

@ -0,0 +1,2 @@
- Rename durable storage for MQTT messages from `emqx_persistent_message` to `messages`
- Rename configuration root from `session_persistence` to `durable_sessions`

View File

@ -1207,7 +1207,7 @@ base_listener_zone.desc: """~
- `force_shutdown` - `force_shutdown`
- `force_gc` - `force_gc`
- `flapping_detect` - `flapping_detect`
- `session_persistence`""" - `durable_sessions`"""
base_listener_zone.label: "Zone" base_listener_zone.label: "Zone"
@ -1544,10 +1544,10 @@ resource_tags.label:
resource_tags.desc: resource_tags.desc:
"""Tags to annotate this config entry.""" """Tags to annotate this config entry."""
session_persistence_enable.label: durable_sessions_enable.label:
"""Enable session persistence""" """Enable session persistence"""
session_persistence_enable.desc: durable_sessions_enable.desc:
"""Use durable storage for client sessions persistence. """Use durable storage for client sessions persistence.
If enabled, sessions configured to outlive client connections, along with their corresponding messages, will be durably stored and survive broker downtime. If enabled, sessions configured to outlive client connections, along with their corresponding messages, will be durably stored and survive broker downtime.