Implement clustered compaction functions
COUCHDB-3099
diff --git a/src/fabric.erl b/src/fabric.erl
index fe663be..f2a1ad0 100644
--- a/src/fabric.erl
+++ b/src/fabric.erl
@@ -20,7 +20,8 @@
-export([all_dbs/0, all_dbs/1, create_db/1, create_db/2, delete_db/1,
delete_db/2, get_db_info/1, get_doc_count/1, set_revs_limit/3,
set_security/2, set_security/3, get_revs_limit/1, get_security/1,
- get_security/2, get_all_security/1, get_all_security/2]).
+ get_security/2, get_all_security/1, get_all_security/2,
+ compact/1, compact/2]).
% Documents
-export([open_doc/3, open_revs/4, get_doc_info/3, get_full_doc_info/3,
@@ -161,6 +162,16 @@
get_all_security(DbName, Options) ->
fabric_db_meta:get_all_security(dbname(DbName), opts(Options)).
+compact(DbName) ->
+ [rexi:cast(Node, {fabric_rpc, compact, [Name]}) ||
+ #shard{node=Node, name=Name} <- mem3:shards(dbname(DbName))],
+ ok.
+
+compact(DbName, DesignName) ->
+ [rexi:cast(Node, {fabric_rpc, compact, [Name, DesignName]}) ||
+ #shard{node=Node, name=Name} <- mem3:shards(dbname(DbName))],
+ ok.
+
% doc operations
%% @doc retrieve the doc with a given id
diff --git a/src/fabric_rpc.erl b/src/fabric_rpc.erl
index cc242b9..b7f4fec 100644
--- a/src/fabric_rpc.erl
+++ b/src/fabric_rpc.erl
@@ -19,6 +19,7 @@
-export([create_db/1, delete_db/1, reset_validation_funs/1, set_security/3,
set_revs_limit/3, create_shard_db_doc/2, delete_shard_db_doc/2]).
-export([get_all_security/2, open_shard/2]).
+-export([compact/1, compact/2]).
-export([get_db_info/2, get_doc_count/2, get_update_seq/2,
changes/4, map_view/5, reduce_view/5, group_info/3]).
@@ -246,6 +247,15 @@
set_io_priority(Name, Opts),
rexi:reply(couch_db:open(Name, Opts)).
+compact(DbName) ->
+ with_db(DbName, [], {couch_db, start_compact, []}).
+
+compact(ShardName, DesignName) ->
+ {ok, Pid} = couch_index_server:get_index(
+ couch_mrview_index, ShardName, <<"_design/", DesignName/binary>>),
+ Ref = erlang:make_ref(),
+ Pid ! {'$gen_call', {self(), Ref}, compact}.
+
%%
%% internal
%%