anchor.diff:      case GetData of
           {ok, Data} ->
               {_, DestNodes} = lists:unzip(Replicas),
  -            {ok, Data, DestNodes};
  +            {ok, Data, DestNodes, Locations};
           E ->
  -            read_tagdata(TagID, Replicas, [Chosen|Failed], E)
  +            read_tagdata(TagID, Locations, Replicas, [Chosen|Failed], E)
       end.
   
   -spec do_delayed_update([[binary()]], [term()], replyto(),
  
positive.code:     NewTagData = ddfs_tag_util:encode_tagcontent(TagContent),
      TagId = TagContent#tagcontent.id,
      case put_distribute({TagId, NewTagData}) of
          {ok, DestNodes, _DestUrls} ->
              _ = send_replies(ReplyTo, ok),
              S#state{data = {ok, TagContent},
                      replicas = DestNodes};
          {error, _} = E ->
              _ = send_replies(ReplyTo, E),
              S
  
negative.code:     NewTagData = ddfs_tag_util:encode_tagcontent(NewTagContent),
      TagId = NewTagContent#tagcontent.id,
      case put_distribute({TagId, NewTagData}) of
          {ok, DestNodes, DestUrls} ->
              S#state{data = {ok, NewTagContent},
                      replicas = DestNodes,
                      locations = DestUrls,
                      url_cache = init_url_cache(NewUrls)};
          {error, _} = E ->
              lager:error("GC: unable to update tag ~p: ~p", [TagName, E]),
  