anchor.diff:              exit(Pid, force_timeout)
       end.
   
  --spec hosted_tags(nonempty_string()) -> [object_name()] | {'error', term()}.
  +-spec hosted_tags(host()) -> {ok, [tagname()]} | {'error', term()}.
   hosted_tags(Host) ->
  +    case disco:slave_safe(Host) of
  +        false ->
  +            {error, unknown_host};
  +        Node ->
  +            case hosted_tags(Host, Node) of
  +                {error, _} = E -> E;
  +                Tags -> {ok, Tags}
  +            end
  +    end.
  +-spec hosted_tags(host(), node()) -> [tagname()] | {'error', term()}.
  +hosted_tags(Host, Node) ->
       case catch ddfs_master:get_tags(safe) of
           {ok, Tags} ->
  -            Node = disco:slave_node(Host),
               lists:foldl(
                 fun (_T, {error, _} = E) ->
                         E;
  
positive.code:             E
      end.
  
  -spec tag_is_hosted(object_name(), nonempty_string(), node(), non_neg_integer()) ->
                             boolean() | {'error', term()}.
  tag_is_hosted(T, _Host, _Node, 0) ->
      {error, {get_tag, T}};
  
negative.code: urls_are_hosted([Urls|Rest], Host, Node) ->
      Hosted =
          lists:foldl(
            fun (<<"tag://", T/binary>>, false) ->
                    tag_is_hosted(T, Host, Node, ?MAX_TAG_OP_RETRIES);
                (Url, false) ->
                    case ddfs_util:parse_url(Url) of
  