From 68494f40f6e7b6dd3c48a8841b9820a984c6b158 Mon Sep 17 00:00:00 2001 From: John Burwell Date: Mon, 26 Jan 2015 12:19:42 -0500 Subject: [PATCH 1/4] Initial implementation of the delete-create operation --- src/basho_bench_driver_riakc_pb.erl | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/basho_bench_driver_riakc_pb.erl b/src/basho_bench_driver_riakc_pb.erl index 7338dd2af..425f4af12 100644 --- a/src/basho_bench_driver_riakc_pb.erl +++ b/src/basho_bench_driver_riakc_pb.erl @@ -383,6 +383,13 @@ run(delete, KeyGen, _ValueGen, State) -> {error, Reason} -> {error, Reason, State} end; +run(delete_create, KeyGen, ValueGen, State) -> + Key = KeyGen(), + + PutResult = maybe_put_key(Key, ValueGen, State), + DeleteResult = maybe_delete_key(PutResult, Key), + maybe_put_key(DeleteResult, Key, ValueGen); + run(listkeys, _KeyGen, _ValueGen, State) -> %% Pass on rw case riakc_pb_socket:list_keys(State#state.pid, State#state.bucket, State#state.timeout_listkeys) of @@ -509,6 +516,48 @@ run(counter_val, KeyGen, _ValueGen, State) -> %% ==================================================================== %% Internal functions %% ==================================================================== +maybe_delete_key({ok, State}, Key) -> + Result = case riakc_pb_socket:delete(State#state.pid, State#state.bucket, Key, + [{w, all}, {pw, all}, {dw, all}], State#state.timeout_write) of + ok -> + {ok, State}; + {error, Reason} -> + {error, Reason, State} + end, + maybe_durable_get(Result, Key, 2); +maybe_delete_key({error, Reason, State}, _Key) -> + {error, Reason, State}. + +maybe_durable_get({ok, State}, Key, RequestedOps) -> + maybe_durable_get({ok, State}, Key, 0, RequestedOps); +maybe_durable_get({error, Reason, State}, _Key, _RequestedOps) -> + {error, Reason, State}. + +maybe_durable_get({ok, State}, Key, NumOps, RequestedOps) when NumOps < RequestedOps -> + case riakc_pb_socket:get(State#state.pid, State#state.bucket, Key, + [{r, all}, {pr, all}], State#state.timeout_read) of + ok -> + maybe_durable_get({ok, State}, Key, NumOps + 1, RequestedOps); + {error, Reason} -> + {error, Reason} + end; +maybe_durable_get({ok, State}, _Key, NumOps, RequestedOps) when NumOps >= RequestedOps -> + {ok, State}; +maybe_durable_get({error, Reason, State}, _Key, _NumOps, _RequestedOps) -> + {error, Reason, State}. + +maybe_put_key({ok, State}, Key, ValueGen) -> + Robj = riakc_obj:new(State#state.bucket, Key, ValueGen(), State#state.content_type), + case riakc_pb_socket:put(State#state.pid, Robj, [{w, all}, {dw, all}], State#state.timeout_write) of + ok -> + {ok, State}; + {error, Reason} -> + {error, Reason, State} + end; +maybe_put_key({error, Reason, State}, _Key, _ValueGen) -> + {error, Reason, State}; +maybe_put_key(Key, ValueGen, State) -> + maybe_put_key({ok, State}, Key, ValueGen). mapred(State, Input, Query) -> case riakc_pb_socket:mapred(State#state.pid, Input, Query, State#state.timeout_mapreduce) of From c5ce56866a07ace77bea3705f75619f15363e07d Mon Sep 17 00:00:00 2001 From: John Burwell Date: Mon, 26 Jan 2015 12:39:02 -0500 Subject: [PATCH 2/4] Removes looping construct in the maybe_durable_get function based on feedback from Jon that one get would be sufficent to guarentee the reap --- src/basho_bench_driver_riakc_pb.erl | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/basho_bench_driver_riakc_pb.erl b/src/basho_bench_driver_riakc_pb.erl index 425f4af12..4ca12dc33 100644 --- a/src/basho_bench_driver_riakc_pb.erl +++ b/src/basho_bench_driver_riakc_pb.erl @@ -524,26 +524,19 @@ maybe_delete_key({ok, State}, Key) -> {error, Reason} -> {error, Reason, State} end, - maybe_durable_get(Result, Key, 2); + maybe_durable_get(Result, Key); maybe_delete_key({error, Reason, State}, _Key) -> {error, Reason, State}. -maybe_durable_get({ok, State}, Key, RequestedOps) -> - maybe_durable_get({ok, State}, Key, 0, RequestedOps); -maybe_durable_get({error, Reason, State}, _Key, _RequestedOps) -> - {error, Reason, State}. - -maybe_durable_get({ok, State}, Key, NumOps, RequestedOps) when NumOps < RequestedOps -> +maybe_durable_get({ok, State}, Key) -> case riakc_pb_socket:get(State#state.pid, State#state.bucket, Key, [{r, all}, {pr, all}], State#state.timeout_read) of ok -> - maybe_durable_get({ok, State}, Key, NumOps + 1, RequestedOps); + {ok, State}; {error, Reason} -> {error, Reason} end; -maybe_durable_get({ok, State}, _Key, NumOps, RequestedOps) when NumOps >= RequestedOps -> - {ok, State}; -maybe_durable_get({error, Reason, State}, _Key, _NumOps, _RequestedOps) -> +maybe_durable_get({error, Reason, State}, _Key) -> {error, Reason, State}. maybe_put_key({ok, State}, Key, ValueGen) -> From e23ec4266ba1a30d47f4f42cf5d54c94e4e52af6 Mon Sep 17 00:00:00 2001 From: John Burwell Date: Tue, 27 Jan 2015 12:29:59 -0500 Subject: [PATCH 3/4] - Squashes a number of bugs that prevented the delete_create operation from functioning properly --- src/basho_bench_driver_riakc_pb.erl | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/basho_bench_driver_riakc_pb.erl b/src/basho_bench_driver_riakc_pb.erl index 4ca12dc33..3be8b337f 100644 --- a/src/basho_bench_driver_riakc_pb.erl +++ b/src/basho_bench_driver_riakc_pb.erl @@ -531,26 +531,29 @@ maybe_delete_key({error, Reason, State}, _Key) -> maybe_durable_get({ok, State}, Key) -> case riakc_pb_socket:get(State#state.pid, State#state.bucket, Key, [{r, all}, {pr, all}], State#state.timeout_read) of - ok -> + {ok, _} -> + {ok, State}; + {error, notfound} -> {ok, State}; {error, Reason} -> - {error, Reason} + {error, Reason, State} end; maybe_durable_get({error, Reason, State}, _Key) -> {error, Reason, State}. + maybe_put_key({ok, State}, Key, ValueGen) -> + maybe_put_key(Key, ValueGen, State); +maybe_put_key({error, Reason, State}, _Key, _ValueGen) -> + {error, Reason, State}; +maybe_put_key(Key, ValueGen, State) -> Robj = riakc_obj:new(State#state.bucket, Key, ValueGen(), State#state.content_type), case riakc_pb_socket:put(State#state.pid, Robj, [{w, all}, {dw, all}], State#state.timeout_write) of ok -> {ok, State}; {error, Reason} -> {error, Reason, State} - end; -maybe_put_key({error, Reason, State}, _Key, _ValueGen) -> - {error, Reason, State}; -maybe_put_key(Key, ValueGen, State) -> - maybe_put_key({ok, State}, Key, ValueGen). + end. mapred(State, Input, Query) -> case riakc_pb_socket:mapred(State#state.pid, Input, Query, State#state.timeout_mapreduce) of From bb014e3eb4668a0a98e40cdb6e3e940b90ecd638 Mon Sep 17 00:00:00 2001 From: John Burwell Date: Tue, 27 Jan 2015 12:29:59 -0500 Subject: [PATCH 4/4] - Squashes a number of bugs that prevented the delete_create operation from functioning properly ... --- src/basho_bench_driver_riakc_pb.erl | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/basho_bench_driver_riakc_pb.erl b/src/basho_bench_driver_riakc_pb.erl index 4ca12dc33..3be8b337f 100644 --- a/src/basho_bench_driver_riakc_pb.erl +++ b/src/basho_bench_driver_riakc_pb.erl @@ -531,26 +531,29 @@ maybe_delete_key({error, Reason, State}, _Key) -> maybe_durable_get({ok, State}, Key) -> case riakc_pb_socket:get(State#state.pid, State#state.bucket, Key, [{r, all}, {pr, all}], State#state.timeout_read) of - ok -> + {ok, _} -> + {ok, State}; + {error, notfound} -> {ok, State}; {error, Reason} -> - {error, Reason} + {error, Reason, State} end; maybe_durable_get({error, Reason, State}, _Key) -> {error, Reason, State}. + maybe_put_key({ok, State}, Key, ValueGen) -> + maybe_put_key(Key, ValueGen, State); +maybe_put_key({error, Reason, State}, _Key, _ValueGen) -> + {error, Reason, State}; +maybe_put_key(Key, ValueGen, State) -> Robj = riakc_obj:new(State#state.bucket, Key, ValueGen(), State#state.content_type), case riakc_pb_socket:put(State#state.pid, Robj, [{w, all}, {dw, all}], State#state.timeout_write) of ok -> {ok, State}; {error, Reason} -> {error, Reason, State} - end; -maybe_put_key({error, Reason, State}, _Key, _ValueGen) -> - {error, Reason, State}; -maybe_put_key(Key, ValueGen, State) -> - maybe_put_key({ok, State}, Key, ValueGen). + end. mapred(State, Input, Query) -> case riakc_pb_socket:mapred(State#state.pid, Input, Query, State#state.timeout_mapreduce) of