diff --git a/apps/emqx_modules/src/emqx_telemetry.erl b/apps/emqx_modules/src/emqx_telemetry.erl index 8c7f01c23..f55457e9d 100644 --- a/apps/emqx_modules/src/emqx_telemetry.erl +++ b/apps/emqx_modules/src/emqx_telemetry.erl @@ -54,6 +54,11 @@ -export([official_version/1]). +%% Internal exports (RPC) +-export([ + do_ensure_uuids/0 +]). + %% internal export -export([read_raw_build_info/0]). @@ -530,54 +535,56 @@ bin(B) when is_binary(B) -> B. ensure_uuids() -> - Txn = fun() -> - NodeUUID = - case mnesia:wread({?TELEMETRY, node()}) of - [] -> - NodeUUID0 = - case get_uuid_from_file(node) of - {ok, NUUID} -> NUUID; - undefined -> generate_uuid() - end, - mnesia:write( - ?TELEMETRY, - #telemetry{ - id = node(), - uuid = NodeUUID0 - }, - write - ), - NodeUUID0; - [#telemetry{uuid = NodeUUID0}] -> - NodeUUID0 - end, - ClusterUUID = - case mnesia:wread({?TELEMETRY, ?CLUSTER_UUID_KEY}) of - [] -> - ClusterUUID0 = - case get_uuid_from_file(cluster) of - {ok, CUUID} -> CUUID; - undefined -> generate_uuid() - end, - mnesia:write( - ?TELEMETRY, - #telemetry{ - id = ?CLUSTER_UUID_KEY, - uuid = ClusterUUID0 - }, - write - ), - ClusterUUID0; - [#telemetry{uuid = ClusterUUID0}] -> - ClusterUUID0 - end, - {NodeUUID, ClusterUUID} - end, - {atomic, {NodeUUID, ClusterUUID}} = mria:transaction(?TELEMETRY_SHARD, Txn), + {atomic, {NodeUUID, ClusterUUID}} = mria:transaction( + ?TELEMETRY_SHARD, fun ?MODULE:do_ensure_uuids/0 + ), save_uuid_to_file(NodeUUID, node), save_uuid_to_file(ClusterUUID, cluster), {NodeUUID, ClusterUUID}. +do_ensure_uuids() -> + NodeUUID = + case mnesia:wread({?TELEMETRY, node()}) of + [] -> + NodeUUID0 = + case get_uuid_from_file(node) of + {ok, NUUID} -> NUUID; + undefined -> generate_uuid() + end, + mnesia:write( + ?TELEMETRY, + #telemetry{ + id = node(), + uuid = NodeUUID0 + }, + write + ), + NodeUUID0; + [#telemetry{uuid = NodeUUID0}] -> + NodeUUID0 + end, + ClusterUUID = + case mnesia:wread({?TELEMETRY, ?CLUSTER_UUID_KEY}) of + [] -> + ClusterUUID0 = + case get_uuid_from_file(cluster) of + {ok, CUUID} -> CUUID; + undefined -> generate_uuid() + end, + mnesia:write( + ?TELEMETRY, + #telemetry{ + id = ?CLUSTER_UUID_KEY, + uuid = ClusterUUID0 + }, + write + ), + ClusterUUID0; + [#telemetry{uuid = ClusterUUID0}] -> + ClusterUUID0 + end, + {NodeUUID, ClusterUUID}. + get_uuid_from_file(Type) -> Path = uuid_file_path(Type), case file:read_file(Path) of