fix(mnesia): apply dump_log_write_threshold before mnesia start.
change_config rejected the key; set_env + verify enables the IFT ceiling ladder. Refs EventHub/EventHubBack#30 Refs EventHub/EventHubBack#34 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -16,7 +16,10 @@
|
||||
]}
|
||||
]},
|
||||
{mnesia, [
|
||||
{dir, "data/Mnesia.eventhub@${NODE_NAME}"}
|
||||
{dir, "data/Mnesia.eventhub@${NODE_NAME}"},
|
||||
%% Soften dump_log under write load; override via MNESIA_DUMP_LOG_WRITE_THRESHOLD
|
||||
%% before start (infra_mnesia:configure_dump_log/0). OTP default ~1000.
|
||||
{dump_log_write_threshold, 50000}
|
||||
]},
|
||||
{ cowboy_swagger, [
|
||||
{ static_files, "./_build/default/lib/cowboy_swagger/priv/swagger" }
|
||||
|
||||
@@ -46,8 +46,9 @@ start_application() ->
|
||||
io:format("~nCluster: discovered nodes ~p, joining cluster~n", [Nodes]),
|
||||
application:set_env(eventhub, extra_db_nodes, Nodes)
|
||||
end,
|
||||
application:ensure_all_started(mnesia),
|
||||
ok = infra_mnesia:configure_dump_log(),
|
||||
application:ensure_all_started(mnesia),
|
||||
ok = infra_mnesia:verify_dump_log(),
|
||||
ok = infra_mnesia:init_tables(),
|
||||
ok = infra_mnesia:wait_for_tables(),
|
||||
ok = migration_engine:ensure_applied(),
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
-export([start_link/0, init_tables/0, wait_for_tables/0, wait_for_table/1]).
|
||||
-export([add_cluster_nodes/1]).
|
||||
-export([configure_dump_log/0]).
|
||||
-export([configure_dump_log/0, verify_dump_log/0]).
|
||||
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
||||
terminate/2, code_change/3]).
|
||||
|
||||
@@ -48,16 +48,31 @@ add_cluster_nodes(Nodes) ->
|
||||
%% @doc Soften dump_log overload under write-heavy load (IFT stress).
|
||||
%% OTP warns {dump_log, write_threshold|time_threshold} when a new dump
|
||||
%% is requested while the previous dump still runs.
|
||||
%% Must be set BEFORE mnesia starts — change_config/2 does not accept
|
||||
%% dump_log_write_threshold (returns {error, dump_log_write_threshold}).
|
||||
%% Override: MNESIA_DUMP_LOG_WRITE_THRESHOLD (default 50000; OTP default ~1000).
|
||||
-spec configure_dump_log() -> ok.
|
||||
configure_dump_log() ->
|
||||
Threshold = env_int("MNESIA_DUMP_LOG_WRITE_THRESHOLD", 50000),
|
||||
case mnesia:change_config(dump_log_write_threshold, Threshold) of
|
||||
{ok, Old} ->
|
||||
io:format("Mnesia dump_log_write_threshold: ~p -> ~p~n", [Old, Threshold]),
|
||||
case application:load(mnesia) of
|
||||
ok -> ok;
|
||||
{error, {already_loaded, mnesia}} -> ok;
|
||||
{error, LoadErr} ->
|
||||
io:format("Mnesia load before dump_log config failed: ~p~n", [LoadErr])
|
||||
end,
|
||||
ok = application:set_env(mnesia, dump_log_write_threshold, Threshold),
|
||||
io:format("Mnesia dump_log_write_threshold set to ~p (before start)~n", [Threshold]),
|
||||
ok.
|
||||
|
||||
%% @doc Log active threshold after mnesia:start (sanity check for IFT logs).
|
||||
-spec verify_dump_log() -> ok.
|
||||
verify_dump_log() ->
|
||||
case catch mnesia:system_info(dump_log_write_threshold) of
|
||||
N when is_integer(N) ->
|
||||
io:format("Mnesia dump_log_write_threshold active: ~p~n", [N]),
|
||||
ok;
|
||||
Other ->
|
||||
io:format("Mnesia dump_log_write_threshold change failed: ~p~n", [Other]),
|
||||
io:format("Mnesia dump_log_write_threshold verify: ~p~n", [Other]),
|
||||
ok
|
||||
end.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user