<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mariano Guerra's Log (Posts about riak-core-tutorial)</title><link>http://marianoguerra.org/</link><description></description><atom:link href="http://marianoguerra.org/categories/cat_riak-core-tutorial.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Mon, 18 Nov 2024 17:56:24 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Riak Core Tutorial Part 8: HTTP API</title><link>http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;pre class="literal-block"&gt;The content of this chapter is in the 06-http-api branch.

https://gitlab.com/marianoguerra/tanodb/tree/06-http-api&lt;/pre&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;How it Works&lt;/h2&gt;
&lt;p&gt;We are adding a simple HTTP API to our system, it will run on all nodes and
allow us to interact with it from the outside.&lt;/p&gt;
&lt;p&gt;We will use the Cowboy 2.0 HTTP Server.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="implementing-it"&gt;
&lt;h2&gt;Implementing it&lt;/h2&gt;
&lt;p&gt;We need to add cowboy as a dependency on rebar.config and tanodb.app.src.&lt;/p&gt;
&lt;p&gt;Then in tanodb_app.erl we need to start the HTTP API:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-1" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;setup_http_api&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-2" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;Dispatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;cowboy_router&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;&lt;span class="n"&gt;'_'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s"&gt;"/kv/:bucket/:key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb_h_kv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]}]}]),&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-3" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-4" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;HttpPort&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;application&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http_port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-5" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;HttpAcceptors&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;application&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http_acceptors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-6" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;HttpMaxConnections&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;application&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http_max_connections&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;infinity&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-7" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-8" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Starting HTTP API at port &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;HttpPort&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-9" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-10" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;cowboy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;start_clear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb_http_listener&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-11" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;HttpPort&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-12" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;num_acceptors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;HttpAcceptors&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-13" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;max_connections&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;HttpMaxConnections&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-14" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;dispatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Dispatch&lt;/span&gt;&lt;span class="p"&gt;}}),&lt;/span&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-15" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-15"&gt;&lt;/a&gt;
&lt;a id="rest_code_6d79d180b30d47c08c5274d025fd4c93-16" name="rest_code_6d79d180b30d47c08c5274d025fd4c93-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_6d79d180b30d47c08c5274d025fd4c93-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We get the configuration from the environment, which is set by cuttlefish.&lt;/p&gt;
&lt;p&gt;The API handler module tanodb_h_kv's main code:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-1" name="rest_code_c6adfdf232d64613b048b6806ce90416-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"GET"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-2" name="rest_code_c6adfdf232d64613b048b6806ce90416-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bindings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-3" name="rest_code_c6adfdf232d64613b048b6806ce90416-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-4" name="rest_code_c6adfdf232d64613b048b6806ce90416-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-4"&gt;&lt;/a&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-5" name="rest_code_c6adfdf232d64613b048b6806ce90416-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bindings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-6" name="rest_code_c6adfdf232d64613b048b6806ce90416-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Req1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read_all_body&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-7" name="rest_code_c6adfdf232d64613b048b6806ce90416-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Req1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-8" name="rest_code_c6adfdf232d64613b048b6806ce90416-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-8"&gt;&lt;/a&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"DELETE"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-9" name="rest_code_c6adfdf232d64613b048b6806ce90416-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bindings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c6adfdf232d64613b048b6806ce90416-10" name="rest_code_c6adfdf232d64613b048b6806ce90416-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c6adfdf232d64613b048b6806ce90416-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="trying-it"&gt;
&lt;h2&gt;Trying it&lt;/h2&gt;
&lt;section id="single-node"&gt;
&lt;h3&gt;Single Node&lt;/h3&gt;
&lt;p&gt;We are going to first test it on a single node.&lt;/p&gt;
&lt;p&gt;Get key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;, which doesn't exist yet:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_262e81034b2d4df082a082af0fe7ae6b-1" name="rest_code_262e81034b2d4df082a082af0fe7ae6b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_262e81034b2d4df082a082af0fe7ae6b-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;GET&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8098/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-1" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-2" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-3" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-4" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-5" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-6" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-7" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-8" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-9" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-10" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-11" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-12" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-13" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-14" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-15" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-16" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-17" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-18" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-19" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-20" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-21" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-22" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-23" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-24" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-25" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-26" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-27" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_2a3ef5e83039402f90132cb3fae31b78-28" name="rest_code_2a3ef5e83039402f90132cb3fae31b78-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2a3ef5e83039402f90132cb3fae31b78-28"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Put key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt; with content &lt;cite&gt;hi there&lt;/cite&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_becddf6346644e2fab9dc568467d1137-1" name="rest_code_becddf6346644e2fab9dc568467d1137-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_becddf6346644e2fab9dc568467d1137-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;POST&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8098/kv/b1/k1&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hi there'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-1" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-2" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-3" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-4" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-5" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-6" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-7" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-8" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-9" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-10" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-11" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-12" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-13" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-14" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-15" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-16" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-17" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-18" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-19" name="rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_eb3bbd6dd2354c8c9e33743659f9acc1-19"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Get key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;, which now exists:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_609d1a637e454dc0869efc5182339818-1" name="rest_code_609d1a637e454dc0869efc5182339818-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_609d1a637e454dc0869efc5182339818-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;GET&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8098/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-1" name="rest_code_b9400b7dca7646768dd977776ef8496f-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-2" name="rest_code_b9400b7dca7646768dd977776ef8496f-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-3" name="rest_code_b9400b7dca7646768dd977776ef8496f-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-4" name="rest_code_b9400b7dca7646768dd977776ef8496f-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-5" name="rest_code_b9400b7dca7646768dd977776ef8496f-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-6" name="rest_code_b9400b7dca7646768dd977776ef8496f-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-7" name="rest_code_b9400b7dca7646768dd977776ef8496f-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-8" name="rest_code_b9400b7dca7646768dd977776ef8496f-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-9" name="rest_code_b9400b7dca7646768dd977776ef8496f-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hi there"&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-10" name="rest_code_b9400b7dca7646768dd977776ef8496f-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-11" name="rest_code_b9400b7dca7646768dd977776ef8496f-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-12" name="rest_code_b9400b7dca7646768dd977776ef8496f-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-13" name="rest_code_b9400b7dca7646768dd977776ef8496f-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-14" name="rest_code_b9400b7dca7646768dd977776ef8496f-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-15" name="rest_code_b9400b7dca7646768dd977776ef8496f-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-16" name="rest_code_b9400b7dca7646768dd977776ef8496f-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-17" name="rest_code_b9400b7dca7646768dd977776ef8496f-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hi there"&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-18" name="rest_code_b9400b7dca7646768dd977776ef8496f-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-19" name="rest_code_b9400b7dca7646768dd977776ef8496f-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-20" name="rest_code_b9400b7dca7646768dd977776ef8496f-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-21" name="rest_code_b9400b7dca7646768dd977776ef8496f-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-22" name="rest_code_b9400b7dca7646768dd977776ef8496f-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-23" name="rest_code_b9400b7dca7646768dd977776ef8496f-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-24" name="rest_code_b9400b7dca7646768dd977776ef8496f-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-25" name="rest_code_b9400b7dca7646768dd977776ef8496f-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hi there"&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-26" name="rest_code_b9400b7dca7646768dd977776ef8496f-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-27" name="rest_code_b9400b7dca7646768dd977776ef8496f-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_b9400b7dca7646768dd977776ef8496f-28" name="rest_code_b9400b7dca7646768dd977776ef8496f-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b9400b7dca7646768dd977776ef8496f-28"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Delete key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_8c6764487b8c400789be6c71c18d75c3-1" name="rest_code_8c6764487b8c400789be6c71c18d75c3-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_8c6764487b8c400789be6c71c18d75c3-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;DELETE&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8098/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-1" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-2" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-3" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-4" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-5" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-6" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-7" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-8" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-9" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-10" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-11" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-12" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-13" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-14" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-15" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-16" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-17" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-18" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-19" name="rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_b5afad8f62c34ea9a0d88af09cedfd9b-19"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Get key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;, which shouldn't exist anymore:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_2c02b61a85984986a5fc08d62a6e05fb-1" name="rest_code_2c02b61a85984986a5fc08d62a6e05fb-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_2c02b61a85984986a5fc08d62a6e05fb-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;GET&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8098/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-1" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-2" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-3" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-4" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-5" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-6" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-7" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-8" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-9" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-10" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-11" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-12" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-13" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-14" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-15" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-16" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-17" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-18" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-19" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-20" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-21" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-22" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-23" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-24" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-25" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-26" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-27" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_97cb0ee33a734097b5ad80eb16516d01-28" name="rest_code_97cb0ee33a734097b5ad80eb16516d01-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_97cb0ee33a734097b5ad80eb16516d01-28"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="cluster"&gt;
&lt;h3&gt;Cluster&lt;/h3&gt;
&lt;p&gt;We are going to test it on a cluster now, notice that the port changes, we
are sending each request to a different node.&lt;/p&gt;
&lt;p&gt;You can see each node's port on the logs at startup:&lt;/p&gt;
&lt;pre class="literal-block"&gt;[info] Starting HTTP API at port 8198&lt;/pre&gt;
&lt;p&gt;Get key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;, which doesn't exist yet:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_99b57d6024d04ea1ad1b1e70b3141671-1" name="rest_code_99b57d6024d04ea1ad1b1e70b3141671-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_99b57d6024d04ea1ad1b1e70b3141671-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;GET&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8198/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notice the node name on the partition field, it may change for you depending
on the state of handoff or how vnodes were distributed.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-1" name="rest_code_c09e42d0f58142feb26302899b319f40-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-2" name="rest_code_c09e42d0f58142feb26302899b319f40-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-3" name="rest_code_c09e42d0f58142feb26302899b319f40-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-4" name="rest_code_c09e42d0f58142feb26302899b319f40-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-5" name="rest_code_c09e42d0f58142feb26302899b319f40-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-6" name="rest_code_c09e42d0f58142feb26302899b319f40-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-7" name="rest_code_c09e42d0f58142feb26302899b319f40-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb2@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-8" name="rest_code_c09e42d0f58142feb26302899b319f40-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-9" name="rest_code_c09e42d0f58142feb26302899b319f40-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-10" name="rest_code_c09e42d0f58142feb26302899b319f40-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-11" name="rest_code_c09e42d0f58142feb26302899b319f40-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-12" name="rest_code_c09e42d0f58142feb26302899b319f40-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-13" name="rest_code_c09e42d0f58142feb26302899b319f40-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-14" name="rest_code_c09e42d0f58142feb26302899b319f40-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-15" name="rest_code_c09e42d0f58142feb26302899b319f40-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-16" name="rest_code_c09e42d0f58142feb26302899b319f40-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-17" name="rest_code_c09e42d0f58142feb26302899b319f40-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-18" name="rest_code_c09e42d0f58142feb26302899b319f40-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-19" name="rest_code_c09e42d0f58142feb26302899b319f40-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-20" name="rest_code_c09e42d0f58142feb26302899b319f40-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-21" name="rest_code_c09e42d0f58142feb26302899b319f40-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-22" name="rest_code_c09e42d0f58142feb26302899b319f40-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-23" name="rest_code_c09e42d0f58142feb26302899b319f40-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-24" name="rest_code_c09e42d0f58142feb26302899b319f40-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-25" name="rest_code_c09e42d0f58142feb26302899b319f40-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-26" name="rest_code_c09e42d0f58142feb26302899b319f40-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-27" name="rest_code_c09e42d0f58142feb26302899b319f40-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_c09e42d0f58142feb26302899b319f40-28" name="rest_code_c09e42d0f58142feb26302899b319f40-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_c09e42d0f58142feb26302899b319f40-28"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Put key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt; with content &lt;cite&gt;hi there&lt;/cite&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_bdae0d03443a46929f27fc87fb0169e1-1" name="rest_code_bdae0d03443a46929f27fc87fb0169e1-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_bdae0d03443a46929f27fc87fb0169e1-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;POST&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8298/kv/b1/k1&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hi there'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-1" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-2" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-3" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-4" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-5" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-6" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-7" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-8" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-9" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-10" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-11" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-12" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-13" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-14" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb2@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-15" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-16" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-17" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-18" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_61f9d0886a394bfba82e726a2ac9f911-19" name="rest_code_61f9d0886a394bfba82e726a2ac9f911-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_61f9d0886a394bfba82e726a2ac9f911-19"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Get key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;, which now exists:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_d5cb81678f174439a538b03a1b38cdba-1" name="rest_code_d5cb81678f174439a538b03a1b38cdba-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_d5cb81678f174439a538b03a1b38cdba-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;GET&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8398/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-1" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-2" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-3" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-4" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-5" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-6" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-7" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-8" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-9" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hi there"&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-10" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-11" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-12" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-13" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-14" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-15" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-16" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-17" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hi there"&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-18" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-19" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-20" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-21" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-22" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb2@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-23" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-24" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-25" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hi there"&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-26" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-27" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_e5c2f6850d884727bbcdb1a56abf8639-28" name="rest_code_e5c2f6850d884727bbcdb1a56abf8639-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_e5c2f6850d884727bbcdb1a56abf8639-28"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Delete key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_647562aa2f224803a422e29848d0cde4-1" name="rest_code_647562aa2f224803a422e29848d0cde4-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_647562aa2f224803a422e29848d0cde4-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;DELETE&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8198/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-1" name="rest_code_14da0f77a29b48848d7bae616cced1db-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-2" name="rest_code_14da0f77a29b48848d7bae616cced1db-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-3" name="rest_code_14da0f77a29b48848d7bae616cced1db-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-4" name="rest_code_14da0f77a29b48848d7bae616cced1db-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb2@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-5" name="rest_code_14da0f77a29b48848d7bae616cced1db-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-6" name="rest_code_14da0f77a29b48848d7bae616cced1db-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-7" name="rest_code_14da0f77a29b48848d7bae616cced1db-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-8" name="rest_code_14da0f77a29b48848d7bae616cced1db-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-9" name="rest_code_14da0f77a29b48848d7bae616cced1db-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-10" name="rest_code_14da0f77a29b48848d7bae616cced1db-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-11" name="rest_code_14da0f77a29b48848d7bae616cced1db-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-12" name="rest_code_14da0f77a29b48848d7bae616cced1db-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-13" name="rest_code_14da0f77a29b48848d7bae616cced1db-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-14" name="rest_code_14da0f77a29b48848d7bae616cced1db-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-15" name="rest_code_14da0f77a29b48848d7bae616cced1db-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-16" name="rest_code_14da0f77a29b48848d7bae616cced1db-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-17" name="rest_code_14da0f77a29b48848d7bae616cced1db-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-18" name="rest_code_14da0f77a29b48848d7bae616cced1db-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_14da0f77a29b48848d7bae616cced1db-19" name="rest_code_14da0f77a29b48848d7bae616cced1db-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_14da0f77a29b48848d7bae616cced1db-19"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Get key &lt;cite&gt;k1&lt;/cite&gt; in bucket &lt;cite&gt;b1&lt;/cite&gt;, which shouldn't exist anymore:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_86b05c0220024ffd825a4e65f1797fd1-1" name="rest_code_86b05c0220024ffd825a4e65f1797fd1-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_86b05c0220024ffd825a4e65f1797fd1-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;GET&lt;span class="w"&gt;  &lt;/span&gt;http://localhost:8298/kv/b1/k1
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-1" name="rest_code_89da1411be34413892ee0778b36614e9-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-2" name="rest_code_89da1411be34413892ee0778b36614e9-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"replies"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-3" name="rest_code_89da1411be34413892ee0778b36614e9-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-4" name="rest_code_89da1411be34413892ee0778b36614e9-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-5" name="rest_code_89da1411be34413892ee0778b36614e9-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-6" name="rest_code_89da1411be34413892ee0778b36614e9-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-7" name="rest_code_89da1411be34413892ee0778b36614e9-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-8" name="rest_code_89da1411be34413892ee0778b36614e9-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-9" name="rest_code_89da1411be34413892ee0778b36614e9-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1278813932664540053428224228626747642198940975104"&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-10" name="rest_code_89da1411be34413892ee0778b36614e9-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-11" name="rest_code_89da1411be34413892ee0778b36614e9-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-12" name="rest_code_89da1411be34413892ee0778b36614e9-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-13" name="rest_code_89da1411be34413892ee0778b36614e9-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-14" name="rest_code_89da1411be34413892ee0778b36614e9-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-15" name="rest_code_89da1411be34413892ee0778b36614e9-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb1@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-16" name="rest_code_89da1411be34413892ee0778b36614e9-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-17" name="rest_code_89da1411be34413892ee0778b36614e9-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1255977969581244695331291653115555720016817029120"&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-18" name="rest_code_89da1411be34413892ee0778b36614e9-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-19" name="rest_code_89da1411be34413892ee0778b36614e9-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-20" name="rest_code_89da1411be34413892ee0778b36614e9-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"bucket"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-21" name="rest_code_89da1411be34413892ee0778b36614e9-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_found"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-22" name="rest_code_89da1411be34413892ee0778b36614e9-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"key"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"k1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-23" name="rest_code_89da1411be34413892ee0778b36614e9-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tanodb2@127.0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-24" name="rest_code_89da1411be34413892ee0778b36614e9-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-25" name="rest_code_89da1411be34413892ee0778b36614e9-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"partition"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1301649895747835411525156804137939564381064921088"&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-26" name="rest_code_89da1411be34413892ee0778b36614e9-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-27" name="rest_code_89da1411be34413892ee0778b36614e9-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_89da1411be34413892ee0778b36614e9-28" name="rest_code_89da1411be34413892ee0778b36614e9-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/#rest_code_89da1411be34413892ee0778b36614e9-28"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;</description><category>distsys</category><category>erlang</category><category>riak_core</category><category>tutorial</category><guid>http://marianoguerra.org/posts/riak-core-tutorial-part-8-http-api/</guid><pubDate>Wed, 05 Sep 2018 19:18:14 GMT</pubDate></item><item><title>Riak Core Tutorial Part 7: Coverage Calls</title><link>http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;pre class="literal-block"&gt;The content of this chapter is in the `05-coverage` branch.

