Hi Luke, This is on a three-node cluster on Amazon EC2 Linux. I built it from 2.1.4 KV source using erlang interpreter that Basho provided (REPL header: Erlang R16B02_basho8 (erts-5.10.3) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]).
Also, riak-admin output below to confirm it is a 3-node cluster: > ~/riak/riak1/bin/riak-admin member-status > ================================= Membership > ================================== > Status Ring Pending Node > > ------------------------------------------------------------------------------- > valid 34.4% -- 'riak1@127.0.0.1' > valid 32.8% -- 'riak2@127.0.0.1' > valid 32.8% -- 'riak3@127.0.0.1' > > ------------------------------------------------------------------------------- > Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0 Will appreciate help with debugging and fixing this. Thanks! On Wed, May 11, 2016 at 1:13 PM, Luke Bakken <lbak...@basho.com> wrote: > Hi Sanket - > > I'd like to confirm some details. Is this a one-node cluster? Did you > install an official package or build from source? > > Thanks - > -- > Luke Bakken > Engineer > lbak...@basho.com > > > On Tue, May 10, 2016 at 6:49 PM, Sanket Agrawal > <sanket.agra...@gmail.com> wrote: > > One more thing - I set up the hooks by bucket, not bucket type. The > > documentation for 2.1.4 says that hooks are defined on the bucket level. > > Here is how I set up precommit hook (derived from "Riak Handbook" p95): > > > > curl -X PUT localhost:8098/types/test_kv_wo/buckets/uuid_log/props -H > > 'Content-Type: application/json' -d '{ "props": { "precommit": [{"mod": > > "precommit", "fun": "pre_uuid"}]}}' -v > > > > > > On Tue, May 10, 2016 at 9:15 PM, Sanket Agrawal < > sanket.agra...@gmail.com> > > wrote: > >> > >> I just set up a precommit hook function in dev environment (KV 2.1.4) > >> which doesn't seem to be triggering off at all. The object is being > stored > >> in the bucket, but the precommit logic is not kicking off. I checked > couple > >> of things as listed below but came up with no error - so, it is a > >> head-scratcher why precommit hook is not triggering: > >>> > >>> - Verify precommit is set in bucket properties - snippet from curl > query > >>> for bucket props below: > >>> "precommit":[{"mod":"precommit","fun":"pre_uuid"}] > >>> > >>> - check there is no error in logs > >>> > >>> - check riak-console for commit errors: > >>> $ ./riak1/bin/riak-admin status|grep commit > >>> postcommit_fail : 0 > >>> precommit_fail : 0 > >>> > >>> - Run the precommit function manually on Riak console itself with a > riak > >>> object (that the hook failed to trigger on), and verify it works > >> > >> > >> > >> Also, there is no sasl-error.log. "sasl = on" doesn't work in 2.1.4 > >> because it fails with bad_config error. So, I am assuming sasl logging > is > >> enabled by default. > >> > >> Here is what precommit function does: > >> - For the object (an immutable log append of JSON), calculate the > location > >> of a LWW bucket, and update a easily calculated key with that JSON > body. It > >> works fine from Riak console itself. Code below - we call pre_uuid in > >> precommit hook - both precommit.beam (where the function is) and > rutils.beam > >> have been copied to the relevant location as set in riak config, are > >> accessible through Riak console and work fine if manually executed on an > >> object: > >> > >>> %% Preprocess JSON, and copy to a LWW bucket type > >>> preprocessJ(RObj,B,Choplen) -> > >>> Bn = {rutils:calcBLWWType(RObj),B}, %%this returns the location of > LWW > >>> bucket - works fine in riak console > >>> %% We store uuid map in <username> key - we take out timestamp of > >>> length 32 including "_" > >>> K = riak_object:key(RObj), > >>> Kn = binary:part(K,0,byte_size(K) - Choplen), > >>> NObj = > >>> > riak_object:new(Bn,Kn,riak_object:get_value(RObj),riak_object:get_metadata(RObj)), > >>> {ok, C} = riak:local_client(), > >>> case C:put(NObj) of > >>> ok -> RObj; > >>> _ -> {fail,<<"Error when trying to process in precommit hook">>} > >>> end. > >>> > >>> pre_uuid(RObj) -> preprocessJ(RObj,<<"uuid_latest">>,32). > >> > >> > >> Below is a manual execution from riak console of precommit function - > >> first we execute it to confirm it is returning the original object: > >>> > >>> (riak1@127.0.0.1)5> precommit:pre_uuid(O1). > >>> {r_object,{<<"test_kv_wo">>,<<"uuid_log">>}, > >>> <<"ahmed_2016-05-10T20%3a47%3a47.346299Z">>, > >>> [{r_content,{dict,3,16,16,8,80,48, > >>> > >>> {[],[],[],[],[],[],[],[],[],[],[],[],[],[],...}, > >>> > >>> {{[],[],[],[],[],[],[],[],[],[],[[...]|...],[],...}}}, > >>> > >>> > <<"{\"uname\":\"ahmed\",\"uuid\":\"df8c10e0-381d-5f65-bf43-cb8b4cb806fc\",\"timestamp\":\"2016-05-"...>>}], > >>> [{<<0>>,{1,63630132467}}], > >>> {dict,1,16,16,8,80,48, > >>> {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],...}, > >>> {{[],[],[],[],[],[],[],[],[],[],[],[],[],...}}}, > >>> undefined} > >> > >> > >> Now, we check if the object has been written to test_lww/uuid_latest > >> bucket type: > >>> > >>> (riak1@127.0.0.1)6> > >>> C:get({<<"test_lww">>,<<"uuid_latest">>},<<"ahmed">>). > >>> > >>> {ok,{r_object,{<<"hnm_fsm_lww">>,<<"uuid_latest">>}, > >>> <<"ahmed">>, > >>> [{r_content,{dict,4,16,16,8,80,48, > >>> > >>> {[],[],[],[],[],[],[],[],[],[],[],[],...}, > >>> {{[],[],[],[],[],[],[],[],[],[],...}}}, > >>> > >>> > <<"{\"uname\":\"ahmed\",\"uuid\":\"df8c10e0-381d-5f65-bf43-cb8b4cb806fc\",\"timestamp\":\""...>>}], > >>> [{<<153,190,230,200,210,126,212,127,0,0,156,65>>, > >>> {1,63630148036}}], > >>> {dict,1,16,16,8,80,48, > >>> {[],[],[],[],[],[],[],[],[],[],[],[],[],...}, > >>> {{[],[],[],[],[],[],[],[],[],[],[],...}}}, > >>> undefined}} > >> > >> > >> Will appreciate pointer on how to debug precommit hook. > > > > > > > > _______________________________________________ > > riak-users mailing list > > riak-users@lists.basho.com > > http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com > > >
_______________________________________________ riak-users mailing list riak-users@lists.basho.com http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com