anchor.diff:                         true -> ok
                       end,
                       _ = send_replies(ReplyTo, {ok, DestUrls}),
  -                    S#state{data = {ok, TagContent}, replicas = DestNodes};
  +                    S#state{data = {ok, TagContent},
  +                            replicas = DestNodes,
  +                            locations = DestUrls};
                   {error, _} = E ->
                       _ = send_replies(ReplyTo, E),
                       S#state{url_cache = false}
  
positive.code:                     {{Time, _Vol}, _Node} = lists:max(L),
                      Replicas = [X || {{T, _}, _} = X <- L, T == Time],
                      TagID = ddfs_util:pack_objname(TagName, Time),
                      read_tagdata(TagID, Replicas, [], tagdata_failed)
              end
      end.
  
  read_tagdata(_TagID, Replicas, Failed, Error)
    when length(Replicas) =:= length(Failed) ->
      {error, Error};
  
  read_tagdata(TagID, Replicas, Failed, _Error) ->
      {TagNfo, SrcNode} = Chosen = disco_util:choose_random(Replicas -- Failed),
      GetData = try ddfs_node:get_tag_data(SrcNode, TagID, TagNfo)
                catch K:V -> {error, {K,V}}
  
negative.code:         [] ->
              {error, commit_failed};
          Urls ->
              lager:info("Updated tag ~p (at ~p locations)",
                         [TagID, length(Urls)]),
              {ok, Nodes, Urls}
      end.
  
  