https://gitlab.com/marianoguerra/tanodb/tree/05-coverage&lt;/pre&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;How it Works&lt;/h2&gt;
&lt;p&gt;Since bucket and key are hashed together to decide to which vnode a request
will go it means that the keys for a given bucket may be distributed in
multiple vnodes, and in case you are running in a cluster this means your keys
are distributed in multiple physical nodes.&lt;/p&gt;
&lt;p&gt;This means that to list all the keys from a bucket we have to ask all the
vnodes for the keys on a given bucket and then put the responses together and
return the set of all responses.&lt;/p&gt;
&lt;p&gt;For this Riak Core provides something called coverage calls, which are a way to
handle this process of running a command on all vnodes and gathering the
responses.&lt;/p&gt;
&lt;p&gt;In this chapter we are going to implement the &lt;cite&gt;tanodb:keys(Bucket)&lt;/cite&gt; function
using coverage calls.&lt;/p&gt;
&lt;p&gt;In this case we call &lt;cite&gt;tanodb_coverage_fsm:start({keys, Bucket}, Timeout)&lt;/cite&gt;, which
is a new module, it implements a behavior called &lt;cite&gt;riak_core_coverage_fsm&lt;/cite&gt;, short
for riak_core_coverage &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Finite-state_machine"&gt;finite state machine&lt;/a&gt;,
it implements some predefined callbacks that are called on different states of
a finite state machine.&lt;/p&gt;
&lt;p&gt;The start function calls &lt;cite&gt;tanodb_coverage_fsm_sup:start_fsm([ReqId, self(), Request, Timeout])&lt;/cite&gt;
which starts a supervisor for this new process.&lt;/p&gt;
&lt;p&gt;When we start the fsm with a command &lt;cite&gt;{keys, Bucket}&lt;/cite&gt; and a timeout in
milliseconds, it starts a supervisor that starts the finite state machine
process, it first calls the init function which initializes the state of the
process and returns some information to riak_core so it knows what kind of
coverage call we want to do, then riak_core calls the handle_coverage function
on each vnode and with each response it calls &lt;cite&gt;process_result&lt;/cite&gt; in our process.&lt;/p&gt;
&lt;p&gt;When all the results are received or if an error happens (such as a timeout) it
will call the finish callback there we send the results to the calling process
which is waiting for it.&lt;/p&gt;
&lt;p&gt;The handle_coverage implementation is really simple, it uses the
&lt;a class="reference external" href="http://www.erlang.org/doc/man/ets.html#match-2"&gt;ets:match/2 function&lt;/a&gt; to
match against all the entries with the given bucket and returns the key from
the matched results.&lt;/p&gt;
&lt;p&gt;You can read more about ets match specs in the
&lt;a class="reference external" href="http://www.erlang.org/doc/apps/erts/match_spec.html"&gt;match spec chapter on the Erlang documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="implementing-it"&gt;
&lt;h2&gt;Implementing it&lt;/h2&gt;
&lt;p&gt;Code in tanodb.erl is really simple:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_a44a159189a54a82939fde627b23145c-1" name="rest_code_a44a159189a54a82939fde627b23145c-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_a44a159189a54a82939fde627b23145c-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_a44a159189a54a82939fde627b23145c-2" name="rest_code_a44a159189a54a82939fde627b23145c-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_a44a159189a54a82939fde627b23145c-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_a44a159189a54a82939fde627b23145c-3" name="rest_code_a44a159189a54a82939fde627b23145c-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_a44a159189a54a82939fde627b23145c-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;tanodb_coverage_fsm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In tanodb_vnode.erl we need to implement the handle_coverage callback:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_d0fec6c5e8a640d69cb6f15186512860-1" name="rest_code_d0fec6c5e8a640d69cb6f15186512860-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d0fec6c5e8a640d69cb6f15186512860-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_coverage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;KeySpaces&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{_,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;RefId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_},&lt;/span&gt;
&lt;a id="rest_code_d0fec6c5e8a640d69cb6f15186512860-2" name="rest_code_d0fec6c5e8a640d69cb6f15186512860-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d0fec6c5e8a640d69cb6f15186512860-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_d0fec6c5e8a640d69cb6f15186512860-3" name="rest_code_d0fec6c5e8a640d69cb6f15186512860-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d0fec6c5e8a640d69cb6f15186512860-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_d0fec6c5e8a640d69cb6f15186512860-4" name="rest_code_d0fec6c5e8a640d69cb6f15186512860-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d0fec6c5e8a640d69cb6f15186512860-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;RefId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We add two new modules:&lt;/p&gt;
&lt;dl class="simple"&gt;
&lt;dt&gt;tanodb_coverage_fsm&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;The FSM implementation for the coverage call.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;tanodb_coverage_fsm_sup&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;The supervisor for the FSM processes.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;We also add the tanodb_coverage_fsm_sup to the tanodb_sup supervisor tree.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trying-it"&gt;
&lt;h2&gt;Trying it&lt;/h2&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-1" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-1"&gt;&lt;/a&gt;&lt;span class="nv"&gt;Nums&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;seq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-2" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-2"&gt;&lt;/a&gt;&lt;span class="nv"&gt;Buckets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;list_to_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"bucket-"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;integer_to_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-3" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-3"&gt;&lt;/a&gt;&lt;span class="nv"&gt;Nums&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-4" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-4"&gt;&lt;/a&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;list_to_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"key-"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;integer_to_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Nums&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-5" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-6" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-6"&gt;&lt;/a&gt;&lt;span class="nv"&gt;GenValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-7" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-8" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-8"&gt;&lt;/a&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-9" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-10" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;GenValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-11" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-12" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-13" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-13"&gt;&lt;/a&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Buckets&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-14" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-14"&gt;&lt;/a&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-15" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-15"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Items&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-1"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_4800f735ea4e4d988029fc45d6b362ed-16" name="rest_code_4800f735ea4e4d988029fc45d6b362ed-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_4800f735ea4e4d988029fc45d6b362ed-16"&gt;&lt;/a&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=/=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]].&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-1" name="rest_code_d230342bae4f4634aca555ef2feac34c-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="mi"&gt;296867520082839655260123481645494988367611297792&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-2" name="rest_code_d230342bae4f4634aca555ef2feac34c-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-10"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-3" name="rest_code_d230342bae4f4634aca555ef2feac34c-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-3"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;365375409332725729550921208179070754913983135744&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-4" name="rest_code_d230342bae4f4634aca555ef2feac34c-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-4"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-5" name="rest_code_d230342bae4f4634aca555ef2feac34c-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-5"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;137015778499772148581595453067151533092743675904&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-6" name="rest_code_d230342bae4f4634aca555ef2feac34c-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-8"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-7" name="rest_code_d230342bae4f4634aca555ef2feac34c-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-7"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;707914855582156101004909840846949587645842325504&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-8" name="rest_code_d230342bae4f4634aca555ef2feac34c-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-9"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-9" name="rest_code_d230342bae4f4634aca555ef2feac34c-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-9"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;45671926166590716193865151022383844364247891968&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-10" name="rest_code_d230342bae4f4634aca555ef2feac34c-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-2"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-11" name="rest_code_d230342bae4f4634aca555ef2feac34c-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-11"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;753586781748746817198774991869333432010090217472&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-12" name="rest_code_d230342bae4f4634aca555ef2feac34c-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-9"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-13" name="rest_code_d230342bae4f4634aca555ef2feac34c-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-13"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;274031556999544297163190906134303066185487351808&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-14" name="rest_code_d230342bae4f4634aca555ef2feac34c-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-10"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-15" name="rest_code_d230342bae4f4634aca555ef2feac34c-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-15"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;822094670998632891489572718402909198556462055424&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-16" name="rest_code_d230342bae4f4634aca555ef2feac34c-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-5"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-17" name="rest_code_d230342bae4f4634aca555ef2feac34c-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-17"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;319703483166135013357056057156686910549735243776&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-18" name="rest_code_d230342bae4f4634aca555ef2feac34c-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-4"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-10"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-19" name="rest_code_d230342bae4f4634aca555ef2feac34c-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-19"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;342539446249430371453988632667878832731859189760&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-20" name="rest_code_d230342bae4f4634aca555ef2feac34c-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-4"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-21" name="rest_code_d230342bae4f4634aca555ef2feac34c-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-21"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;68507889249886074290797726533575766546371837952&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-22" name="rest_code_d230342bae4f4634aca555ef2feac34c-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-2"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-23" name="rest_code_d230342bae4f4634aca555ef2feac34c-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-23"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;799258707915337533392640142891717276374338109440&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-24" name="rest_code_d230342bae4f4634aca555ef2feac34c-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-5"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-25" name="rest_code_d230342bae4f4634aca555ef2feac34c-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-25"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;91343852333181432387730302044767688728495783936&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-26" name="rest_code_d230342bae4f4634aca555ef2feac34c-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-2"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-27" name="rest_code_d230342bae4f4634aca555ef2feac34c-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-27"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;730750818665451459101842416358141509827966271488&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-28" name="rest_code_d230342bae4f4634aca555ef2feac34c-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-9"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-29" name="rest_code_d230342bae4f4634aca555ef2feac34c-29" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-29"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;159851741583067506678528028578343455274867621888&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-30" name="rest_code_d230342bae4f4634aca555ef2feac34c-30" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-30"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-8"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-31" name="rest_code_d230342bae4f4634aca555ef2feac34c-31" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-31"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;182687704666362864775460604089535377456991567872&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-32" name="rest_code_d230342bae4f4634aca555ef2feac34c-32" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-8"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-33" name="rest_code_d230342bae4f4634aca555ef2feac34c-33" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-33"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;844930634081928249586505293914101120738586001408&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-34" name="rest_code_d230342bae4f4634aca555ef2feac34c-34" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-34"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-5"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-35" name="rest_code_d230342bae4f4634aca555ef2feac34c-35" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-35"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;867766597165223607683437869425293042920709947392&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-36" name="rest_code_d230342bae4f4634aca555ef2feac34c-36" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-36"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-3"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-37" name="rest_code_d230342bae4f4634aca555ef2feac34c-37" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-37"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;890602560248518965780370444936484965102833893376&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-38" name="rest_code_d230342bae4f4634aca555ef2feac34c-38" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-38"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-3"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-39" name="rest_code_d230342bae4f4634aca555ef2feac34c-39" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-39"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-40" name="rest_code_d230342bae4f4634aca555ef2feac34c-40" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-40"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-6"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-41" name="rest_code_d230342bae4f4634aca555ef2feac34c-41" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-41"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;913438523331814323877303020447676887284957839360&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-42" name="rest_code_d230342bae4f4634aca555ef2feac34c-42" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-42"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-3"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-43" name="rest_code_d230342bae4f4634aca555ef2feac34c-43" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-43"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1118962191081472546749696200048404186924073353216&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-44" name="rest_code_d230342bae4f4634aca555ef2feac34c-44" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-44"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-7"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-1"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-45" name="rest_code_d230342bae4f4634aca555ef2feac34c-45" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-45"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1164634117248063262943561351070788031288321245184&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-46" name="rest_code_d230342bae4f4634aca555ef2feac34c-46" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-46"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-7"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-47" name="rest_code_d230342bae4f4634aca555ef2feac34c-47" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-47"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1027618338748291114361965898003636498195577569280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-48" name="rest_code_d230342bae4f4634aca555ef2feac34c-48" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-48"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-"&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-49" name="rest_code_d230342bae4f4634aca555ef2feac34c-49" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-49"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1096126227998177188652763624537212264741949407232&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-50" name="rest_code_d230342bae4f4634aca555ef2feac34c-50" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-50"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-51" name="rest_code_d230342bae4f4634aca555ef2feac34c-51" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-51"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1073290264914881830555831049026020342559825461248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-52" name="rest_code_d230342bae4f4634aca555ef2feac34c-52" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-52"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[...]},&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-53" name="rest_code_d230342bae4f4634aca555ef2feac34c-53" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-53"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1141798154164767904846628775559596109106197299200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d230342bae4f4634aca555ef2feac34c-54" name="rest_code_d230342bae4f4634aca555ef2feac34c-54" href="http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/#rest_code_d230342bae4f4634aca555ef2feac34c-54"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,...}]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;</description><category>distsys</category><category>erlang</category><category>riak_core</category><category>tutorial</category><guid>http://marianoguerra.org/posts/riak-core-tutorial-part-7-coverage-calls/</guid><pubDate>Thu, 30 Aug 2018 11:25:52 GMT</pubDate></item><item><title>Riak Core Tutorial Part 6: Handoff</title><link>http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;pre class="literal-block"&gt;The content of this chapter is in the 04-handoff branch.

