Skip to content

Instantly share code, notes, and snippets.

@kellymclaughlin
Last active July 14, 2017 17:12
Show Gist options
  • Save kellymclaughlin/5672447 to your computer and use it in GitHub Desktop.
Save kellymclaughlin/5672447 to your computer and use it in GitHub Desktop.
An Erlang module to induce Riak to merge all bitcask data directories. **WARNING** It is not advisable to use this on a production system. There could be significant impact to request latencies.
-module(bitcask_merge).
-export([merge_dirs/0]).
bitcask_data_dir() ->
bitcask_data_dir(application:get_env(riak_kv, multi_backend),
application:get_env(bitcask, data_root)).
bitcask_data_dir(undefined, undefined) ->
undefined;
bitcask_data_dir(undefined, {ok, Dir}) ->
Dir;
bitcask_data_dir({ok, MultiConfig}, _) ->
multi_backend_bitcask_dir(
lists:keyfind(riak_kv_bitcask_backend, 2, MultiConfig)).
multi_backend_bitcask_dir(false) ->
undefined;
multi_backend_bitcask_dir({_, riak_kv_bitcask_backend, Props}) ->
proplists:get_value(data_root, Props).
find_dirs() ->
case bitcask_data_dir() of
undefined ->
ok;
BitcaskDir ->
{ok, SubDirs} = file:list_dir(BitcaskDir),
[BitcaskDir ++ "/" ++ SubDir || SubDir <- SubDirs]
end.
merge_dirs() ->
merge_dirs(find_dirs()).
merge_dirs(Dirs) ->
[catch bitcask:merge(Dir) || Dir <- Dirs].
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment