Skip to content

Commit

Permalink
Add support for the fragmentation-based merge system
Browse files Browse the repository at this point in the history
--HG--
extra : rebase_source : 7f18ec8aec0087db16b0a5d5e9e6a08d5f09141f
  • Loading branch information
dizzyd committed May 12, 2010
1 parent a5032a9 commit 9c5a017
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions apps/riak_kv/src/riak_kv_bitcask_backend.erl
Expand Up @@ -41,6 +41,8 @@
-include_lib("eunit/include/eunit.hrl").
-endif.

-define(MERGE_CHECK_INTERVAL, timer:minutes(3)).

start(Partition, _Config) ->
%% Schedule sync (if necessary)
case application:get_env(bitcask, sync_strategy) of
Expand All @@ -52,15 +54,8 @@ start(Partition, _Config) ->
ok
end,

%% Schedule merges
case application:get_env(bitcask, merge_strategy) of
{ok, {hours, Hours}} ->
MergeIntervalMs = timer:hours(Hours),
erlang:send_after(MergeIntervalMs, self(),
{?MODULE, {merge, MergeIntervalMs}});
undefined ->
undefined
end,
%% Schedule merge checks
erlang:send_after(?MERGE_CHECK_INTERVAL, self(), {?MODULE, merge_check}),

%% Get the data root directory
DataDir =
Expand Down Expand Up @@ -173,13 +168,18 @@ is_empty({Ref, _}) ->
end.

handle_info({Ref, _}, {sync, SyncInterval}) ->
bitcask:sync(Ref),
bitcask:sync(Ref),
erlang:send_after(SyncInterval, self(),
{?MODULE, {sync, SyncInterval}});
handle_info({_, BitcaskRoot}, {merge, MergeInterval}) ->
bitcask_merge_worker:merge(BitcaskRoot),
erlang:send_after(MergeInterval, self(),
{?MODULE, {merge, MergeInterval}}).

handle_info({Ref, BitcaskRoot}, merge_check) ->
case bitcask:needs_merge(Ref) of
{true, Files} ->
bitcask_merge_worker:merge(BitcaskRoot, [], Files);
false ->
ok
end,
erlang:send_after(?MERGE_CHECK_INTERVAL, self(), {?MODULE, merge_check}).


%% ===================================================================
Expand Down

0 comments on commit 9c5a017

Please sign in to comment.