Packages
krug
2.0.19
2.0.36
2.0.35
2.0.34
2.0.33
2.0.32
2.0.31
2.0.30
2.0.29
2.0.27
2.0.26
2.0.25
2.0.24
2.0.23
2.0.22
2.0.20
2.0.19
2.0.18
2.0.17
2.0.16
2.0.15
2.0.14
2.0.13
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.1
2.0.0
1.1.53
1.1.52
1.1.50
1.1.49
1.1.48
1.1.47
1.1.46
1.1.45
1.1.44
1.1.43
1.1.42
1.1.41
1.1.40
1.1.39
1.1.38
1.1.37
1.1.36
1.1.35
1.1.34
1.1.33
1.1.32
1.1.31
1.1.30
1.1.29
1.1.28
1.1.27
1.1.26
1.1.25
1.1.24
1.1.23
1.1.22
1.1.21
1.1.20
1.1.19
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.12
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.31
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
A Utilitary package functionalities modules for improve a secure performatic development.
Current section
Files
Jump to
Current section
Files
lib/krug/mnesia/distributed_mnesia_master_control.ex
defmodule Krug.DistributedMnesiaMasterControl do
@moduledoc false
@mnesia_task_control_table :mnesia_task_control_table
@mnesia_cluster_data_key :mnesia_cluster_data_key
@metadata_table_key :metadata_table_key
@connection_timeout 100
@correct_master_node_interval_key :correct_master_node_interval_key
alias Krug.EtsUtil
alias Krug.ClusterUtil
alias Krug.NetworkUtil
def read_metadata_table() do
EtsUtil.read_from_cache(
@mnesia_task_control_table,
@metadata_table_key
)
end
def read_cluster_data() do
EtsUtil.read_from_cache(
@mnesia_task_control_table,
@mnesia_cluster_data_key
)
end
def read_correct_master_node_interval() do
EtsUtil.read_from_cache(
@mnesia_task_control_table,
@correct_master_node_interval_key
)
end
def register_cluster_data(cluster_cookie,cluster_name,cluster_ips) do
EtsUtil.new(@mnesia_task_control_table)
EtsUtil.store_in_cache(
@mnesia_task_control_table,
@mnesia_cluster_data_key,
[
cluster_cookie,
cluster_name,
cluster_ips
]
)
end
def start_master_running_control(metadata_table,correct_master_node_interval) do
EtsUtil.new(@mnesia_task_control_table)
EtsUtil.store_in_cache(
@mnesia_task_control_table,
@metadata_table_key,
metadata_table
)
EtsUtil.store_in_cache(
@mnesia_task_control_table,
@correct_master_node_interval_key,
correct_master_node_interval
)
Supervisor.start_link([{Krug.DistributedMnesiaMasterControlTask,[]}], strategy: :one_for_one)
true
end
def verify_and_correct_master_node() do
master_nodes = read_master_nodes()
# ["master_nodes => ", master_nodes] |> IO.inspect()
cond do
(nil == master_nodes
or Enum.empty?(master_nodes))
-> find_and_set_new_mnesia_master_node()
(!(master_nodes |> hd() |> node_is_running()))
-> find_and_set_new_mnesia_master_node()
true
-> master_nodes
|> hd()
|> find_and_set_new_mnesia_master_node()
end
end
def node_is_running(mnesia_node) do
nil != mnesia_node |> read_master_nodes()
end
defp read_master_nodes(mnesia_node \\ node()) do
params = [
read_metadata_table(),
:master_nodes
]
case :rpc.call(mnesia_node,:mnesia,:table_info,params,@connection_timeout) do
{:badrpc, _reason}
-> nil
master_nodes
-> master_nodes
end
end
defp find_and_set_new_mnesia_master_node(actual_master_node \\ nil) do
# ["find_and_set_new_mnesia_master_node"] |> IO.inspect()
connected_nodes = reconnect_connected_nodes()
:extra_db_nodes
|> :mnesia.change_config(connected_nodes)
connected_nodes
|> NetworkUtil.get_minor_node()
|> set_master_node(actual_master_node)
end
defp set_master_node(node_to_be_new_master,actual_master_node) do
# ["set_master_node",node_to_be_new_master] |> IO.inspect()
cond do
(node_to_be_new_master == actual_master_node)
-> :ok
(nil != node_to_be_new_master)
-> [node_to_be_new_master]
|> :mnesia.set_master_nodes()
true
-> :ok
end
end
defp reconnect_connected_nodes() do
[
_cluster_cookie,
cluster_name,
cluster_ips
] = read_cluster_data()
ClusterUtil.connect_nodes([],cluster_name,cluster_ips,@connection_timeout)
end
end