summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Vatamaniuc <vatamane@apache.org>2019-12-20 13:33:16 -0500
committerNick Vatamaniuc <vatamane@apache.org>2019-12-22 00:54:58 -0500
commit6b2bbe8c52e4920da23b67270351cb682056f641 (patch)
tree8b859b3e96e2b0adb263cdab935c9bd92b6d91e6
parent5c8e8822dcc5d7c6002467b2afd807fd76a751dd (diff)
downloadcouchdb-replicator-info-error-as-object.tar.gz
Switch replicator "info" error message to be an objectreplicator-info-error-as-object
Instead of a string, null or object, it should now be only a null or an object.
-rw-r--r--src/couch_replicator/src/couch_replicator.erl5
-rw-r--r--src/couch_replicator/src/couch_replicator_scheduler.erl6
-rw-r--r--src/couch_replicator/src/couch_replicator_utils.erl5
3 files changed, 10 insertions, 6 deletions
diff --git a/src/couch_replicator/src/couch_replicator.erl b/src/couch_replicator/src/couch_replicator.erl
index f3cd56489..510b878bd 100644
--- a/src/couch_replicator/src/couch_replicator.erl
+++ b/src/couch_replicator/src/couch_replicator.erl
@@ -250,8 +250,9 @@ info_from_doc(RepDb, {Props}) ->
end
end;
failed ->
- Info = get_value(<<"_replication_state_reason">>, Props, null),
- {State0, Info, 1, StateTime};
+ Info = get_value(<<"_replication_state_reason">>, Props, nil),
+ EJsonInfo = couch_replicator_utils:ejson_state_info(Info),
+ {State0, EJsonInfo, 1, StateTime};
_OtherState ->
{null, null, 0, null}
end,
diff --git a/src/couch_replicator/src/couch_replicator_scheduler.erl b/src/couch_replicator/src/couch_replicator_scheduler.erl
index d534973be..dde214130 100644
--- a/src/couch_replicator/src/couch_replicator_scheduler.erl
+++ b/src/couch_replicator/src/couch_replicator_scheduler.erl
@@ -1472,7 +1472,8 @@ t_job_summary_crashing_once() ->
setup_jobs([Job]),
Summary = job_summary(job1, ?DEFAULT_HEALTH_THRESHOLD_SEC),
?assertEqual(crashing, proplists:get_value(state, Summary)),
- ?assertEqual(<<"some_reason">>, proplists:get_value(info, Summary)),
+ Info = proplists:get_value(info, Summary),
+ ?assertEqual({[{<<"error">>, <<"some_reason">>}]}, Info),
?assertEqual(0, proplists:get_value(error_count, Summary))
end).
@@ -1487,7 +1488,8 @@ t_job_summary_crashing_many_times() ->
setup_jobs([Job]),
Summary = job_summary(job1, ?DEFAULT_HEALTH_THRESHOLD_SEC),
?assertEqual(crashing, proplists:get_value(state, Summary)),
- ?assertEqual(<<"some_reason">>, proplists:get_value(info, Summary)),
+ Info = proplists:get_value(info, Summary),
+ ?assertEqual({[{<<"error">>, <<"some_reason">>}]}, Info),
?assertEqual(2, proplists:get_value(error_count, Summary))
end).
diff --git a/src/couch_replicator/src/couch_replicator_utils.erl b/src/couch_replicator/src/couch_replicator_utils.erl
index 856c1b581..5f608dee7 100644
--- a/src/couch_replicator/src/couch_replicator_utils.erl
+++ b/src/couch_replicator/src/couch_replicator_utils.erl
@@ -181,13 +181,14 @@ normalize_rep(#rep{} = Rep)->
ejson_state_info(nil) ->
null;
ejson_state_info(Info) when is_binary(Info) ->
- Info;
+ {[{<<"error">>, Info}]};
ejson_state_info([]) ->
null; % Status not set yet => null for compatibility reasons
ejson_state_info([{_, _} | _] = Info) ->
{Info};
ejson_state_info(Info) ->
- couch_replicator_utils:rep_error_to_binary(Info).
+ ErrMsg = couch_replicator_utils:rep_error_to_binary(Info),
+ {[{<<"error">>, ErrMsg}]}.
-ifdef(TEST).