anchor.diff:      {stop, ok}.
   
   
  -
  +handle_error(Node, Reason, #acc{shards = Shards} = Acc) ->
  +    Rest = lists:filter(fun(#shard{node = N}) -> N /= Node end, Shards),
  +    case fabric_view:is_progress_possible([{R, nil} || R <- Rest]) of
  +        true ->
  +            {ok, Acc#acc{shards = Rest}};
  +        false ->
  +            {error, Reason}
  +    end.
  
positive.code:     end.
  
  
  handle_message({rexi_DOWN, _, {_, Node}, _}, _Worker, _Acc) ->
      {error, {nodedown, Node}};
  handle_message({rexi_EXIT, _Reason}, Worker, _Acc) ->
      {error, {worker_exit, Worker}};
  handle_message({gen_event_EXIT, Node, Reason}, _Worker, _Acc) ->
      {error, {gen_event_exit, Node, Reason}};
  handle_message(db_updated, _Worker, #acc{state=waiting}=Acc) ->
      % propagate message to calling controller
      erlang:send(Acc#acc.parent, {state, self(), updated}),
  
negative.code: 
  -record(acc, {
      parent,
      state,
      shards
  }).
  
  go(Parent, ParentRef, DbName, Timeout) ->
      Shards = mem3:shards(DbName),
      Notifiers = start_update_notifiers(Shards),
      MonRefs = lists:usort([rexi_utils:server_pid(N) || #worker{node = N} <- Notifiers]),
      RexiMon = rexi_monitor:start(MonRefs),
      MonPid = start_cleanup_monitor(self(), Notifiers),
  