anchor.diff:  -behaviour(gen_server).
   
   %% API
  --export([start_link/1, put/2, workers/0]).
  +-export([start_link/1, put/2, async_put/2, async_put_replies/2, workers/0]).
   -export([init/1,
       handle_call/3,
       handle_cast/2,
  
positive.code: start_link(Name) ->
      gen_server:start_link({local, Name}, ?MODULE, [], []).
  
  %% @spec put(RObj :: riak_object:riak_object(), riak_object:options(), riak_object:riak_client()) ->
  %%        ok |
  %%       {error, timeout} |
  %%       {error, term()}
  put(RObj, Options) ->
      StartTS = os:timestamp(),
      Bucket = riak_object:bucket(RObj),
      case riak_object:get_ts_local_key(RObj) of
  
negative.code:                  #rec{w=W, pw=PW, n_val=NVal, from=self(),
                        start_ts=StartTS,
                        size=size(EncodedVal)}}),
              {ok, {ReqId, Worker}};
          Error ->
              Error
      end.
  
  -spec async_put_replies(ReqIds :: list({reference(), pid()}), riak_object:options()) ->
                                         list(term()).
  async_put_replies(ReqIds, Options) ->
      Timeout = case proplists:get_value(timeout, Options, ?DEFAULT_TIMEOUT) of
                    N when is_integer(N) andalso N > 0 ->
                        N;
                    _ ->
                        ?DEFAULT_TIMEOUT
                end,
      async_put_reply_loop(ReqIds, [], os:timestamp(), Timeout).
  
  
  %%%===================================================================
  %%% gen_server callbacks
  