読んだソースファイル
https://github.com/basho/riak_kv/blob/master/src/riak_kv_wm_object.erl
delete_resource(RD, Ctx=#ctx{bucket=B, key=K, client=C, rw=RW, r=R, w=W,
pr=PR, pw=PW, dw=DW, timeout=Timeout}) ->
....
Result = case wrq:get_req_header(?HEAD_VCLOCK, RD) of
undefined ->
C:delete(B,K,Options);
_ ->
C:delete_vclock(B,K,decode_vclock_header(RD),Options)
end,
https://github.com/basho/riak_kv/blob/master/src/riak_client.erl
delete(Bucket,Key,Options) when is_list(Options) ->
delete(Bucket,Key,Options,?DEFAULT_TIMEOUT);
delete(Bucket,Key,RW) ->
delete(Bucket,Key,[{rw, RW}],?DEFAULT_TIMEOUT).
delete(Bucket,Key,Options,Timeout) when is_list(Options) ->
Me = self(),
ReqId = mk_reqid(),
riak_kv_delete_sup:start_delete(Node, [ReqId, Bucket, Key, Options, Timeout,
Me, ClientId]),
wait_for_reqid(ReqId, Timeout);
https://github.com/basho/riak_kv/blob/master/src/riak_kv_delete.erl
delete(ReqId,Bucket,Key,Options,Timeout,Client,ClientId,undefined)
delete(ReqId,Bucket,Key,Options,Timeout,Client,ClientId,VClock)
delete(ReqId,Bucket,Key,Options,Timeout,Client,ClientId,undefined)
{ok, C} = riak:local_client(),
case C:get(Bucket,Key,[{r,R},{pr,PR},{timeout,Timeout}]) of
{ok, OrigObj} ->
RemainingTime = Timeout - (riak_core_util:moment() - RealStartTime),
delete(ReqId,Bucket,Key,Options,RemainingTime,Client,ClientId,riak_object:vclock(OrigObj));
case ....
delete(ReqId,Bucket,Key,Options,Timeout,Client,ClientId,VClock)
Obj0 = riak_object:new(Bucket, Key, <<>>, dict:store(?MD_DELETED,
"true", dict:new())),
Tombstone = riak_object:set_vclock(Obj0, VClock),
{ok,C} = riak:local_client(ClientId),
Reply = C:put(Tombstone, [{w,W},{pw,PW},{dw, DW},{timeout,Timeout}]),
Client ! {ReqId, Reply},
case Reply of
ok ->
{ok, C2} = riak:local_client(),
AsyncTimeout = 60*1000,
Res = C2:get(Bucket, Key, all, AsyncTimeout),
?DTRACE(?C_DELETE_REAPER_GET_DONE, [1], [<<"reap">>]),
Res;
_ -> ...