Skip to content
Dave Parfitt edited this page Nov 18, 2013 · 23 revisions

Riak Replication Support

Get leaders across the cluster

rp(riak_core_util:rpc_every_member_ann(riak_core_cluster_mgr, get_leader, [], 5000)).
Collect repl stats
## Use the http port for Riak below:
curl -q http://localhost:10018/riak-repl/stats 

## Pretty print JSON stats
curl -q http://localhost:8091/riak-repl/stats | python -mjson.tool

Check the status of the leader process

rp(sys:get_status(riak_repl2_leader_gs)).

Set the leader if it's undefined

riak_core_cluster_mgr:set_leader(riak_repl2_leader:leader_node(), undefined).

or

riak_core_cluster_mgr:set_leader('[email protected]', undefined).

Disable cluster member fun

To disable updating list of remote IPs

  rpc:multicall(erlang, apply, [fun() -> riak_core_cluster_mgr:register_save_cluster_members_fun(fun(_ClusterName, _Members) -> ok end) end, []]).

To re-enable

  rpc:multicall(erlang, apply, [fun() -> 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) end, []]).

Kill leaders on every node

(possibly forcing a reelection.)

[exit(P, kill) || P <- element(1, rpc:multicall(riak_repl2_leader, helper_pid, []))].

%%% V2 REPLICATION
exit(whereis(riak_repl_leader_gs), kill).
%% Note, the registered name is different than the module name
%% gs = "gen_server"

Get Cluster Manager Status

rp(sys:get_status(riak_core_cluster_manager)).

Get Connection Manager Status

%% One node
rp(sys:get_status(riak_core_connection_manager)).

%% All nodes
rp(rpc:multicall(sys, get_status, [riak_core_connection_manager])).

Check realtime sink distribution (on sink clusters)

rpc:multicall(supervisor, which_children, [riak_repl2_rtsink_conn_sup]).

Remove dirty IP's from the Ring

riak_core_ring_manager:ring_trans(fun(Ring, Name) ->
    riak_repl_ring:set_clusterIpAddrs(Ring, {Name, [{IP, Port} || {IP, Port} <- riak_repl_ring:get_clusterIpAddrs(Ring, Name), is_list(IP), is_integer(Port)]}) end, "sink_clustername").

Disable AAE at runtime (not specific to repl)

riak_kv_entropy_manager:disable().
riak_kv_entropy_manager:cancel_exchanges().

Dig out locators

rp(rpc:multicall(erlang, apply, [fun() -> {node(), element(5, element(2, hd(element(2, lists:nth(3, lists:nth(5, element(4, sys:get_status(riak_core_cluster_manager))))))))} end, []])).

Clone this wiki locally