anchor.diff:                end
         end, [], BlobSet).
   
  --spec get_tagdata(tagname()) -> {missing, notfound} | {error, _}
  -                             | {ok, binary(), [node()]}.
  -get_tagdata(TagName) ->
  +location_url(TagId, Node, DdfsData, Vol) ->
  +    Host = disco:host(Node),
  +    DdfsRoot = disco:ddfs_root(DdfsData, Host),
  +    {ok, _, Url} = ddfs_util:hashdir(TagId, Host, "tag", DdfsRoot, Vol),
  +    Url.
  +
  +-spec get_tagdata(tagname(), path()) -> {missing, notfound} | {error, _}
  +                                            | {ok, binary(), [node()], [url()]}.
  +get_tagdata(TagName, DdfsData) ->
       {ok, ReadableNodes, RBSize} = ddfs_master:get_read_nodes(),
       TagMinK = get(min_tagk),
       case RBSize >= TagMinK of
  
positive.code:         [] ->
              {error, commit_failed};
          Urls ->
              error_logger:info_msg("Updated tag ~p (at ~p locations)",
                                    [TagID, length(Urls)]),
              {ok, Nodes, Urls}
      end.
  
  
negative.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,
                      locations = DestUrls};
          {error, _} = E ->
              _ = send_replies(ReplyTo, E),
              S
  