Pre-commit hook debug

Geoff Simonds geoff.simonds at gmail.com
Tue Dec 1 14:46:02 EST 2015


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 <jmeredith at basho.com> 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 <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/e6b034e8/attachment-0002.html>


More information about the riak-users mailing list