anchor.diff:  handle_cast({update_tags, Tags}, S) ->
       {noreply, S#state{tags = Tags}}.
   
  +-spec handle_info({'DOWN', _, _, pid(), _}, state()) -> {noreply, state()}.
   handle_info({'DOWN', _, _, Pid, _}, #state{putq = PutQ, getq = GetQ} = S) ->
       % We don't know if Pid refers to a put or get request.
       % We can safely try to remove it from both the queues: it can exist in
  
positive.code:     {noreply, S#state{putq = NewPutQ, getq = NewGetQ}}.
  
  % callback stubs
  terminate(_Reason, _State) ->
      {}.
  
  code_change(_OldVsn, State, _Extra) ->
      {ok, State}.
  
  
negative.code:                 getq = http_queue:new(GetMax, ?HTTP_QUEUE_LENGTH),
                  scanner = Scanner}}.
  
  -type put_blob_msg() :: {put_blob, nonempty_string()}.
  -type get_tag_ts_msg() :: {get_tag_timestamp, tagname()}.
  -type get_tag_data_msg() :: {get_tag_data, tagid(),
                               {erlang:timestamp(), volume_name()}}.
  -type put_tag_data_msg() :: {put_tag_data, {tagid(), binary()}}.
  -type put_tag_commit_msg() :: {put_tag_commit, tagname(),
                                 [{node(), volume_name()}]}.
  
  -spec handle_call(get_tags, from(), state()) ->
                           {reply, [tagname()], state()};
                   (get_vols, from(), state()) ->
                           {reply, {[volume()], path()}, state()};
                   (get_blob, from(), state()) ->
                           {reply, full, state()} | {noreply, state()};
                   (get_diskspace, from(), state()) ->
                           {reply, diskinfo(), state()};
                   (put_blob_msg(), from(), state()) ->
                           {reply, put_blob_result(), state()} | {noreply, state()};
                   (get_tag_ts_msg(), from(), state()) ->
                           {reply, tag_ts(), state()};
                   (get_tag_data_msg(), from(), state()) -> {noreply, state()};
                   (put_tag_data_msg(), from(), state()) ->
                           {reply, put_tag_data_result(), state()};
                   (put_tag_commit_msg(), from(), state()) ->
                           {reply, {ok, url()} | {error, _}, state()}.
  handle_call(get_tags, _, #state{tags = Tags} = S) ->
      {reply, gb_trees:keys(Tags), S};
  
  