https://gitlab.com/marianoguerra/tanodb/tree/04-handoff&lt;/pre&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;How it Works&lt;/h2&gt;
&lt;p&gt;With quorum requests we are halfway in our way to tolerate failures in cluster
nodes, our values are written to more than one vnode but if a node dies and
another takes his work or if we add a new node and the vnodes must be
rebalanced we need to handle &lt;a class="reference external" href="https://github.com/basho/riak_core/wiki/Handoffs"&gt;handoff&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The reasons to start a handoff are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;A ring update event for a ring that all other nodes have already seen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A secondary vnode is idle for a period of time and the primary, original
owner of the partition is up again.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When this happens riak_core will inform the vnode that handoff is starting,
calling &lt;cite&gt;handoff_starting&lt;/cite&gt;, if it returns false it's cancelled, if it returns
true it calls &lt;cite&gt;is_empty&lt;/cite&gt;, that must return false to inform that the vnode has
something to handoff (it's not empty) or true to inform that the vnode is
empty, in our case we ask for the first element of the ets table and if it's
the special value '$end_of_table' we know it's empty, if it returns true the
handoff is considered finished, if false then a call is done to &lt;cite&gt;handle_handoff_command&lt;/cite&gt;
passing as first parameter an opaque structure that contains two fields we are
insterested in, foldfun and acc0, they can be unpacked with a macro like this:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_e62d23d547af4b33929a62516c3ae6c4-1" name="rest_code_e62d23d547af4b33929a62516c3ae6c4-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_e62d23d547af4b33929a62516c3ae6c4-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_handoff_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;FOLD_REQ&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;foldfun&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Fun&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acc0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Acc0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;cite&gt;FOLD_REQ&lt;/cite&gt; macro is defined in the riak_core_vnode.hrl header file which we
include.&lt;/p&gt;
&lt;p&gt;This function must iterate through all the keys it stores and for each of them
call foldfun with the key as first argument, the value as second argument and
the latest acc0 value as third.&lt;/p&gt;
&lt;p&gt;The result of the function call is the new &lt;cite&gt;Acc0&lt;/cite&gt; you must pass to the next
call to foldfun, the last &lt;cite&gt;Acc0&lt;/cite&gt; must be returned by the handle_handoff_command.&lt;/p&gt;
&lt;p&gt;For each call to &lt;cite&gt;Fun(Key, Entry, AccIn0)&lt;/cite&gt; riak_core will send it to the new
vnode, to do that it must encode the data before sending, it does this by
calling &lt;cite&gt;encode_handoff_item(Key, Value)&lt;/cite&gt;, where you must encode the data
before sending it.&lt;/p&gt;
&lt;p&gt;When the value is received by the new vnode it must decode it and do something
with it, this is done by the function &lt;cite&gt;handle_handoff_data&lt;/cite&gt;, where we decode the
received data and do the appropriate thing with it.&lt;/p&gt;
&lt;p&gt;When we sent all the key/values &lt;cite&gt;handoff_finished&lt;/cite&gt; will be called and then
&lt;cite&gt;delete&lt;/cite&gt; so we cleanup the data on the old vnode .&lt;/p&gt;
&lt;p&gt;You can decide to handle other commands sent to the vnode while the handoff is
running, you can choose to do one of the followings:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Handle it in the current vnode&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Forward it to the vnode we are handing off&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Drop it&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What to do depends on the design of you app, all of them have tradeoffs.&lt;/p&gt;
&lt;p&gt;The signature of all the responses is:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_c1c2149d84b44a61858313f2d852d048-1" name="rest_code_c1c2149d84b44a61858313f2d852d048-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_c1c2149d84b44a61858313f2d852d048-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;callback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle_handoff_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ModState&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_c1c2149d84b44a61858313f2d852d048-2" name="rest_code_c1c2149d84b44a61858313f2d852d048-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_c1c2149d84b44a61858313f2d852d048-2"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Reply&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NewModState&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;
&lt;a id="rest_code_c1c2149d84b44a61858313f2d852d048-3" name="rest_code_c1c2149d84b44a61858313f2d852d048-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_c1c2149d84b44a61858313f2d852d048-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noreply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NewModState&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;
&lt;a id="rest_code_c1c2149d84b44a61858313f2d852d048-4" name="rest_code_c1c2149d84b44a61858313f2d852d048-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_c1c2149d84b44a61858313f2d852d048-4"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;async&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Work&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;From&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NewModState&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;
&lt;a id="rest_code_c1c2149d84b44a61858313f2d852d048-5" name="rest_code_c1c2149d84b44a61858313f2d852d048-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_c1c2149d84b44a61858313f2d852d048-5"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;forward&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NewModState&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;
&lt;a id="rest_code_c1c2149d84b44a61858313f2d852d048-6" name="rest_code_c1c2149d84b44a61858313f2d852d048-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_c1c2149d84b44a61858313f2d852d048-6"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NewModState&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;
&lt;a id="rest_code_c1c2149d84b44a61858313f2d852d048-7" name="rest_code_c1c2149d84b44a61858313f2d852d048-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_c1c2149d84b44a61858313f2d852d048-7"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Reason&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NewModState&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;term&lt;/span&gt;&lt;span class="p"&gt;()}.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A diagram of the flow is as follows:&lt;/p&gt;
&lt;pre class="literal-block"&gt;+-----------+      +----------+        +----------+
|           | true |          | false  |          |
| Starting  +------&amp;gt; is_empty +--------&amp;gt; fold_req |
|           |      |          |        |          |
+-----+-----+      +----+-----+        +----+-----+
      |                 |                   |
      | false           | true              | ok
      |                 |                   |
