You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ei...@apache.org on 2019/08/15 13:09:32 UTC
[couchdb] branch epi-support-map-childspec created (now 1db0294)
This is an automated email from the ASF dual-hosted git repository.
eiri pushed a change to branch epi-support-map-childspec
in repository https://gitbox.apache.org/repos/asf/couchdb.git.
at 1db0294 Support map childspecs in couch_epi supervisor's children replacement
This branch includes the following new commits:
new 1db0294 Support map childspecs in couch_epi supervisor's children replacement
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[couchdb] 01/01: Support map childspecs in couch_epi supervisor's
children replacement
Posted by ei...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
eiri pushed a commit to branch epi-support-map-childspec
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 1db0294eb1093066773760b75a200d99aa453be8
Author: Eric Avdey <ei...@eiri.ca>
AuthorDate: Thu Aug 15 10:07:07 2019 -0300
Support map childspecs in couch_epi supervisor's children replacement
---
src/couch_epi/src/couch_epi_sup.erl | 5 +++-
src/couch_epi/test/eunit/couch_epi_basic_test.erl | 34 +++++++++++++++--------
2 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/src/couch_epi/src/couch_epi_sup.erl b/src/couch_epi/src/couch_epi_sup.erl
index 218db54..477cbe7 100644
--- a/src/couch_epi/src/couch_epi_sup.erl
+++ b/src/couch_epi/src/couch_epi_sup.erl
@@ -136,4 +136,7 @@ modules(#couch_epi_spec{kind = data_subscriptions, behaviour = Module}) ->
merge([], Children) ->
Children;
merge([{Id, _, _, _, _, _} = Spec | Rest], Children) ->
- merge(Rest, lists:keystore(Id, 1, Children, Spec)).
+ merge(Rest, lists:keystore(Id, 1, Children, Spec));
+merge([#{id := Id} = Spec | Rest], Children) ->
+ Replace = fun(#{id := I}) when I == Id -> Spec; (E) -> E end,
+ merge(Rest, lists:map(Replace, Children)).
diff --git a/src/couch_epi/test/eunit/couch_epi_basic_test.erl b/src/couch_epi/test/eunit/couch_epi_basic_test.erl
index 587d156..5ba6c9f 100644
--- a/src/couch_epi/test/eunit/couch_epi_basic_test.erl
+++ b/src/couch_epi/test/eunit/couch_epi_basic_test.erl
@@ -67,7 +67,9 @@ processes() ->
[
{?MODULE, [?CHILD(extra_process, worker)]},
{?MODULE, [{to_replace, {new, start_link, [bar]},
- permanent, 5000, worker, [bar]}]}
+ permanent, 5000, worker, [bar]}]},
+ {?MODULE, [#{id => to_replace_map,
+ start => {new, start_link, [bar]}, modules => [bar]}]}
].
@@ -95,9 +97,10 @@ parse_child_id(Id) ->
-include_lib("eunit/include/eunit.hrl").
basic_test() ->
- Expected = lists:sort([
+ Expected = [
{extra_process, [], [extra_process]},
{to_replace, [bar], [bar]},
+ {to_replace_map, [bar], [bar]},
{{my_service, providers},
[couch_epi_functions_gen_my_service],
[couch_epi_codechange_monitor, couch_epi_functions_gen_my_service,
@@ -114,18 +117,23 @@ basic_test() ->
[couch_epi_data_gen_test_app_descriptions],
lists:sort([couch_epi_codechange_monitor,
couch_epi_data_gen_test_app_descriptions, ?MODULE])}
- ]),
+ ],
- ToReplace = {to_replace,
- {old, start_link, [foo]}, permanent, 5000, worker, [foo]},
- Children = lists:sort(couch_epi_sup:plugin_childspecs(
- ?MODULE, [?MODULE], [ToReplace])),
- Results = [
- {parse_child_id(Id), Args, lists:sort(Modules)}
- || {Id, {_M, _F, Args}, _, _, _, Modules} <- Children
+ ToReplace = [
+ {to_replace, {old, start_link, [foo]}, permanent, 5000, worker, [foo]},
+ #{id => to_replace_map, start => {old, start_link, [foo]}}
],
+ Children = lists:sort(couch_epi_sup:plugin_childspecs(
+ ?MODULE, [?MODULE], ToReplace)),
+
+ Results = lists:map(fun
+ ({Id, {_M, _F, Args}, _, _, _, Modules}) ->
+ {parse_child_id(Id), Args, lists:sort(Modules)};
+ (#{id := Id, start := {_M, _F, Args}, modules := Modules}) ->
+ {parse_child_id(Id), Args, lists:sort(Modules)}
+ end, Children),
- Tests = lists:zip(Expected, Results),
+ Tests = lists:zip(lists:sort(Expected), lists:sort(Results)),
[?assertEqual(Expect, Result) || {Expect, Result} <- Tests],
ExpectedChild = {to_replace, {new, start_link, [bar]},
@@ -134,4 +142,8 @@ basic_test() ->
ExpectedChild,
lists:keyfind(to_replace, 1, Children)),
+ ExpectedMapChildSpec = #{id => to_replace_map,
+ start => {new, start_link, [bar]}, modules => [bar]},
+ [MapChildSpec] = [E || #{id := to_replace_map} = E <- Children],
+ ?assertEqual(ExpectedMapChildSpec, MapChildSpec),
ok.