From d07f9ee70112823b3ee8e01c43c2f607f4ac4b60 Mon Sep 17 00:00:00 2001 From: Russell Brown Date: Thu, 22 Mar 2018 15:53:52 +0000 Subject: [PATCH] Add `node_confirms` option to PUT request (#371) Also add a long timeout to the datatype tests as they failed once or twice on timeout (I suspect it might have been a network issue acquiring an EQC license, but having a timeout hurts no one.) * Add `node_confirms` option to PUT request And counter/datatype operations. NOTE: depends on riak-2.2.5 `node_confirms` feature. --- src/riakc_datatype.erl | 10 ++++++---- src/riakc_pb_socket.erl | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/riakc_datatype.erl b/src/riakc_datatype.erl index dd6c5a10..3f90e3b6 100644 --- a/src/riakc_datatype.erl +++ b/src/riakc_datatype.erl @@ -112,12 +112,14 @@ module_for_term(T) -> prop_module_for_term]). -define(F(Fmt, Args), lists:flatten(io_lib:format(Fmt, Args))). datatypes_test_() -> + {timeout, 120, [{" prop_module_type() ", ?_assert(eqc:quickcheck(?QC_OUT(prop_module_type())))}] ++ - [ {?F(" ~s(~s) ", [Prop, Mod]), - ?_assert(eqc:quickcheck(?QC_OUT(eqc:testing_time(2, ?MODULE:Prop(Mod)))))} || - Prop <- ?MODPROPS, - Mod <- ?MODULES ]. + [ {?F(" ~s(~s) ", [Prop, Mod]), + ?_assert(eqc:quickcheck(?QC_OUT(eqc:testing_time(2, ?MODULE:Prop(Mod)))))} || + Prop <- ?MODPROPS, + Mod <- ?MODULES ] + }. run_props() -> run_props(500). diff --git a/src/riakc_pb_socket.erl b/src/riakc_pb_socket.erl index ad0127ee..e0a8a43f 100644 --- a/src/riakc_pb_socket.erl +++ b/src/riakc_pb_socket.erl @@ -1582,6 +1582,9 @@ put_options([{n_val, N} | Rest], Req) put_options([{sloppy_quorum, Bool} | Rest], Req) when Bool == true; Bool == false -> put_options(Rest, Req#rpbputreq{sloppy_quorum = Bool}); +put_options([{node_confirms, NodeConfirms} | Rest], Req) -> + NCOpt = riak_pb_kv_codec:encode_quorum(NodeConfirms), + put_options(Rest, Req#rpbputreq{node_confirms = NCOpt}); put_options([{_, _} | _Rest], _Req) -> erlang:error(badarg). @@ -1642,6 +1645,8 @@ counter_incr_options([{dw, DW} | Rest], Req) -> counter_incr_options(Rest, Req#rpbcounterupdatereq{dw=riak_pb_kv_codec:encode_quorum(DW)}); counter_incr_options([{pw, PW} | Rest], Req) -> counter_incr_options(Rest, Req#rpbcounterupdatereq{pw=riak_pb_kv_codec:encode_quorum(PW)}); +counter_incr_options([{node_confirms, NodeConfirms} | Rest], Req) -> + counter_incr_options(Rest, Req#rpbcounterupdatereq{node_confirms=riak_pb_kv_codec:encode_quorum(NodeConfirms)}); counter_incr_options([returnvalue | Rest], Req) -> counter_incr_options(Rest, Req#rpbcounterupdatereq{returnvalue=true}); counter_incr_options([_ | _Rest], _Req) ->