Include reason for replication failure in _replicator doc

closes COUCHDB-1647


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/commit/9b72668d
Tree: 
http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/9b72668d
Diff: 
http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/9b72668d

Branch: refs/heads/1843-feature-bigcouch
Commit: 9b72668d687fd9980ef8fd7820c2cf86681f620d
Parents: 8354f42
Author: Robert Newson <[email protected]>
Authored: Tue Dec 3 11:15:59 2013 +0000
Committer: Robert Newson <[email protected]>
Committed: Thu Apr 24 13:16:10 2014 +0100

----------------------------------------------------------------------
 src/couch_replicator_manager.erl | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/9b72668d/src/couch_replicator_manager.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator_manager.erl b/src/couch_replicator_manager.erl
index 5ec2d33..e47222e 100644
--- a/src/couch_replicator_manager.erl
+++ b/src/couch_replicator_manager.erl
@@ -72,6 +72,7 @@ replication_started(#rep{id = {BaseId, _} = RepId}) ->
     #rep_state{dbname = DbName, rep = #rep{doc_id = DocId}} ->
         update_rep_doc(DbName, DocId, [
             {<<"_replication_state">>, <<"triggered">>},
+            {<<"_replication_state_reason">>, undefined},
             {<<"_replication_id">>, ?l2b(BaseId)},
             {<<"_replication_stats">>, undefined}]),
         ok = gen_server:call(?MODULE, {rep_started, RepId}, infinity),
@@ -87,6 +88,7 @@ replication_completed(#rep{id = RepId}, Stats) ->
     #rep_state{dbname = DbName, rep = #rep{doc_id = DocId}} ->
         update_rep_doc(DbName, DocId, [
             {<<"_replication_state">>, <<"completed">>},
+            {<<"_replication_state_reason">>, undefined},
             {<<"_replication_stats">>, {Stats}}]),
         ok = gen_server:call(?MODULE, {rep_complete, RepId}, infinity),
         couch_log:notice("Replication `~s` finished (triggered by document 
`~s`)",
@@ -99,9 +101,9 @@ replication_error(#rep{id = {BaseId, _} = RepId}, Error) ->
     nil ->
         ok;
     #rep_state{dbname = DbName, rep = #rep{doc_id = DocId}} ->
-        % TODO: maybe add error reason to replication document
         update_rep_doc(DbName, DocId, [
             {<<"_replication_state">>, <<"error">>},
+            {<<"_replication_state_reason">>, to_binary(error_reason(Error))},
             {<<"_replication_id">>, ?l2b(BaseId)}]),
         ok = gen_server:call(?MODULE, {rep_error, RepId, Error}, infinity)
     end.
@@ -417,7 +419,8 @@ rep_db_update_error(Error, DbName, DocId) ->
     end,
     couch_log:error("Replication manager, error processing document `~s`: ~s",
         [DocId, Reason]),
-    update_rep_doc(DbName, DocId, [{<<"_replication_state">>, <<"error">>}]).
+    update_rep_doc(DbName, DocId, [{<<"_replication_state">>, <<"error">>},
+                                   {<<"_replication_state_reason">>, Reason}]).
 
 
 rep_user_ctx({RepDoc}) ->
@@ -752,6 +755,9 @@ rep_state(RepId) ->
     end.
 
 
+error_reason({error, {Error, Reason}})
+  when is_atom(Error), is_binary(Reason) ->
+    io_lib:format("~s: ~s", [Error, Reason]);
 error_reason({error, Reason}) ->
     Reason;
 error_reason(Reason) ->

Reply via email to