+-----v-----+           |              +----v-----+     +--------+
|           |           |              |          |     |        |
| Cancelled |           +--------------&amp;gt; finished +-----&amp;gt; delete |
|           |                          |          |     |        |
+-----------+                          +----------+     +--------+&lt;/pre&gt;
&lt;/section&gt;
&lt;section id="implementing-it"&gt;
&lt;h2&gt;Implementing it&lt;/h2&gt;
&lt;p&gt;We need to add logic to all the empty callbacks related to handoff:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-1" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_handoff_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;FOLD_REQ&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;foldfun&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;FoldFun&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acc0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Acc0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-2" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-3" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"fold req &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-4" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;KvFoldFun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;AccIn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-5" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"fold fun &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-6" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="nv"&gt;FoldFun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;AccIn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-7" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-8" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;AccFinal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;foldl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvFoldFun&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Acc0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-9" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;AccFinal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}};&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-10" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-11" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-11"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_handoff_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-12" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"handoff command &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;, ignoring"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-13" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noreply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-14" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-14"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-15" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-15"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handoff_starting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;TargetNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-16" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"handoff starting &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TargetNode&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-17" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-18" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-18"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-19" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-19"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handoff_cancelled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-20" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"handoff cancelled &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-21" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-22" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-22"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-23" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-23"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handoff_finished&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;TargetNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-24" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"handoff finished &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TargetNode&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-25" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-26" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-26"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-27" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-27"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_handoff_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;BinData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-28" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;TermData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;binary_to_term&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;BinData&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-29" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-29" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-29"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"handoff data received &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;TermData&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-30" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-30" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-30"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;TermData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-31" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-31" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-31"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-32" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-32" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}}.&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-33" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-33" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-33"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-34" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-34" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-34"&gt;&lt;/a&gt;&lt;span class="nf"&gt;encode_handoff_item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-35" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-35" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-35"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;term_to_binary&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-36" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-36" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-36"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-37" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-37" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-37"&gt;&lt;/a&gt;&lt;span class="nf"&gt;is_empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-38" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-38" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-38"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;IsEmpty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;is_empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-39" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-39" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-39"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"is_empty &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;IsEmpty&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-40" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-40" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-40"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;IsEmpty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}}.&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-41" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-41" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-41"&gt;&lt;/a&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-42" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-42" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-42"&gt;&lt;/a&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-43" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-43" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-43"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"delete &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-44" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-44" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-44"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;dispose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-45" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-45" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-45"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-46" name="rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-46" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_1da92d60b4cc4eb58a8b25bccdbc3dc8-46"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState2&lt;/span&gt;&lt;span class="p"&gt;}}.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="trying-it"&gt;
&lt;h2&gt;Trying it&lt;/h2&gt;
&lt;p&gt;To test it we will first start a devrel node, put some values and then join
two other nodes and see on the console the handoff happening.&lt;/p&gt;
&lt;p&gt;To make sure the nodes don't know about each other in case you played with
clustering already we will start by removing the devrel builds:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_8ad16dfc856f49e59f0ff1aa18aff3ea-1" name="rest_code_8ad16dfc856f49e59f0ff1aa18aff3ea-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_8ad16dfc856f49e59f0ff1aa18aff3ea-1"&gt;&lt;/a&gt;rm&lt;span class="w"&gt; &lt;/span&gt;-rf&lt;span class="w"&gt; &lt;/span&gt;_build/dev*
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And build the nodes again:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_2c741e1f0f794ea2b230ee3b434cd5c1-1" name="rest_code_2c741e1f0f794ea2b230ee3b434cd5c1-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_2c741e1f0f794ea2b230ee3b434cd5c1-1"&gt;&lt;/a&gt;make&lt;span class="w"&gt; &lt;/span&gt;devrel
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we will start the first node and connect to its console:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_a8744663ecd2476098204f235699f82d-1" name="rest_code_a8744663ecd2476098204f235699f82d-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_a8744663ecd2476098204f235699f82d-1"&gt;&lt;/a&gt;make&lt;span class="w"&gt; &lt;/span&gt;dev1-console
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We generate a list of some numbers:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_5ee67badffef43d598471125b0999e96-1" name="rest_code_5ee67badffef43d598471125b0999e96-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_5ee67badffef43d598471125b0999e96-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb1&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Nums&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;seq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_5ee67badffef43d598471125b0999e96-2" name="rest_code_5ee67badffef43d598471125b0999e96-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_5ee67badffef43d598471125b0999e96-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_5ee67badffef43d598471125b0999e96-3" name="rest_code_5ee67badffef43d598471125b0999e96-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_5ee67badffef43d598471125b0999e96-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And with it create some bucket names:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-1" name="rest_code_7354622bddb44bf2b799b27681668330-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb1&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-2" name="rest_code_7354622bddb44bf2b799b27681668330-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-2"&gt;&lt;/a&gt;&lt;span class="nv"&gt;Buckets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-3" name="rest_code_7354622bddb44bf2b799b27681668330-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;list_to_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"bucket-"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;integer_to_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-4" name="rest_code_7354622bddb44bf2b799b27681668330-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-4"&gt;&lt;/a&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Nums&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-5" name="rest_code_7354622bddb44bf2b799b27681668330-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-6" name="rest_code_7354622bddb44bf2b799b27681668330-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-6"&gt;&lt;/a&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-1"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-2"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-3"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-7" name="rest_code_7354622bddb44bf2b799b27681668330-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-7"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-4"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-5"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-6"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-7"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_7354622bddb44bf2b799b27681668330-8" name="rest_code_7354622bddb44bf2b799b27681668330-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_7354622bddb44bf2b799b27681668330-8"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-8"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-9"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"bucket-10"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And some key names:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-1" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb1&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-2" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-2"&gt;&lt;/a&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-3" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;list_to_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"key-"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;integer_to_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-4" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-4"&gt;&lt;/a&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Nums&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-5" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-6" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-6"&gt;&lt;/a&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-1"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-2"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-3"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-4"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-7" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-7"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-5"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-6"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-7"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-8"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-9"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_abeaa253ec334c08b9f91608b5b009f8-8" name="rest_code_abeaa253ec334c08b9f91608b5b009f8-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_abeaa253ec334c08b9f91608b5b009f8-8"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"key-10"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We create a function to generate a value from a bucket and a key:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_b8de4cc4542b48d5ac21920e93bb7e6f-1" name="rest_code_b8de4cc4542b48d5ac21920e93bb7e6f-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_b8de4cc4542b48d5ac21920e93bb7e6f-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb1&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_b8de4cc4542b48d5ac21920e93bb7e6f-2" name="rest_code_b8de4cc4542b48d5ac21920e93bb7e6f-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_b8de4cc4542b48d5ac21920e93bb7e6f-2"&gt;&lt;/a&gt;&lt;span class="nv"&gt;GenValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And then put some values to the buckets and keys we created:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-1" name="rest_code_712d5cf041d54652838f286a1733b792-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb1&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-2" name="rest_code_712d5cf041d54652838f286a1733b792-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-2"&gt;&lt;/a&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-3" name="rest_code_712d5cf041d54652838f286a1733b792-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-4" name="rest_code_712d5cf041d54652838f286a1733b792-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;GenValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-5" name="rest_code_712d5cf041d54652838f286a1733b792-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-6" name="rest_code_712d5cf041d54652838f286a1733b792-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-7" name="rest_code_712d5cf041d54652838f286a1733b792-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-7"&gt;&lt;/a&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Buckets&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-8" name="rest_code_712d5cf041d54652838f286a1733b792-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_712d5cf041d54652838f286a1733b792-9" name="rest_code_712d5cf041d54652838f286a1733b792-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_712d5cf041d54652838f286a1733b792-9"&gt;&lt;/a&gt;&lt;span class="n"&gt;ok&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now that we have some data let's start the other two nodes:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_0983645c97b24d9083ace299dd17b38b-1" name="rest_code_0983645c97b24d9083ace299dd17b38b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_0983645c97b24d9083ace299dd17b38b-1"&gt;&lt;/a&gt;make&lt;span class="w"&gt; &lt;/span&gt;dev2-console
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In yet another shell:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_179f36798c784b15ac3f8b7aac804799-1" name="rest_code_179f36798c784b15ac3f8b7aac804799-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_179f36798c784b15ac3f8b7aac804799-1"&gt;&lt;/a&gt;make&lt;span class="w"&gt; &lt;/span&gt;dev3-console
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This part should remind you of the first chapter:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_b5cdf0a3a9fb4cf58f7ca00c249f1109-1" name="rest_code_b5cdf0a3a9fb4cf58f7ca00c249f1109-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_b5cdf0a3a9fb4cf58f7ca00c249f1109-1"&gt;&lt;/a&gt;make&lt;span class="w"&gt; &lt;/span&gt;devrel-join
&lt;/pre&gt;&lt;/div&gt;
&lt;pre class="literal-block"&gt;Success: staged join request for 'tanodb2@127.0.0.1' to 'tanodb1@127.0.0.1'
Success: staged join request for 'tanodb3@127.0.0.1' to 'tanodb1@127.0.0.1'&lt;/pre&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_758dcda2318e4b909920db09a464bd5c-1" name="rest_code_758dcda2318e4b909920db09a464bd5c-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_758dcda2318e4b909920db09a464bd5c-1"&gt;&lt;/a&gt;make&lt;span class="w"&gt; &lt;/span&gt;devrel-cluster-plan
&lt;/pre&gt;&lt;/div&gt;
&lt;pre class="literal-block"&gt;=============================== Staged Changes =========================
Action         Details(s)
------------------------------------------------------------------------
join           'tanodb2@127.0.0.1'
join           'tanodb3@127.0.0.1'
------------------------------------------------------------------------


NOTE: Applying these changes will result in 1 cluster transition

########################################################################
                         After cluster transition 1/1
########################################################################

================================= Membership ===========================
Status     Ring    Pending    Node
------------------------------------------------------------------------
valid     100.0%     34.4%    'tanodb1@127.0.0.1'
valid       0.0%     32.8%    'tanodb2@127.0.0.1'
valid       0.0%     32.8%    'tanodb3@127.0.0.1'
------------------------------------------------------------------------
Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

WARNING: Not all replicas will be on distinct nodes

Transfers resulting from cluster changes: 42
  21 transfers from 'tanodb1@127.0.0.1' to 'tanodb3@127.0.0.1'
  21 transfers from 'tanodb1@127.0.0.1' to 'tanodb2@127.0.0.1'&lt;/pre&gt;
