I will change the hook to use riak_object and give it a try. Thanks Jon!
Geoff On Tue, Dec 1, 2015 at 2:20 PM Jon Meredith <[email protected]> wrote: > Hi Geoff, > > Looks like the WM endpoint isn't handling that crash well. > > As for your precommit hook, the hook runs inside the server context so > you'll need to use the riak_object module instead. riakc_obj is a cut-down > version for use in the Erlang client. > > Jon > > On Tue, Dec 1, 2015 at 11:53 AM Geoff Simonds <[email protected]> > wrote: > >> Good afternoon, >> >> I am writing to ask for some help regarding a pre-commit hook in Riak >> 2.1.1. I am locally running a 5 node Riak dev cluster ( >> https://github.com/xing/riak-dev-cluster) on a Mac and am having trouble >> with a pre-commit hook. I have added the "add_paths" to my advanced.config: >> [ >> Riak KV config >> {riak_kv, >> [ >> %% Paths to custom erlang modules. >> {add_paths, ["/tmp/ls/custom_modules"]} >> ]} >> ]. >> >> and then copied the compiled beam to this directory. I then issued a >> curl PUT to add the pre-commit to the bucket props: >> >> curl -XPUT -H "Content-Type: application/json" -d >> '{"props":{"precommit":[{"mod":"rr_pre_commit","fun":"set_process_datetime_index"}]}}' >> http://127.0.0.1:11098/buckets/LS\~News/props >> >> and am able to confirm it worked when I do a GET on the bucket >> properties. The bucket already had a single key stored in it and when I do >> another PUT on that object (hoping to get the pre-commit to fire), I get >> the following error: >> >> {error,badarg, >> [{erlang,iolist_to_binary, >> [{hook_crashed, >> {rr_pre_commit,set_process_datetime_index,error, >> function_clause}}], >> []}, >> {wrq,append_to_response_body,2,[{file,"src/wrq.erl"},{line,215}]}, >> {riak_kv_wm_object,handle_common_error,3, >> [{file,"src/riak_kv_wm_object.erl"},{line,1178}]}, >> {webmachine_resource,resource_call,3, >> [{file,"src/webmachine_resource.erl"},{line,186}]}, >> {webmachine_resource,do,3, >> [{file,"src/webmachine_resource.erl"},{line,142}]}, >> {webmachine_decision_core,resource_call,1, >> [{file,"src/webmachine_decision_core.erl"},{line,48}]}, >> {webmachine_decision_core,accept_helper,1, >> [{file,"src/webmachine_decision_core.erl"},{line,616}]}, >> {webmachine_decision_core,decision,1, >> [{file,"src/webmachine_decision_core.erl"},{line,521}]}]}} >> >> >> I am able to run the pre-commit function when I attach to the Riak shell and >> add the paths manually (code:add_patha) but not when it triggers via a PUT. >> Also, in my pre-commit hook module/function I am using the riak erlang >> client to access the object metadata. Is this module compiled into Riak or >> do I also need to add a path for this? >> >> >> The pre-commit module/function is below: >> >> >> set_process_datetime_index(Obj) -> >> case is_deleted(Obj) of >> true -> >> Obj; >> _ -> >> MD = riakc_obj:get_update_metadata(Obj), >> case riakc_obj:get_user_metadata_entry(MD, >> <<"process_messagedate">>) of >> %% if user "process messagedate" metadata is not found >> notfound -> >> %% add it >> MD2 = >> riakc_obj:set_user_metadata_entry(MD,{<<"process_messagedate">>,format_date_index(calendar:local_time())}), >> %% and modify the message_date 2i index >> MD3 = riakc_obj:set_secondary_index(MD2,{{binary_index, >> <<"messagedate">>}, [format_date_index(calendar:local_time())]}), >> riakc_obj:update_metadata(Obj,MD3); >> _ -> >> %% otherwise, don't do anything as we have already stored the >> process time >> Obj >> end >> >> end. >> >> is_deleted(Obj)-> >> case dict:find(<<"X-Riak-Deleted">>,riakc_obj:get_metadata(Obj)) of >> {ok,_} -> >> true; >> _ -> >> false >> end. >> >> >> Any help or advice is appreciated. >> >> >> Geoff >> >> _______________________________________________ >> riak-users mailing list >> [email protected] >> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com >> >
_______________________________________________ riak-users mailing list [email protected] http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
