<div>Sebastian,</div><div><br></div>Replies inline:<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><div class="gmail_quote"><br>Hello,<br>I am just starting out with Riak and want to use Pre-Commit Hooks to<br>automatically add links to keys in a different bucket. To give a<br>simple example, when I add '/bucket2/object2' I want to add a link to<br>
the object in '/bucket1/object1' that points to the new object. I<br>would like to do this in javascript and would appreciate if someone<br>could help me get started. I could not find a single working example,<br>
and have had difficulties in even getting the basics up and running.<br><br>What I have done so far is:<br><br>- Changed the js_source_dir directory to './js_source'<br>- In js_source, I added a file 'validate.js':<br>
<br>var validateFunctions = {<br> validate: function(v) {<br>    return v;<br> }<br>};<br><br>module.exports = {'name': validateFunctions }<br><br></div></div></div></blockquote><div><br></div><div>Riak's JS engine doesn't use CommonJS modules, so whatever you define in the global namespace will be visible. module.exports will probably cause an evaluation error.</div>
<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="HOEnZb">
<div class="h5"><div class="gmail_quote">- I created a new bucket as such:<br><br>curl -v -X PUT -H "Content-Type: application/json" -d '{"props":<br>{"precommit": [{"name": "validate"}]}}'<br>
<a href="http://127.0.0.1:8098/buckets/javascript/props" target="_blank">http://127.0.0.1:8098/buckets/javascript/props</a><br><br></div></div></div></blockquote><div><br></div><div>Because it's in the global namespace, you should refer to it like so: {"name":"validationFunctions.validate","language":"javascript"}</div>
<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="HOEnZb">
<div class="h5"><div class="gmail_quote">- I added a new key to this bucket:<br><br>curl -v -X PUT -d '{"bar":"baz"}' -H "Content-Type: application/json"<br> -H "X-Riak-Vclock: a85hYGBgzGDKBVIszMk55zKYEhnzWBlKIniO8mUBAA=="<br>
<a href="http://127.0.0.1:8098/riak/javascript/doc?returnbody=true" target="_blank">http://127.0.0.1:8098/riak/javascript/doc?returnbody=true</a><br><br>This results in a 403 "PUT aborted by pre-commit hook" failure.<br>
<br></div></div></div></blockquote><div><br></div><div>Because of the namespacing issue, the error was probably a function dispatch problem.</div><div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><div class="gmail_quote">Aside from the obvious "how do I get it to work?" question, I would like to know<br>1) if there is a working example on the web or a tutorial that shows<br>
all the required steps (the Basho Commit Hooks tutorial does not<br>actually show how to enable these hooks)<br></div></div></div></blockquote><div><br></div><div>Unfortunately, no. That's something we should address soon.</div>
<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="HOEnZb">
<div class="h5"><div class="gmail_quote">2) if I need to do anything when I change my Javascript files (restart<br>server, re-initialize my buckets, ..)<br></div></div></div></blockquote><div><br></div><div>You can run `riak-admin js_reload` to reload your JS files that are in the js_source_dir.</div>
<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="HOEnZb">
<div class="h5"><div class="gmail_quote">3) if there is a naming convention that I need to follow for my *.js files<br></div></div></div></blockquote><div><br></div><div>All *.js files from the js_source_dir (non-recursive) will be read and evaluated on startup.</div>
<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="HOEnZb">
<div class="h5"><div class="gmail_quote">4) how to process links in Javascript<br><br></div></div></div></blockquote><div><br></div><div>The format of the object is the same as in MapReduce, so refer to that first:</div><div>
<br></div><div><a href="http://wiki.basho.com/MapReduce.html#Phase-functions">http://wiki.basho.com/MapReduce.html#Phase-functions</a></div><div><br></div><div>Basically, "Links" will be an entry in the metadata sub-object. IIRC each link is an object with keys "bucket","key","tag".</div>
<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="HOEnZb">
<div class="h5"><div class="gmail_quote">So far, I have a a great experience getting to know Riak, but the<br>limited documentation really hinders my progress :)<br><br></div></div></div></blockquote><div><br></div><div>Sorry for that! I understand we'll be improving the experience a lot over the next quarter.</div>
<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="HOEnZb">
<div class="h5"><div class="gmail_quote">Thanks,<br>Sebastian<br><br>_______________________________________________<br>riak-users mailing list<br><a href="mailto:riak-users@lists.basho.com" target="_blank">riak-users@lists.basho.com</a><br>
<a href="http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com" target="_blank">http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com</a><br></div><br></div></div></blockquote></div><br>Cheers,<br clear="all">
<div><br></div>-- <br>Sean Cribbs <<a href="mailto:sean@basho.com" target="_blank">sean@basho.com</a>><div>Software Engineer</div><div>Basho Technologies, Inc.</div><div><a href="http://basho.com/" target="_blank">http://basho.com/</a></div>
<div><br></div>