From 19017b3612b4567ced3b8ac9cfe816e6cf80e0f8 Mon Sep 17 00:00:00 2001 From: Robert Newson Date: Wed, 14 Nov 2012 19:32:23 +0000 Subject: Backport new /_active_tasks API Improved _active_tasks API Tasks are now free to set any properties they wish (as an Erlang proplist). Different tasks can have different properties and the status string doesn't exist anymore - instead client applications can build it using more granular properties from _active_tasks. Some of these properties are: 1) "progress" (an integer percentage, for all tasks) 2) "database" (for compactions and indexer tasks) 3) "design_document" (for indexer and view compaction tasks) 4) "source" and "target" (for replications) 5) "docs_read", "docs_written", "doc_write_failures", "missing_revs_found", "missing_revs_checked", "source_seq", "checkpointed_source_seq" and "continuous" for replications BugzID: 14269 Conflicts: apps/couch/src/couch_db_updater.erl apps/couch/src/couch_rep.erl apps/couch/src/couch_task_status.erl apps/couch/src/couch_view_compactor.erl apps/couch/src/couch_view_updater.erl --- apps/couch/src/couch_view_updater.erl | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'apps/couch/src/couch_view_updater.erl') diff --git a/apps/couch/src/couch_view_updater.erl b/apps/couch/src/couch_view_updater.erl index 8238e3e5..ca144149 100644 --- a/apps/couch/src/couch_view_updater.erl +++ b/apps/couch/src/couch_view_updater.erl @@ -32,17 +32,25 @@ update(Owner, Group, #db{name = DbName} = Db) -> current_seq = Seq, purge_seq = PurgeSeq } = Group, - couch_task_status:add_task(<<"View Group Indexer">>, <>, <<"Starting index update">>), + % compute on all docs modified since we last computed. + TotalChanges = couch_db:count_changes_since(Db, Seq), + couch_task_status:add_task([ + {type, indexer}, + {database, DbName}, + {design_document, GroupName}, + {progress, 0}, + {changes_done, 0}, + {total_changes, TotalChanges} + ]), + couch_task_status:set_update_frequency(500), DbPurgeSeq = couch_db:get_purge_seq(Db), Group2 = if DbPurgeSeq == PurgeSeq -> Group; DbPurgeSeq == PurgeSeq + 1 -> - couch_task_status:update(<<"Removing purged entries from view index.">>), purge_index(Group, Db); true -> - couch_task_status:update(<<"Resetting view index due to lost purge entries.">>), exit(reset) end, {ok, MapQueue} = couch_work_queue:new( @@ -53,10 +61,6 @@ update(Owner, Group, #db{name = DbName} = Db) -> ViewEmptyKVs = [{View, []} || View <- Group2#group.views], spawn_link(?MODULE, do_maps, [Group, MapQueue, WriteQueue, ViewEmptyKVs]), spawn_link(?MODULE, do_writes, [Self, Owner, Group2, WriteQueue, Seq == 0]), - % compute on all docs modified since we last computed. - TotalChanges = couch_db:count_changes_since(Db, Seq), - % update status every half second - couch_task_status:set_update_frequency(500), #group{ design_options = DesignOptions } = Group, IncludeDesign = couch_util:get_value(<<"include_design">>, DesignOptions, false), @@ -69,8 +73,6 @@ update(Owner, Group, #db{name = DbName} = Db) -> EnumFun = fun ?MODULE:load_docs/3, Acc0 = {0, Db, MapQueue, DocOpts, IncludeDesign, TotalChanges}, {ok, _, _} = couch_db:enum_docs_since(Db, Seq, EnumFun, Acc0, []), - couch_task_status:set_update_frequency(0), - couch_task_status:update("Finishing."), couch_work_queue:close(MapQueue), receive {new_group, NewGroup} -> exit({new_group, @@ -78,8 +80,7 @@ update(Owner, Group, #db{name = DbName} = Db) -> end. load_docs(DocInfo, _, {I, Db, MapQueue, DocOpts, IncludeDesign, Total} = Acc) -> - couch_task_status:update("Processed ~p of ~p changes (~p%)", [I, Total, - (I*100) div Total]), + couch_task_status:update([{changes_done, I}, {progress, (I * 100) div Total}]), load_doc(Db, DocInfo, MapQueue, DocOpts, IncludeDesign), {ok, setelement(1, Acc, I+1)}. -- cgit v1.2.3