&lt;div class="code"&gt;&lt;pre class="code sh"&gt;&lt;a id="rest_code_99daf84d42c74f038d99aebec3a49dcd-1" name="rest_code_99daf84d42c74f038d99aebec3a49dcd-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/#rest_code_99daf84d42c74f038d99aebec3a49dcd-1"&gt;&lt;/a&gt;make&lt;span class="w"&gt; &lt;/span&gt;devrel-cluster-commit
&lt;/pre&gt;&lt;/div&gt;
&lt;pre class="literal-block"&gt;Cluster changes committed&lt;/pre&gt;
&lt;p&gt;On the consoles from the nodes you should see some logs like the following, I
will just paste some as example.&lt;/p&gt;
&lt;p&gt;On the sending side:&lt;/p&gt;
&lt;pre class="literal-block"&gt;00:17:24.240 [info] Starting ownership transfer of tanodb_vnode from
'tanodb1@127.0.0.1' 1118962191081472546749696200048404186924073353216 to
'tanodb2@127.0.0.1' 1118962191081472546749696200048404186924073353216

00:17:24.240 [info] fold req 1118962191081472546749696200048404186924073353216
00:17:24.240 [info] fold fun {&amp;lt;&amp;lt;"bucket-1"&amp;gt;&amp;gt;,&amp;lt;&amp;lt;"key-1"&amp;gt;&amp;gt;}:
    [{bucket,&amp;lt;&amp;lt;"bucket-1"&amp;gt;&amp;gt;},{key,&amp;lt;&amp;lt;"key-1"&amp;gt;&amp;gt;}]

...

00:17:24.241 [info] fold fun {&amp;lt;&amp;lt;"bucket-7"&amp;gt;&amp;gt;,&amp;lt;&amp;lt;"key-8"&amp;gt;&amp;gt;}:
    [{bucket,&amp;lt;&amp;lt;"bucket-7"&amp;gt;&amp;gt;},{key,&amp;lt;&amp;lt;"key-8"&amp;gt;&amp;gt;}]

00:17:24.281 [info] ownership transfer of tanodb_vnode from
'tanodb1@127.0.0.1' 1118962191081472546749696200048404186924073353216 to
'tanodb2@127.0.0.1' 1118962191081472546749696200048404186924073353216
    completed: sent 575.00 B bytes in 7 of 7 objects in 0.04 seconds
    (13.67 KB/second)

00:17:24.280 [info] handoff finished
    1141798154164767904846628775559596109106197299200:
    {1141798154164767904846628775559596109106197299200,
        'tanodb3@127.0.0.1'}

00:17:24.285 [info] delete
    1141798154164767904846628775559596109106197299200&lt;/pre&gt;
&lt;p&gt;On the receiving side:&lt;/p&gt;
&lt;pre class="literal-block"&gt;00:13:59.641 [info] handoff starting
    1050454301831586472458898473514828420377701515264:
    {hinted,{1050454301831586472458898473514828420377701515264,
        'tanodb1@127.0.0.1'}}

00:13:59.641 [info] is_empty
    182687704666362864775460604089535377456991567872: true

00:14:34.259 [info] Receiving handoff data for partition
    tanodb_vnode:68507889249886074290797726533575766546371837952 from
    {"127.0.0.1",47440}

00:14:34.296 [info] handoff data received
    {{&amp;lt;&amp;lt;"bucket-8"&amp;gt;&amp;gt;,&amp;lt;&amp;lt;"key-1"&amp;gt;&amp;gt;},
        [{bucket,&amp;lt;&amp;lt;"bucket-8"&amp;gt;&amp;gt;},{key,&amp;lt;&amp;lt;"key-1"&amp;gt;&amp;gt;}]}

...

00:14:34.297 [info] handoff data received
    {{&amp;lt;&amp;lt;"bucket-3"&amp;gt;&amp;gt;,&amp;lt;&amp;lt;"key-7"&amp;gt;&amp;gt;},
        [{bucket,&amp;lt;&amp;lt;"bucket-3"&amp;gt;&amp;gt;},{key,&amp;lt;&amp;lt;"key-7"&amp;gt;&amp;gt;}]}

00:14:34.298 [info] Handoff receiver for partition
    68507889249886074290797726533575766546371837952 exited after
    processing 5 objects from {"127.0.0.1",47440}&lt;/pre&gt;
&lt;/section&gt;</description><category>distsys</category><category>erlang</category><category>riak_core</category><category>tutorial</category><guid>http://marianoguerra.org/posts/riak-core-tutorial-part-6-handoff/</guid><pubDate>Thu, 16 Aug 2018 17:54:51 GMT</pubDate></item><item><title>Riak Core Tutorial Part 5: Quorum Requests</title><link>http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;pre class="literal-block"&gt;The content of this chapter is in the 03-quorum branch.

https://gitlab.com/marianoguerra/tanodb/tree/03-quorum&lt;/pre&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;How it Works&lt;/h2&gt;
&lt;p&gt;Quorum requests allows sending a command to more than one vnode and wait until
a number of responses are received before considering the request succesful.&lt;/p&gt;
&lt;p&gt;To implement this we need a process that distributed the requests to the first
N vnodes in the preference list and waits for at least W response to arrive
before returning to the requester.&lt;/p&gt;
&lt;p&gt;We use a gen_fsm to implement this process, which looks like this:&lt;/p&gt;
&lt;pre class="literal-block"&gt;+------+    +---------+    +---------+    +---------+              +------+
|      |    |         |    |         |    |         |remaining = 0 |      |
| Init +---&amp;gt;| Prepare +---&amp;gt;| Execute +---&amp;gt;| Waiting +-------------&amp;gt;| Stop |
|      |    |         |    |         |    |         |              |      |
+------+    +---------+    +---------+    +-------+-+              +------+
                                              ^   | |
                                              |   | |        +---------+
                                              +---+ +-------&amp;gt;|         |
                                                             | Timeout |
                                      remaining &amp;gt; 0  timeout |         |
                                                             +---------+&lt;/pre&gt;
&lt;/section&gt;
&lt;section id="implementing-it"&gt;
&lt;h2&gt;Implementing it&lt;/h2&gt;
&lt;p&gt;To implement it we need to change the code in tanodb.erl instantiate a FSM
to handle the request instead of sending the command directly to one vnode.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-1" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-1"&gt;&lt;/a&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-2" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-3" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-4" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;run_quorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-5" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-6" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-6"&gt;&lt;/a&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-7" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-8" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-9" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;run_quorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-10" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-11" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-11"&gt;&lt;/a&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-12" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-13" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dfc0609e9aae474995d42d76ef7459f6-14" name="rest_code_dfc0609e9aae474995d42d76ef7459f6-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dfc0609e9aae474995d42d76ef7459f6-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;run_quorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We are going to generalize that logic in a function called run_quorum, where
we can pass options for N, W and Timeout to play with different values:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-1" name="rest_code_5c75173a407f4a619dca5cfab1921d75-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;run_quorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-2" name="rest_code_5c75173a407f4a619dca5cfab1921d75-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-3" name="rest_code_5c75173a407f4a619dca5cfab1921d75-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;W&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;W&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-4" name="rest_code_5c75173a407f4a619dca5cfab1921d75-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;maps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Opts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-5" name="rest_code_5c75173a407f4a619dca5cfab1921d75-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make_ref&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-6" name="rest_code_5c75173a407f4a619dca5cfab1921d75-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;tanodb_write_fsm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;W&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-7" name="rest_code_5c75173a407f4a619dca5cfab1921d75-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wait_for_reqid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-8" name="rest_code_5c75173a407f4a619dca5cfab1921d75-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-9" name="rest_code_5c75173a407f4a619dca5cfab1921d75-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-9"&gt;&lt;/a&gt;&lt;span class="nf"&gt;wait_for_reqid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-10" name="rest_code_5c75173a407f4a619dca5cfab1921d75-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;receive&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-11" name="rest_code_5c75173a407f4a619dca5cfab1921d75-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-12" name="rest_code_5c75173a407f4a619dca5cfab1921d75-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;after&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-13" name="rest_code_5c75173a407f4a619dca5cfab1921d75-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_5c75173a407f4a619dca5cfab1921d75-14" name="rest_code_5c75173a407f4a619dca5cfab1921d75-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5c75173a407f4a619dca5cfab1921d75-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To wait for the right answer we need to generate a unique identifier for each
request and send it with the request itself. The identifier will come back
in the message sent by the FSM once the request finishes.&lt;/p&gt;
&lt;p&gt;If too much time passed waiting for the response we consider it an error and
return before receiving it.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_32761614827146959f062ca43d1448ae-1" name="rest_code_32761614827146959f062ca43d1448ae-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_32761614827146959f062ca43d1448ae-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;wait_for_reqid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_32761614827146959f062ca43d1448ae-2" name="rest_code_32761614827146959f062ca43d1448ae-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_32761614827146959f062ca43d1448ae-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;receive&lt;/span&gt;
&lt;a id="rest_code_32761614827146959f062ca43d1448ae-3" name="rest_code_32761614827146959f062ca43d1448ae-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_32761614827146959f062ca43d1448ae-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Reason&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Reason&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;a id="rest_code_32761614827146959f062ca43d1448ae-4" name="rest_code_32761614827146959f062ca43d1448ae-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_32761614827146959f062ca43d1448ae-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Val&lt;/span&gt;
&lt;a id="rest_code_32761614827146959f062ca43d1448ae-5" name="rest_code_32761614827146959f062ca43d1448ae-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_32761614827146959f062ca43d1448ae-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;after&lt;/span&gt;
&lt;a id="rest_code_32761614827146959f062ca43d1448ae-6" name="rest_code_32761614827146959f062ca43d1448ae-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_32761614827146959f062ca43d1448ae-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nv"&gt;Timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_32761614827146959f062ca43d1448ae-7" name="rest_code_32761614827146959f062ca43d1448ae-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_32761614827146959f062ca43d1448ae-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There are two new files:&lt;/p&gt;
&lt;dl class="simple"&gt;
&lt;dt&gt;tanodb_write_fsm.erl&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;The FSM logic&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;tanodb_write_fsm_sup.erl&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;The supervisor for the FSMs&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Finally we need to add tanodb_write_fsm_sup to our top level supervisor in
tanodb_sup.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="trying-it"&gt;
&lt;h2&gt;Trying it&lt;/h2&gt;
&lt;p&gt;To test it we are going to run some calls to the API and observe that now
the response contains more than one response:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_352122ee825546c39729d7c2938ded22-1" name="rest_code_352122ee825546c39729d7c2938ded22-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_352122ee825546c39729d7c2938ded22-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;a id="rest_code_352122ee825546c39729d7c2938ded22-2" name="rest_code_352122ee825546c39729d7c2938ded22-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_352122ee825546c39729d7c2938ded22-2"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;a id="rest_code_352122ee825546c39729d7c2938ded22-3" name="rest_code_352122ee825546c39729d7c2938ded22-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_352122ee825546c39729d7c2938ded22-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;V1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;First let's try to get a key that doesn't exist:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_446b99aea0e848709096eba13d801bde-1" name="rest_code_446b99aea0e848709096eba13d801bde-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_446b99aea0e848709096eba13d801bde-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-1" name="rest_code_578b1105c03142eaa8b3df5efce03c18-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,[{[&lt;/span&gt;&lt;span class="mi"&gt;1073290264914881830555831049026020342559825461248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-2" name="rest_code_578b1105c03142eaa8b3df5efce03c18-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-3" name="rest_code_578b1105c03142eaa8b3df5efce03c18-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-4" name="rest_code_578b1105c03142eaa8b3df5efce03c18-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-5" name="rest_code_578b1105c03142eaa8b3df5efce03c18-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-6" name="rest_code_578b1105c03142eaa8b3df5efce03c18-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-7" name="rest_code_578b1105c03142eaa8b3df5efce03c18-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-8" name="rest_code_578b1105c03142eaa8b3df5efce03c18-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-9" name="rest_code_578b1105c03142eaa8b3df5efce03c18-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1096126227998177188652763624537212264741949407232&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-10" name="rest_code_578b1105c03142eaa8b3df5efce03c18-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_578b1105c03142eaa8b3df5efce03c18-11" name="rest_code_578b1105c03142eaa8b3df5efce03c18-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_578b1105c03142eaa8b3df5efce03c18-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}}]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's do the same call but passing options, we want to run the command in 5
vnodes and wait for the response of the 5, the request should finish under a
second:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_bbdaa8edd89246b5890035e6139337e5-1" name="rest_code_bbdaa8edd89246b5890035e6139337e5-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_bbdaa8edd89246b5890035e6139337e5-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-1" name="rest_code_53e94d93b6674044bb3e4e1248915f21-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,[{[&lt;/span&gt;&lt;span class="mi"&gt;456719261665907161938651510223838443642478919680&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-2" name="rest_code_53e94d93b6674044bb3e4e1248915f21-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-3" name="rest_code_53e94d93b6674044bb3e4e1248915f21-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-4" name="rest_code_53e94d93b6674044bb3e4e1248915f21-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-5" name="rest_code_53e94d93b6674044bb3e4e1248915f21-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;433883298582611803841718934712646521460354973696&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-6" name="rest_code_53e94d93b6674044bb3e4e1248915f21-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-7" name="rest_code_53e94d93b6674044bb3e4e1248915f21-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-8" name="rest_code_53e94d93b6674044bb3e4e1248915f21-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-9" name="rest_code_53e94d93b6674044bb3e4e1248915f21-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;411047335499316445744786359201454599278231027712&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-10" name="rest_code_53e94d93b6674044bb3e4e1248915f21-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-11" name="rest_code_53e94d93b6674044bb3e4e1248915f21-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-12" name="rest_code_53e94d93b6674044bb3e4e1248915f21-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-12"&gt;&lt;/a&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-13" name="rest_code_53e94d93b6674044bb3e4e1248915f21-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;388211372416021087647853783690262677096107081728&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-14" name="rest_code_53e94d93b6674044bb3e4e1248915f21-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-15" name="rest_code_53e94d93b6674044bb3e4e1248915f21-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-16" name="rest_code_53e94d93b6674044bb3e4e1248915f21-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-16"&gt;&lt;/a&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-17" name="rest_code_53e94d93b6674044bb3e4e1248915f21-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;365375409332725729550921208179070754913983135744&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-18" name="rest_code_53e94d93b6674044bb3e4e1248915f21-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_53e94d93b6674044bb3e4e1248915f21-19" name="rest_code_53e94d93b6674044bb3e4e1248915f21-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_53e94d93b6674044bb3e4e1248915f21-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}}]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's try deleting a key that doesn't exist:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_29d09eed089e42e5804584902b201d4f-1" name="rest_code_29d09eed089e42e5804584902b201d4f-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_29d09eed089e42e5804584902b201d4f-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-1" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,[{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-2" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-3" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-4" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-5" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1073290264914881830555831049026020342559825461248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-6" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-7" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-8" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-9" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1096126227998177188652763624537212264741949407232&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-10" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_055e78dd26ac491ab5f0d184c447ce37-11" name="rest_code_055e78dd26ac491ab5f0d184c447ce37-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_055e78dd26ac491ab5f0d184c447ce37-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's put a value:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_72617d662a214609ab4aea79e428ca59-1" name="rest_code_72617d662a214609ab4aea79e428ca59-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_72617d662a214609ab4aea79e428ca59-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;V1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-1" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,[{[&lt;/span&gt;&lt;span class="mi"&gt;1096126227998177188652763624537212264741949407232&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-2" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-3" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-4" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-5" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1073290264914881830555831049026020342559825461248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-6" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-7" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-8" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-9" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-10" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-11" name="rest_code_ac3f3ce82d114ef9a759a356ec3480c1-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_ac3f3ce82d114ef9a759a356ec3480c1-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now let's get the value:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_1b24e4cda87c4b5d821134dfafbee10c-1" name="rest_code_1b24e4cda87c4b5d821134dfafbee10c-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_1b24e4cda87c4b5d821134dfafbee10c-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-1" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,[{[&lt;/span&gt;&lt;span class="mi"&gt;1096126227998177188652763624537212264741949407232&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-2" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-3" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;,{{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-4" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-5" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-6" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-7" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;,{{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-8" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-9" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1073290264914881830555831049026020342559825461248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-10" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-11" name="rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_5aa53b6fe82c4f08b2bf35e4ce9c1fa6-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;,{{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}}]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's delete it:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_29dc1914623849ef825b617d65be4ec7-1" name="rest_code_29dc1914623849ef825b617d65be4ec7-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_29dc1914623849ef825b617d65be4ec7-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-1" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,[{[&lt;/span&gt;&lt;span class="mi"&gt;1073290264914881830555831049026020342559825461248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-2" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-3" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-4" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-5" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1096126227998177188652763624537212264741949407232&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-6" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-7" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-8" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-9" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-10" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_8a2d93a7702d4ac2a803ba8699282c35-11" name="rest_code_8a2d93a7702d4ac2a803ba8699282c35-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_8a2d93a7702d4ac2a803ba8699282c35-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And try to get it back:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_4d519631340744ab8d2845617a585165-1" name="rest_code_4d519631340744ab8d2845617a585165-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_4d519631340744ab8d2845617a585165-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-1" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,[{[&lt;/span&gt;&lt;span class="mi"&gt;1073290264914881830555831049026020342559825461248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-2" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-3" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-4" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-5" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1096126227998177188652763624537212264741949407232&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-6" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-7" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}},&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-8" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-9" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-10" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-11" name="rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/#rest_code_dee9c92326dd4a1dac1f61b77e6cd17f-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}}]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;</description><category>distsys</category><category>erlang</category><category>riak_core</category><category>tutorial</category><guid>http://marianoguerra.org/posts/riak-core-tutorial-part-5-quorum-requests/</guid><pubDate>Sat, 11 Aug 2018 20:25:13 GMT</pubDate></item><item><title>Riak Core Tutorial Part 4: First Commands</title><link>http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;pre class="literal-block"&gt;The content of this chapter is in the 02-commands branch.

