Pre-commit hook debug

Jon Meredith jmeredith at basho.com
Tue Dec 1 14:20:21 EST 2015


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 <geoff.simonds at gmail.com>
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
> riak-users at lists.basho.com
> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20151201/881df9ef/attachment-0002.html>


More information about the riak-users mailing list