Skip to content

Instantly share code, notes, and snippets.

@bowrocker
Created July 19, 2013 15:32
Show Gist options
  • Save bowrocker/6040048 to your computer and use it in GitHub Desktop.
Save bowrocker/6040048 to your computer and use it in GitHub Desktop.
registration functions
riakcore_cluster_mgr:register_member_fun(
fun({IP, Port}) ->
{ok, MyIPs} = inet:getifaddrs(),
{ok, NormIP} = riak_repl_util:normalize_ip(IP),
MyMask = lists:foldl(fun({_IF, Attrs}, Acc) ->
case lists:member({addr, NormIP}, Attrs) of
true -> NetMask = lists:foldl(fun({netmask,
NM = {, , _, _}}, _) -> NM;
(, Acc2) -> Acc2
end, undefined, Attrs),
CIDR = cidr(list_to_binary(tuple_to_list(NetMask)),0), CIDR;
false -> Acc end end, undefined, MyIPs),
case MyMask of undefined ->
[{IP, Port}];
_ -> AddressMask = mask_address(NormIP, MyMask),
Nodes = riak_core_node_watcher:nodes(riak_kv),
{Results, _BadNodes} = rpc:multicall(Nodes, riak_repl_app, get_matching_address, [NormIP, AddressMask]), Results end end),
riak_core_cluster_mgr:register_save_cluster_members_fun(
fun(ClusterName, Members) -> riak_core_ring_manager:ring_trans(
fun riak_repl_ring:set_clusterIpAddrs/2, {ClusterName, Members}) end),
riak_core_cluster_mgr:register_restore_cluster_targets_fun(
fun() -> {ok, Ring0} = riak_core_ring_manager:get_my_ring(),
Ring = riak_repl_ring:ensure_config(Ring0),
Clusters = riak_repl_ring:get_clusters(Ring), [{cluster_by_name, Name} || {Name, _Addrs} <- Clusters] end).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment