-
Notifications
You must be signed in to change notification settings - Fork 426
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add mongoose_node_num instead of ejabberd_node_id
There are two backends: Mnesia or CETS disco. If none backends are useful, we fallback to node_id to be 0 (which is not that major issue for MAM ID collisions)
- Loading branch information
1 parent
f69dfda
commit e1b7ad2
Showing
10 changed files
with
147 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
%% Returns a numeric id from 0 to 255 for the current node. | ||
%% Used to generate MAM IDs. | ||
-module(mongoose_node_num). | ||
-export([set_node_num/1]). | ||
-export([node_num/0]). | ||
|
||
-include("mongoose.hrl"). | ||
-include("jlib.hrl"). | ||
-include("mongoose_config_spec.hrl"). | ||
-include("mongoose_logger.hrl"). | ||
|
||
-type node_num() :: 0..255. | ||
-define(KEY, ?MODULE). | ||
-export_type([node_num/0]). | ||
|
||
%% @doc Return an integer node ID. | ||
-spec node_num() -> node_num(). | ||
node_num() -> | ||
%% We just return 0 if service is not running. | ||
persistent_term:get(?KEY, 0). | ||
|
||
-spec set_node_num(node_num()) -> ignore | updated | same. | ||
set_node_num(Num) -> | ||
case node_num() =:= Num of | ||
true -> | ||
same; | ||
false -> | ||
persistent_term:put(?KEY, Num), | ||
updated | ||
end. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
-module(mongoose_node_num_mnesia). | ||
|
||
-export([init/0]). | ||
|
||
-record(node_num, {name :: atom(), | ||
num :: mongoose_node_num:node_num() }). | ||
|
||
init() -> | ||
mnesia:create_table(node_num, | ||
[{ram_copies, [node()]}, {type, set}, | ||
{attributes, record_info(fields, node_num)}]), | ||
mnesia:add_table_index(node_num, num), | ||
mnesia:add_table_copy(node_num, node(), ram_copies), | ||
register_node(node()), | ||
[#node_num{num = Num}] = mnesia:dirty_read(node_num, node()), | ||
mongoose_node_num:set_node_num(Num), | ||
ok. | ||
|
||
-spec register_node(atom()) -> ok. | ||
register_node(NodeName) -> | ||
{atomic, _} = mnesia:transaction(fun() -> | ||
case mnesia:read(node_num, NodeName) of | ||
[] -> | ||
mnesia:write(#node_num{name = NodeName, num = next_node_num()}); | ||
[_] -> ok | ||
end | ||
end), | ||
ok. | ||
|
||
-spec next_node_num() -> mongoose_node_num:node_num(). | ||
next_node_num() -> | ||
max_node_num() + 1. | ||
|
||
-spec max_node_num() -> mongoose_node_num:node_num(). | ||
max_node_num() -> | ||
mnesia:foldl(fun(#node_num{num = Num}, Max) -> max(Num, Max) end, 0, node_num). |