https://gitlab.com/marianoguerra/tanodb/tree/02-commands&lt;/pre&gt;
&lt;p&gt;This is part of a series, see the previous one at &lt;a class="reference external" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/"&gt;Riak Core Tutorial Part 3: Ping Command&lt;/a&gt;&lt;/p&gt;
&lt;section id="implementing-get-put-and-delete"&gt;
&lt;h2&gt;Implementing Get, Put and Delete&lt;/h2&gt;
&lt;p&gt;For our first commands we will copy the general structure of the ping command.&lt;/p&gt;
&lt;p&gt;We will start by adding three new functions to the tanodb.erl file:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-1" name="rest_code_9002958be5304d6f80a202bc4665a21b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-1"&gt;&lt;/a&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-2" name="rest_code_9002958be5304d6f80a202bc4665a21b-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make_ref&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-3" name="rest_code_9002958be5304d6f80a202bc4665a21b-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;send_to_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}}).&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-4" name="rest_code_9002958be5304d6f80a202bc4665a21b-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-5" name="rest_code_9002958be5304d6f80a202bc4665a21b-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-5"&gt;&lt;/a&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-6" name="rest_code_9002958be5304d6f80a202bc4665a21b-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make_ref&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-7" name="rest_code_9002958be5304d6f80a202bc4665a21b-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;send_to_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;}}).&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-8" name="rest_code_9002958be5304d6f80a202bc4665a21b-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-9" name="rest_code_9002958be5304d6f80a202bc4665a21b-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-9"&gt;&lt;/a&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-10" name="rest_code_9002958be5304d6f80a202bc4665a21b-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make_ref&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;a id="rest_code_9002958be5304d6f80a202bc4665a21b-11" name="rest_code_9002958be5304d6f80a202bc4665a21b-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9002958be5304d6f80a202bc4665a21b-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;send_to_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}}).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And generalizing the code used by ping to send a command to one vnode:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_8bf14a84280c4c6695905669213fb8f7-1" name="rest_code_8bf14a84280c4c6695905669213fb8f7-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_8bf14a84280c4c6695905669213fb8f7-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;send_to_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Cmd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_8bf14a84280c4c6695905669213fb8f7-2" name="rest_code_8bf14a84280c4c6695905669213fb8f7-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_8bf14a84280c4c6695905669213fb8f7-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_util&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;chash_key&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
&lt;a id="rest_code_8bf14a84280c4c6695905669213fb8f7-3" name="rest_code_8bf14a84280c4c6695905669213fb8f7-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_8bf14a84280c4c6695905669213fb8f7-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_apl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_primary_apl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_8bf14a84280c4c6695905669213fb8f7-4" name="rest_code_8bf14a84280c4c6695905669213fb8f7-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_8bf14a84280c4c6695905669213fb8f7-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_8bf14a84280c4c6695905669213fb8f7-5" name="rest_code_8bf14a84280c4c6695905669213fb8f7-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_8bf14a84280c4c6695905669213fb8f7-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;riak_core_vnode_master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;sync_spawn_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Cmd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb_vnode_master&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In tanodb_vnode.erl we will need to first create an instance of the key-value
store per vnode at initialization and keep a reference to its state in the
vnode state record:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_5951eacceec642cba9538c66bb3835d6-1" name="rest_code_5951eacceec642cba9538c66bb3835d6-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_5951eacceec642cba9538c66bb3835d6-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;record&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;
&lt;a id="rest_code_5951eacceec642cba9538c66bb3835d6-2" name="rest_code_5951eacceec642cba9538c66bb3835d6-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_5951eacceec642cba9538c66bb3835d6-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_5951eacceec642cba9538c66bb3835d6-3" name="rest_code_5951eacceec642cba9538c66bb3835d6-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_5951eacceec642cba9538c66bb3835d6-3"&gt;&lt;/a&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_5951eacceec642cba9538c66bb3835d6-4" name="rest_code_5951eacceec642cba9538c66bb3835d6-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_5951eacceec642cba9538c66bb3835d6-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(#{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
&lt;a id="rest_code_5951eacceec642cba9538c66bb3835d6-5" name="rest_code_5951eacceec642cba9538c66bb3835d6-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_5951eacceec642cba9538c66bb3835d6-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}}.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We then need to add three new clauses to the handle_command callback to handle
our two new commands, which translate almost directly to calls in the kv module:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-1" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_command&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-2" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-3" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;node&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-4" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-5" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Res&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}};&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-6" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-6"&gt;&lt;/a&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-7" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-7"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_command&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-8" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-9" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;node&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-10" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-11" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Res&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}};&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-12" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-12"&gt;&lt;/a&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-13" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-13"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_command&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-14" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-15" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;node&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-16" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb_kv_ets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;KvState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_a10f0e9c5f12441d8180ef3010e9c782-17" name="rest_code_a10f0e9c5f12441d8180ef3010e9c782-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_a10f0e9c5f12441d8180ef3010e9c782-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;ReqId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Res&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kv_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KvState1&lt;/span&gt;&lt;span class="p"&gt;}};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="trying-it"&gt;
&lt;h2&gt;Trying it&lt;/h2&gt;
&lt;p&gt;First let's try to get a key that doesn't exist:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_b62c44f6a122494083439c047fed044f-1" name="rest_code_b62c44f6a122494083439c047fed044f-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_b62c44f6a122494083439c047fed044f-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;a id="rest_code_b62c44f6a122494083439c047fed044f-2" name="rest_code_b62c44f6a122494083439c047fed044f-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_b62c44f6a122494083439c047fed044f-2"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;a id="rest_code_b62c44f6a122494083439c047fed044f-3" name="rest_code_b62c44f6a122494083439c047fed044f-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_b62c44f6a122494083439c047fed044f-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;V1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_d3b7e59f18c14fcb8fa9a2c2ac652ce2-1" name="rest_code_d3b7e59f18c14fcb8fa9a2c2ac652ce2-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_d3b7e59f18c14fcb8fa9a2c2ac652ce2-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_c6808e15c84146a4898002dd5233560f-1" name="rest_code_c6808e15c84146a4898002dd5233560f-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_c6808e15c84146a4898002dd5233560f-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c6808e15c84146a4898002dd5233560f-2" name="rest_code_c6808e15c84146a4898002dd5233560f-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_c6808e15c84146a4898002dd5233560f-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_c6808e15c84146a4898002dd5233560f-3" name="rest_code_c6808e15c84146a4898002dd5233560f-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_c6808e15c84146a4898002dd5233560f-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The structure of the response is:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_26d02ac46e4849a0b9a1d9f94b4a3813-1" name="rest_code_26d02ac46e4849a0b9a1d9f94b4a3813-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_26d02ac46e4849a0b9a1d9f94b4a3813-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;UniqueRequestReference&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="nv"&gt;PartitionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NodeId&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;CommandResponse&lt;/span&gt;&lt;span class="p"&gt;}}.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's try deleting a key that doesn't exist:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_fe0fe41814a54778a2bebf24c1000119-1" name="rest_code_fe0fe41814a54778a2bebf24c1000119-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_fe0fe41814a54778a2bebf24c1000119-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_3947a3df0cf94f0f98ca496894e59715-1" name="rest_code_3947a3df0cf94f0f98ca496894e59715-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_3947a3df0cf94f0f98ca496894e59715-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_3947a3df0cf94f0f98ca496894e59715-2" name="rest_code_3947a3df0cf94f0f98ca496894e59715-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_3947a3df0cf94f0f98ca496894e59715-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_3947a3df0cf94f0f98ca496894e59715-3" name="rest_code_3947a3df0cf94f0f98ca496894e59715-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_3947a3df0cf94f0f98ca496894e59715-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's put a value:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_9df2daceb3b649c1a763e6f883668c2a-1" name="rest_code_9df2daceb3b649c1a763e6f883668c2a-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_9df2daceb3b649c1a763e6f883668c2a-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;V1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_e49245b997904d659acb990264e26455-1" name="rest_code_e49245b997904d659acb990264e26455-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_e49245b997904d659acb990264e26455-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e49245b997904d659acb990264e26455-2" name="rest_code_e49245b997904d659acb990264e26455-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_e49245b997904d659acb990264e26455-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_e49245b997904d659acb990264e26455-3" name="rest_code_e49245b997904d659acb990264e26455-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_e49245b997904d659acb990264e26455-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now let's get the value:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_da8289e67e6b4c6e8a9ec2e41784c4bf-1" name="rest_code_da8289e67e6b4c6e8a9ec2e41784c4bf-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_da8289e67e6b4c6e8a9ec2e41784c4bf-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_1cbcbd1205be432d8b828582e0248d94-1" name="rest_code_1cbcbd1205be432d8b828582e0248d94-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_1cbcbd1205be432d8b828582e0248d94-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_1cbcbd1205be432d8b828582e0248d94-2" name="rest_code_1cbcbd1205be432d8b828582e0248d94-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_1cbcbd1205be432d8b828582e0248d94-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_1cbcbd1205be432d8b828582e0248d94-3" name="rest_code_1cbcbd1205be432d8b828582e0248d94-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_1cbcbd1205be432d8b828582e0248d94-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;,{{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;}}}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's delete it:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_8da5208a81f14fb9ae41fa2f33d37aa0-1" name="rest_code_8da5208a81f14fb9ae41fa2f33d37aa0-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_8da5208a81f14fb9ae41fa2f33d37aa0-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_0405729dbb144442ae699ef3bac148cc-1" name="rest_code_0405729dbb144442ae699ef3bac148cc-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_0405729dbb144442ae699ef3bac148cc-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_0405729dbb144442ae699ef3bac148cc-2" name="rest_code_0405729dbb144442ae699ef3bac148cc-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_0405729dbb144442ae699ef3bac148cc-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_0405729dbb144442ae699ef3bac148cc-3" name="rest_code_0405729dbb144442ae699ef3bac148cc-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_0405729dbb144442ae699ef3bac148cc-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And try to get it back:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_8487604ade514cc5a16b82ae2ea2ea1b-1" name="rest_code_8487604ade514cc5a16b82ae2ea2ea1b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_8487604ade514cc5a16b82ae2ea2ea1b-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;B1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;K1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_e5794fc308d44850bfb892981ed69c3b-1" name="rest_code_e5794fc308d44850bfb892981ed69c3b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_e5794fc308d44850bfb892981ed69c3b-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1050454301831586472458898473514828420377701515264&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e5794fc308d44850bfb892981ed69c3b-2" name="rest_code_e5794fc308d44850bfb892981ed69c3b-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_e5794fc308d44850bfb892981ed69c3b-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_e5794fc308d44850bfb892981ed69c3b-3" name="rest_code_e5794fc308d44850bfb892981ed69c3b-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/#rest_code_e5794fc308d44850bfb892981ed69c3b-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;not_found&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;}}}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;</description><category>distsys</category><category>erlang</category><category>riak_core</category><category>tutorial</category><guid>http://marianoguerra.org/posts/riak-core-tutorial-part-4-first-commands/</guid><pubDate>Mon, 30 Jul 2018 08:41:45 GMT</pubDate></item><item><title>Riak Core Tutorial Part 3: Ping Command</title><link>http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;pre class="literal-block"&gt;The content of this chapter is in the `01-template` branch.

