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.