From e4934eb43bd6bbb37e74c51ce93c1ce80103ca24 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Sun, 10 May 2026 22:37:25 +0800 Subject: [PATCH] fix mnesia --- src/iot_app.erl | 30 +++++++++++------------------- src/mnesia/iot_mnesia.erl | 32 +++++--------------------------- 2 files changed, 16 insertions(+), 46 deletions(-) diff --git a/src/iot_app.erl b/src/iot_app.erl index c2c0865..dd458d8 100644 --- a/src/iot_app.erl +++ b/src/iot_app.erl @@ -15,27 +15,19 @@ start(_StartType, _StartArgs) -> erlang:system_flag(fullsweep_after, 16), try %% 启动并校验已经初始化好的 mnesia 数据库 - ok = iot_mnesia:start(), - - %% 启动http服务。当前 supervisor 初始化依赖本机 simulator API,因此保留此顺序。 - start_http_server(), - - %% 启动ssl服务 - start_ssl_server(), - - case iot_sup:start_link() of - {ok, _Pid} = Ok -> - Ok; - Error -> - stop_started_services(), - Error - end + ok = iot_mnesia:start() catch Class:Reason:Stack -> - stop_started_services(), - logger:warning("[iot_app] start failed, class: ~p, reason: ~p, stack: ~p", [Class, Reason, Stack]), - {error, Reason} - end. + logger:warning("[iot_app] start failed, class: ~p, reason: ~p, stack: ~p", [Class, Reason, Stack]) + end, + + %% 启动http服务。当前 supervisor 初始化依赖本机 simulator API,因此保留此顺序。 + start_http_server(), + + %% 启动ssl服务 + start_ssl_server(), + + iot_sup:start_link(). stop(_State) -> stop_started_services(), diff --git a/src/mnesia/iot_mnesia.erl b/src/mnesia/iot_mnesia.erl index 41805bc..8668d43 100644 --- a/src/mnesia/iot_mnesia.erl +++ b/src/mnesia/iot_mnesia.erl @@ -17,21 +17,21 @@ -spec init() -> ok | {error, term()}. init() -> with_result(fun() -> - ok = ensure_persistent_dir(), _ = mnesia:stop(), - ok = create_schema_if_missing(), - ok = start_mnesia(), + ok = mnesia:delete_schema([node()]), + ok = mnesia:create_schema([node()]), + ok = ensure_persistent_dir(), + ok = mnesia:start(), ok = create_tables(), ok = wait_for_tables(), - ok = stop(), ok end). -spec start() -> ok | {error, term()}. start() -> with_result(fun() -> + ok = mnesia:start(), ok = ensure_persistent_dir(), - ok = start_mnesia(), ok = wait_for_tables(), ok = verify_tables(), log_runtime_info(), @@ -52,28 +52,6 @@ ensure_persistent_dir() -> throw({mnesia_dir_required, node()}) end. --spec create_schema_if_missing() -> ok. -create_schema_if_missing() -> - case mnesia:create_schema([node()]) of - ok -> - ok; - {error, {_, {already_exists, _}}} -> - ok; - {error, Reason} -> - throw({create_schema_failed, Reason}) - end. - --spec start_mnesia() -> ok. -start_mnesia() -> - case mnesia:start() of - ok -> - ok; - {error, {already_started, mnesia}} -> - ok; - {error, Reason} -> - throw({start_mnesia_failed, Reason}) - end. - -spec create_tables() -> ok. create_tables() -> case efka_client_store:ensure_table() of