anchor.diff:  -module(ddfs).
   
  +-include("gs_util.hrl").
   -include("config.hrl").
   -include("ddfs.hrl").
   -include("ddfs_tag.hrl").
  
positive.code:         gen_server:call(Server, {new_blob, Obj, Replicas, Exclude})
      end).
  
  -spec tags(gen_server(), binary()) -> {ok, [binary()]}.
  tags(Server, Prefix) ->
      case gen_server:call(Server, {get_tags, safe}, ?NODEOP_TIMEOUT) of
          {ok, Tags} ->
  
negative.code:         E -> E
      end.
  
  -spec get_tag(server(), nonempty_string(), atom() | string(), token() | internal)
               -> invalid_name | {missing, _} | unknown_attribute | {ok, binary()} | {error, _}.
  get_tag(Server, Tag, Attrib, Token) ->
      tagop(Server, Tag, {get, Attrib, Token}, ?NODEOP_TIMEOUT).
  
  -spec update_tag(server(), nonempty_string(), [[binary()]], token(), [term()]) -> _.
  update_tag(Server, Tag, Urls, Token, Opt) ->
      tagop(Server, Tag, {update, Urls, Token, Opt}).
  
  -spec update_tag_delayed(server(), nonempty_string(), [[binary()]],
                           token(), [term()]) -> _.
  update_tag_delayed(Server, Tag, Urls, Token, Opt) ->
      tagop(Server, Tag, {delayed_update, Urls, Token, Opt}).
  
  -spec replace_tag(server(), nonempty_string(),
                    attrib(), [binary()] | [[binary()]], token()) -> _.
  replace_tag(Server, Tag, Field, Value, Token) ->
      tagop(Server, Tag, {put, Field, Value, Token}).
  
  -spec delete_attrib(server(), nonempty_string(), attrib(), token()) -> _.
  delete_attrib(Server, Tag, Field, Token) ->
      tagop(Server, Tag, {delete_attrib, Field, Token}).
  
  -spec delete(server(), nonempty_string(), token() | internal) -> term().
  delete(Server, Tag, Token) ->
      tagop(Server, Tag, {delete, Token}).
  
  -spec tagop(server(), nonempty_string(),
              {delete, _}
              | {delete_attrib, _, _}
              | {delayed_update, _, _, _}
  