anchor.diff:      end;
   parse_redis_uri_db(_) -> [].
   
  -update_redis_host(OldUrl, NewHost) ->
  -    {ok, OldUri = #ex_uri{authority = #ex_uri_authority{} = Authority}, _}
  -        = ex_uri:decode(OldUrl),
  -    New = OldUri#ex_uri{authority =
  -                            Authority#ex_uri_authority{host=NewHost}},
  -    ex_uri:encode(New).
  -
   redis_sort(Urls) ->
       Parsed = lists:map(fun parse_redis_uri/1, Urls),
       [ proplists:get_value(url, Server)
  
positive.code: %% If anything goes wrong:
  %%   abort_url_update(Cluster).
  
  prepare_new_urls({one_for_one, NewIps}) ->
      NewIpsSorted = lists:sort(NewIps),
      OldUrls = lists:sort([binary_to_list(Url)
                            || Url <- urls()]),
      length(OldUrls) =:= length(NewIpsSorted)
          orelse erlang:error({invalid_ip_list, different_length_to_existing}),
      NewUrls = [ update_redis_host(OldUrl, NewIp)
                  || {OldUrl, NewIp} <- lists:zip(OldUrls, NewIpsSorted)],
      {one_for_one, lists:zip(OldUrls, NewUrls)};
  prepare_new_urls({replacements, NewUrls}) ->
      {replacements, NewUrls}.
  
  
negative.code:     logplex_shard_info:copy(?NEW_READ_MAP, ?CURRENT_READ_MAP),
      ok.
  
  new_shard_info({replacements, NewUrls}) ->
      populate_info_table(?NEW_READ_MAP, ?NEW_WRITE_MAP,
                          NewUrls),
  