https://gitlab.com/marianoguerra/tanodb/tree/01-template&lt;/pre&gt;
&lt;p&gt;This is part of a series, see the previous one at &lt;a class="reference external" href="http://marianoguerra.org/posts/riak-core-tutorial-part-2-starting/"&gt;Riak Core Tutorial Part 2: Starting&lt;/a&gt;&lt;/p&gt;
&lt;section id="how-it-works"&gt;
&lt;h2&gt;How it Works&lt;/h2&gt;
&lt;p&gt;Let's see how ping works under the covers.&lt;/p&gt;
&lt;p&gt;Its entry point and public API is the tanodb module, that means we have to
look into tanodb.erl:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-1" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;module&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-2" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-2"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;export&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-3" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;ignore_xref&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-4" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-5" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-5"&gt;&lt;/a&gt;&lt;span class="c"&gt;%% @doc Pings a random vnode to make sure communication is functional&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-6" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-6"&gt;&lt;/a&gt;&lt;span class="nf"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-7" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c"&gt;% argument to chash_key has to be a two item tuple, since it comes from riak&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-8" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c"&gt;% and the full key has a bucket, we use a contant in the bucket position&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-9" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c"&gt;% and a timestamp as key so we hit different vnodes on each call&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-10" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_util&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;chash_key&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"ping"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;term_to_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;())}),&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-11" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c"&gt;% ask for 1 vnode index to send this request to, change N to get more&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-12" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c"&gt;% vnodes, for example for replication&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-13" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-14" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_apl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_primary_apl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-15" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-16" name="rest_code_ed99253bfc64414f8f8e1d8e2b09532f-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ed99253bfc64414f8f8e1d8e2b09532f-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;riak_core_vnode_master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;sync_spawn_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb_vnode_master&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_53c8b111b7f9480cabd518c51f04262b-1" name="rest_code_53c8b111b7f9480cabd518c51f04262b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_53c8b111b7f9480cabd518c51f04262b-1"&gt;&lt;/a&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_util&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;chash_key&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"ping"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;term_to_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;())}),&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The line above hashes a key to decide to which vnode the call should go, a
riak_core app has a fixed number of vnodes that are distributed across all the
instances of your app's physical nodes, vnodes move from instance to instance
when the number of instances change to balance the load and provide fault
tolerance and scalability.&lt;/p&gt;
&lt;p&gt;The call above will allow us to ask for vnodes that can handle that hashed key,
let's run it in the app console to see what it does:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_9d07e17ea47845738f9538cbc9847b38-1" name="rest_code_9d07e17ea47845738f9538cbc9847b38-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_9d07e17ea47845738f9538cbc9847b38-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_util&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;chash_key&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="s"&gt;"ping"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;term_to_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;os&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;())}).&lt;/span&gt;
&lt;a id="rest_code_9d07e17ea47845738f9538cbc9847b38-2" name="rest_code_9d07e17ea47845738f9538cbc9847b38-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_9d07e17ea47845738f9538cbc9847b38-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_9d07e17ea47845738f9538cbc9847b38-3" name="rest_code_9d07e17ea47845738f9538cbc9847b38-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_9d07e17ea47845738f9538cbc9847b38-3"&gt;&lt;/a&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;126&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;218&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;77&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;108&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;155&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;161&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;134&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;213&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;168&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We seem to get a binary back, in the next line we ask for a list of vnodes that
can handle that hashed key:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_da699e74bd2f465692dff2e46bd4d519-1" name="rest_code_da699e74bd2f465692dff2e46bd4d519-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_da699e74bd2f465692dff2e46bd4d519-1"&gt;&lt;/a&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_apl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_primary_apl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;N&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's run it to see what it does:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_10433c71e00e4110aed203c539f49da7-1" name="rest_code_10433c71e00e4110aed203c539f49da7-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_10433c71e00e4110aed203c539f49da7-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_apl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_primary_apl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_10433c71e00e4110aed203c539f49da7-2" name="rest_code_10433c71e00e4110aed203c539f49da7-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_10433c71e00e4110aed203c539f49da7-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_10433c71e00e4110aed203c539f49da7-3" name="rest_code_10433c71e00e4110aed203c539f49da7-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_10433c71e00e4110aed203c539f49da7-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;[{{&lt;/span&gt;&lt;span class="mi"&gt;730750818665451459101842416358141509827966271488&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_10433c71e00e4110aed203c539f49da7-4" name="rest_code_10433c71e00e4110aed203c539f49da7-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_10433c71e00e4110aed203c539f49da7-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We get a list with one tuple that has 3 items, a long number, something that
looks like a host and an atom, let's try changing the number 1:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_ade5bef7692847b990234f600a239052-1" name="rest_code_ade5bef7692847b990234f600a239052-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ade5bef7692847b990234f600a239052-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PrefList2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_apl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_primary_apl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;DocIdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_ade5bef7692847b990234f600a239052-2" name="rest_code_ade5bef7692847b990234f600a239052-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ade5bef7692847b990234f600a239052-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_ade5bef7692847b990234f600a239052-3" name="rest_code_ade5bef7692847b990234f600a239052-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ade5bef7692847b990234f600a239052-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;[{{&lt;/span&gt;&lt;span class="mi"&gt;730750818665451459101842416358141509827966271488&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_ade5bef7692847b990234f600a239052-4" name="rest_code_ade5bef7692847b990234f600a239052-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ade5bef7692847b990234f600a239052-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_ade5bef7692847b990234f600a239052-5" name="rest_code_ade5bef7692847b990234f600a239052-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ade5bef7692847b990234f600a239052-5"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="mi"&gt;753586781748746817198774991869333432010090217472&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_ade5bef7692847b990234f600a239052-6" name="rest_code_ade5bef7692847b990234f600a239052-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ade5bef7692847b990234f600a239052-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we get two tuples, the first one is the same, so what this does is to return
the number of vnodes that can handle the request from the hashed key by priority.&lt;/p&gt;
&lt;p&gt;The first number is the vnode id, it's what we get on the ping response.&lt;/p&gt;
&lt;p&gt;Next line just unpacks the pref list to get the vnode id and ignore the other
part:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_49f9cf0fc0494ce09c0cf4662d65f4e9-1" name="rest_code_49f9cf0fc0494ce09c0cf4662d65f4e9-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_49f9cf0fc0494ce09c0cf4662d65f4e9-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Finally we ask riak_core to call the ping command on the IndexNode we got back:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_6832a76fcd594aee913f28007a00fe8a-1" name="rest_code_6832a76fcd594aee913f28007a00fe8a-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_6832a76fcd594aee913f28007a00fe8a-1"&gt;&lt;/a&gt;&lt;span class="nn"&gt;riak_core_vnode_master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;sync_spawn_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb_vnode_master&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's try it on the console:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-1" name="rest_code_34f5364881a545da8d92b2d43ad6935b-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PrefList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-2" name="rest_code_34f5364881a545da8d92b2d43ad6935b-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-3" name="rest_code_34f5364881a545da8d92b2d43ad6935b-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;[{{&lt;/span&gt;&lt;span class="mi"&gt;730750818665451459101842416358141509827966271488&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-4" name="rest_code_34f5364881a545da8d92b2d43ad6935b-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-5" name="rest_code_34f5364881a545da8d92b2d43ad6935b-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-6" name="rest_code_34f5364881a545da8d92b2d43ad6935b-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-6"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_vnode_master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;sync_spawn_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;IndexNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb_vnode_master&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-7" name="rest_code_34f5364881a545da8d92b2d43ad6935b-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_34f5364881a545da8d92b2d43ad6935b-8" name="rest_code_34f5364881a545da8d92b2d43ad6935b-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_34f5364881a545da8d92b2d43ad6935b-8"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pong&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;730750818665451459101842416358141509827966271488&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can see we get IndexNode back in the pong response, now let's try passing the second IndexNode:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-1" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nv"&gt;IndexNode1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Type1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;IndexNode2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Type2&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PrefList2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-2" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-3" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-3"&gt;&lt;/a&gt;&lt;span class="p"&gt;[{{&lt;/span&gt;&lt;span class="mi"&gt;730750818665451459101842416358141509827966271488&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-4" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-5" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-5"&gt;&lt;/a&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="mi"&gt;753586781748746817198774991869333432010090217472&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-6" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;'tanodb@127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-7" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-8" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-9" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-9"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;riak_core_vnode_master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;sync_spawn_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;IndexNode2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tanodb_vnode_master&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-10" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_7e29b8d485754c27a23c8a545b8805fa-11" name="rest_code_7e29b8d485754c27a23c8a545b8805fa-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_7e29b8d485754c27a23c8a545b8805fa-11"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pong&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;753586781748746817198774991869333432010090217472&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We get the IndexNode2 back, that means that the request was sent to the second
vnode instead of the first one.&lt;/p&gt;
&lt;p&gt;But where does the command go?&lt;/p&gt;
&lt;p&gt;Let's see the content of tanodb_vnode.erl (just the useful parts):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-1" name="rest_code_cfad86014c86445786fb5f2a206325eb-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;module&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb_vnode&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-2" name="rest_code_cfad86014c86445786fb5f2a206325eb-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-2"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;behaviour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;riak_core_vnode&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-3" name="rest_code_cfad86014c86445786fb5f2a206325eb-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-4" name="rest_code_cfad86014c86445786fb5f2a206325eb-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-4"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;export&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;start_vnode&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-5" name="rest_code_cfad86014c86445786fb5f2a206325eb-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-6" name="rest_code_cfad86014c86445786fb5f2a206325eb-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;terminate&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-7" name="rest_code_cfad86014c86445786fb5f2a206325eb-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_command&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-8" name="rest_code_cfad86014c86445786fb5f2a206325eb-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;is_empty&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-9" name="rest_code_cfad86014c86445786fb5f2a206325eb-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-10" name="rest_code_cfad86014c86445786fb5f2a206325eb-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_handoff_command&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-11" name="rest_code_cfad86014c86445786fb5f2a206325eb-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handoff_starting&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-12" name="rest_code_cfad86014c86445786fb5f2a206325eb-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handoff_cancelled&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-13" name="rest_code_cfad86014c86445786fb5f2a206325eb-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handoff_finished&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-14" name="rest_code_cfad86014c86445786fb5f2a206325eb-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_handoff_data&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-15" name="rest_code_cfad86014c86445786fb5f2a206325eb-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;encode_handoff_item&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-16" name="rest_code_cfad86014c86445786fb5f2a206325eb-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_overload_command&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-17" name="rest_code_cfad86014c86445786fb5f2a206325eb-17" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_overload_info&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-18" name="rest_code_cfad86014c86445786fb5f2a206325eb-18" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_coverage&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-19" name="rest_code_cfad86014c86445786fb5f2a206325eb-19" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_exit&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-20" name="rest_code_cfad86014c86445786fb5f2a206325eb-20" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-20"&gt;&lt;/a&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-21" name="rest_code_cfad86014c86445786fb5f2a206325eb-21" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-21"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;record&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-22" name="rest_code_cfad86014c86445786fb5f2a206325eb-22" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-22"&gt;&lt;/a&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-23" name="rest_code_cfad86014c86445786fb5f2a206325eb-23" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-23"&gt;&lt;/a&gt;&lt;span class="c"&gt;%% API&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-24" name="rest_code_cfad86014c86445786fb5f2a206325eb-24" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-24"&gt;&lt;/a&gt;&lt;span class="nf"&gt;start_vnode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-25" name="rest_code_cfad86014c86445786fb5f2a206325eb-25" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;riak_core_vnode_master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_vnode_pid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;I&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;MODULE&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-26" name="rest_code_cfad86014c86445786fb5f2a206325eb-26" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-26"&gt;&lt;/a&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-27" name="rest_code_cfad86014c86445786fb5f2a206325eb-27" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-27"&gt;&lt;/a&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-28" name="rest_code_cfad86014c86445786fb5f2a206325eb-28" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}}.&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-29" name="rest_code_cfad86014c86445786fb5f2a206325eb-29" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-29"&gt;&lt;/a&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-30" name="rest_code_cfad86014c86445786fb5f2a206325eb-30" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-30"&gt;&lt;/a&gt;&lt;span class="c"&gt;%% Sample command: respond to a ping&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-31" name="rest_code_cfad86014c86445786fb5f2a206325eb-31" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-31"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-32" name="rest_code_cfad86014c86445786fb5f2a206325eb-32" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pong&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state.partition&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-33" name="rest_code_cfad86014c86445786fb5f2a206325eb-33" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-33"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-34" name="rest_code_cfad86014c86445786fb5f2a206325eb-34" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-34"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"unhandled_command &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_cfad86014c86445786fb5f2a206325eb-35" name="rest_code_cfad86014c86445786fb5f2a206325eb-35" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_cfad86014c86445786fb5f2a206325eb-35"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noreply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let's go by parts, first we declare our module:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_af30ce47785b4d88be406147c37397ba-1" name="rest_code_af30ce47785b4d88be406147c37397ba-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_af30ce47785b4d88be406147c37397ba-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;module&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tanodb_vnode&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We specify that we want to implement the riak_core_vnode behavior:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_3b24e647f2e6417d8ccd698386c24d90-1" name="rest_code_3b24e647f2e6417d8ccd698386c24d90-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_3b24e647f2e6417d8ccd698386c24d90-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;behaviour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;riak_core_vnode&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Behaviors in Erlang are like interfaces, a set of functions that a module must
implement to satisfy the behaviour specification, you can read more in the
&lt;a class="reference external" href="http://www.erlang.org/doc/design_principles/des_princ.html"&gt;Erlang documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this case riak_core defines a behavior with a set of functions we must
implement to be a valid riak_core vnode, you can get an idea of the kind of
functionality we need by looking at the exported functions:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-1" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;export&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;start_vnode&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-2" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-3" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;terminate&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-4" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-4" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_command&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-5" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-5" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;is_empty&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-6" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-6" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-7" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-7" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_handoff_command&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-8" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-8" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handoff_starting&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-9" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-9" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handoff_cancelled&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-10" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-10" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handoff_finished&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-11" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-11" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_handoff_data&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-12" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-12" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;encode_handoff_item&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-13" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-13" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_overload_command&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-14" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-14" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_overload_info&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-15" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-15" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_coverage&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_59e48a3b84244c25aceb02a2628cfd15-16" name="rest_code_59e48a3b84244c25aceb02a2628cfd15-16" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_59e48a3b84244c25aceb02a2628cfd15-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handle_exit&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For the moment most of them have a "dummy" implementation where they just do
the minimal amount of work to satisfy the behavior and not more, it's our job
to change the default implementation to fit our needs.&lt;/p&gt;
&lt;p&gt;We will have a record called state to keep info between callbacks, this is
typical Erlang way of managing state so I won't cover it here:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_ce790ba87265416cb01125de270a9543-1" name="rest_code_ce790ba87265416cb01125de270a9543-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_ce790ba87265416cb01125de270a9543-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;record&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We implement the api to start the vnode:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_1c77f700553d4351afed6c80f1a5c733-1" name="rest_code_1c77f700553d4351afed6c80f1a5c733-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_1c77f700553d4351afed6c80f1a5c733-1"&gt;&lt;/a&gt;&lt;span class="c"&gt;%% API&lt;/span&gt;
&lt;a id="rest_code_1c77f700553d4351afed6c80f1a5c733-2" name="rest_code_1c77f700553d4351afed6c80f1a5c733-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_1c77f700553d4351afed6c80f1a5c733-2"&gt;&lt;/a&gt;&lt;span class="nf"&gt;start_vnode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;I&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_1c77f700553d4351afed6c80f1a5c733-3" name="rest_code_1c77f700553d4351afed6c80f1a5c733-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_1c77f700553d4351afed6c80f1a5c733-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;riak_core_vnode_master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;get_vnode_pid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;I&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;MODULE&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that on init we store the Partition value on state so we can use it later,
this is what I referred above as vnode id, it's the big number you saw before:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_8f5679a5104449f78ca4c3e76a8e4880-1" name="rest_code_8f5679a5104449f78ca4c3e76a8e4880-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_8f5679a5104449f78ca4c3e76a8e4880-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_8f5679a5104449f78ca4c3e76a8e4880-2" name="rest_code_8f5679a5104449f78ca4c3e76a8e4880-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_8f5679a5104449f78ca4c3e76a8e4880-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;#state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Partition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}}.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now for the interesting part, here we have our ping command implementation,
we match for ping in the Message position (the first argument):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_aa0c93570351473eae8124431c7821c3-1" name="rest_code_aa0c93570351473eae8124431c7821c3-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_aa0c93570351473eae8124431c7821c3-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ping&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Return a response with the second item in the tuple being the actual response
that the caller will get where we reply with the atom pong and the partition
number of this vnode, the last item in the tuple is the new state we want to
have for this vnode, since we didn't change anything we pass the current value:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_580d62cba6dc428e8839a4ebede6eab9-1" name="rest_code_580d62cba6dc428e8839a4ebede6eab9-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_580d62cba6dc428e8839a4ebede6eab9-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pong&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="nl"&gt;#state.partition&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We implement a catch all that will just log the unknown command and give no
reply back:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code erlang"&gt;&lt;a id="rest_code_009af815b48549ae87497ff6875773ab-1" name="rest_code_009af815b48549ae87497ff6875773ab-1" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_009af815b48549ae87497ff6875773ab-1"&gt;&lt;/a&gt;&lt;span class="nf"&gt;handle_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="nv"&gt;Sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_009af815b48549ae87497ff6875773ab-2" name="rest_code_009af815b48549ae87497ff6875773ab-2" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_009af815b48549ae87497ff6875773ab-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nn"&gt;lager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"unhandled_command &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_009af815b48549ae87497ff6875773ab-3" name="rest_code_009af815b48549ae87497ff6875773ab-3" href="http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/#rest_code_009af815b48549ae87497ff6875773ab-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;noreply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is the roundtrip of a ping call, our task to add more commands will be:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Add a function on tanodb.erl that hides the internal work done to distribute the work&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a new match on handle_command to match the command we added on tanodb.erl and provide a reply&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;</description><category>distsys</category><category>erlang</category><category>riak_core</category><category>tutorial</category><guid>http://marianoguerra.org/posts/riak-core-tutorial-part-3-ping-command/</guid><pubDate>Tue, 24 Jul 2018 14:35:57 GMT</pubDate></item></channel></rss>