anchor.diff:  -include("fabric.hrl").
   -include_lib("mem3/include/mem3.hrl").
   
  +-record(worker, {
  +    ref,
  +    node,
  +    pid
  +}).
  +
  +-record(acc, {
  +    parent,
  +    state
  +}).
  +
   go(Parent, ParentRef, DbName, Timeout) ->
       Notifiers = start_update_notifiers(DbName),
       MonRefs = lists:usort([{rexi_server, Node} || {Node, _Ref} <- Notifiers]),
       RexiMon = rexi_monitor:start(MonRefs),
       MonPid = start_cleanup_monitor(self(), Notifiers),
  -    %% Add calling controller node as rexi end point as this controller will
  -    %% receive messages from it
  -    Workers = [{Parent, ParentRef} | Notifiers],
  +    %% This is not a common pattern for rexi but to enable the calling
  +    %% process to communicate via handle_message/3 we "fake" it as a
  +    %% a spawned worker.
  +    Workers = [#worker{ref=ParentRef, pid=Parent} | Notifiers],
       try
  -        receive_results(Workers, {Workers, Parent, unset}, Timeout)
  +        receive_results(Workers, #acc{parent=Parent, state=unset}, Timeout)
       after
           rexi_monitor:stop(RexiMon),
           stop_cleanup_monitor(MonPid)
  
positive.code:     end.
  
  stop_update_notifiers(Notifiers) ->
      [rexi:kill(Node, Ref) || {Node, Ref} <- Notifiers].
  
  stop({Pid, Ref}) ->
      erlang:send(Pid, {Ref, done}).
  
negative.code: 
  start_update_notifiers(DbName) ->
      lists:map(fun(#shard{node=Node, name=Name}) ->
          Ref = rexi:cast(Node, {?MODULE, start_update_notifier, [Name]}),
          #worker{ref=Ref, node=Node}
      end, mem3:shards(DbName)).
  
  % rexi endpoint
  