diff options
Diffstat (limited to 'src/nouveau/src/nouveau_fabric_cleanup.erl')
-rw-r--r-- | src/nouveau/src/nouveau_fabric_cleanup.erl | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/nouveau/src/nouveau_fabric_cleanup.erl b/src/nouveau/src/nouveau_fabric_cleanup.erl new file mode 100644 index 000000000..cd4128fb1 --- /dev/null +++ b/src/nouveau/src/nouveau_fabric_cleanup.erl @@ -0,0 +1,43 @@ +% Licensed under the Apache License, Version 2.0 (the "License"); you may not +% use this file except in compliance with the License. You may obtain a copy of +% the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +% License for the specific language governing permissions and limitations under +% the License. + +%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*- + +-module(nouveau_fabric_cleanup). + +-include_lib("couch/include/couch_db.hrl"). + +-include("nouveau.hrl"). +-include_lib("mem3/include/mem3.hrl"). + +-export([go/1]). + +go(DbName) -> + {ok, DesignDocs} = fabric:design_docs(DbName), + ActiveSigs = + lists:usort( + lists:flatmap( + fun(Doc) -> active_sigs(DbName, Doc) end, + [couch_doc:from_json_obj(DD) || DD <- DesignDocs] + ) + ), + Shards = mem3:shards(DbName), + lists:foreach( + fun(Shard) -> + rexi:cast(Shard#shard.node, {nouveau_rpc, cleanup, [Shard#shard.name, ActiveSigs]}) + end, + Shards + ). + +active_sigs(DbName, #doc{} = Doc) -> + Indexes = nouveau_util:design_doc_to_indexes(DbName, Doc), + lists:map(fun(Index) -> Index#index.sig end, Indexes). |