<div dir="ltr"><div><div><div><div><div>Ah, that's interesting, let's see if we can test this.<br><br></div>The 'delete_mode' configuration is not supported in the regular riak.conf file, from what I understand.<br>

</div>However, you can still set it in the 'advanced.config' file, as described here:<br>
<a href="https://github.com/basho/basho_docs/blob/features/lp/advanced-conf/source/languages/en/riak/ops/advanced/configs/configuration-files.md#the-advancedconfig-file" target="_blank">https://github.com/basho/basho_docs/blob/features/lp/advanced-conf/source/languages/en/riak/ops/advanced/configs/configuration-files.md#the-advancedconfig-file</a><br>


</div>(those docs are a current work-in-progress, mind you)<br><br></div>So, create an advanced.config file in your riak etc/ directory (this will be in addition to your existing riak.conf), with the following contents:<br>
[<br> {riak_kv, [<br>   {delete_mode, immediate}<br> ]}<br>].<br><br></div>Restart the node, and try your tests again. The tombstones should disappear now on every delete request. (You should probably also wipe all of the old data, by deleting the contents of the bitcask and anti_entropy directories in your riak data dir, just to make sure the old ones are gone. This should be done while the node is down, of course.)<br>
<div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, May 19, 2014 at 4:33 PM, Paweł Królikowski <span dir="ltr"><<a href="mailto:rabbbit@gmail.com" target="_blank">rabbbit@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">The problem is that the tombstones never disappear - they keep coming back through bucket.get_keys() hours after deletion, even after a restart.<div>
<br></div><div>I said I'm using the delete_mode default configuration, because I didn't change it. I now tried, and apparently it's not supported any more in Riak 2.0.</div>

<div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>17:16:56.318 [error] You've tried to set delete_mode, but there is no setting with that name.^M</div></div><div>

<div>17:16:56.318 [error]   Did you mean one of these?^M</div></div><div><div>17:16:56.335 [error]     dtrace^M</div></div><div><div>17:16:56.335 [error]     nodename^M</div></div><div>

<div>17:16:56.335 [error]     ssl.keyfile^M</div></div><div><div>17:16:56.335 [error] Error generating configuration in phase transform_datatypes^M</div></div><div><div>17:16:56.335 [error] Conf file attempted to set unknown variable: delete_mode^M</div>


</div><div><div>Error generating config with cuttlefish</div><div><br></div></div></blockquote>I'm using Riak 2.0.0pre20, on strongly consistent buckets, on a single node cluster. Can this be the reason? I guess what I need is a confirmation that something is broken/that I'm doing something stupid.<div>


<br></div><div>I've tried looking for similar issues (<a href="http://github.com/basho/riak/issues" target="_blank">github.com/basho/riak/issues</a>), didn't find any -> I guess that suggests I'm doing something stupid, I just don't know what yet.<br>


<div><div><br></div><div><div><br></div><div>Thanks again :)</div></div></div></div><div><br></div><div>--</div><div>Paweł</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">
On 19 May 2014 18:00, Dmitri Zagidulin <span dir="ltr"><<a href="mailto:dzagidulin@basho.com" target="_blank">dzagidulin@basho.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>Ah, yes, you bring up a good point. (And, that's another subtlety to keep in mind, with Option #1).<br>


<br></div>Tombstones are definitely something to keep in mind, when deleting unit test data. <br>
</div>As you mentioned in your earlier question, if you're using default delete_mode configuration ( 3 seconds ), it means that if you issue a delete, a tombstone object is going to be written (and stick around for at least 3 seconds), and unfortunately, it is going to show up as a false positive on a List Keys call.<br>



<br></div>The easiest thing to try, in your case, is to set 'delete_mode' to 'immediate', restart the test cluster, and retest. With an immediate delete, your second test with 10 keys should not take as long as the previous delete with 10000 keys.<br>



<br><div><br></div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, May 19, 2014 at 11:46 AM, Paweł Królikowski <span dir="ltr"><<a href="mailto:rabbbit@gmail.com" target="_blank">rabbbit@gmail.com</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Dmitri,<div><br></div><div>Thanks a lot for the answer. Option #1 seems the best, but I have a follow up question:</div>



<div><br></div><div>- when do the deleted keys disappear from Riak: a part of my problem (have not explained it correctly the first time), is that get_keys() returns keys that no longer exist. So, I run a test with 10 000 keys, I remove them, it takes Nseconds. I then follow with a test with 10 keys, but removing them takes just as much time - I imagine it's because I'm going over that 10 000 keys again.</div>





<div><br></div><div>This article seems relevant: <a href="http://basho.com/riaks-config-behaviors-part-3/" target="_blank">http://basho.com/riaks-config-behaviors-part-3/</a> - it seems like the tombstones simply remain in my system indefinitely.</div>





<div><br></div><div>--</div><div>Paweł</div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On 19 May 2014 15:32, Dmitri Zagidulin <span dir="ltr"><<a href="mailto:dzagidulin@basho.com" target="_blank">dzagidulin@basho.com</a>></span> wrote:<br>





<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div><div>Hi Pawel,<br><br></div>There's basically three ways to clear data from Riak (for the purposes of automated testing):<br>





<br></div>1. Iterate through the keys via get_keys(), and delete each one. This is what you're currently doing, except you don't need to invoke if.exists().<br>
</div><div>if.exists() makes an additional API call to Riak, and it takes twice as long as just calling delete() (and trapping a potential 404 doesn't exist error).<br>
<br></div><div>Advantages: Easy to understand, can be done entirely in code (without invoking OS/shell commands).<br><br></div><div>Disadvantages: It can get slow, for large data sets. Another subtle disadvantage is that, as your app grows, it can get difficult to keep track of which buckets you've created and need to be cleared. <br>






<br></div>2. Stop the Riak cluster, delete the riak data directory, and re-start. <br><br></div>Advantages: Very fast, and you can be sure that you're deleting all buckets.<br><br></div>Disadvantages: Involves invoking OS/shell commands. This is fairly easy if your Riak node is running on the same machine as your tests (and if it's a single node). To delete the data directories of a multi-node cluster, now you need to involve either a bash script that uses SSH to log in and restart, or a coordination framework like Ansible.<br>






<br></div>3. Use an in-memory back end. (And to drop all data, just restart the node(s)).<br><br></div>Advantages: Same as #2 - fast, thorough.<br><br></div>Disadvantages: Same as #2 (involves shell commands, potentially SSH etc). In addition, since you're likely not going to be running your production code on an in-memory back end, this method introduces a potential environmental/functional difference between your testing and production clusters.<br>






<br></div>I generally use method #1 in my unit tests, and manually delete each key. <br><br>Dmitri<br><div><div><div><div><div><div>
<div><div><br></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div>On Mon, May 19, 2014 at 8:53 AM, Paweł Królikowski <span dir="ltr"><<a href="mailto:rabbbit@gmail.com" target="_blank">rabbbit@gmail.com</a>></span> wrote:<br>






</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr">Hi,<div><br></div><div>For testing, I'd like to be able to throw a large number of data at Riak (100k+ entries), check how it performed, change something in the application, run the test again. I'd like to use the same data every time, so, I'd like to clear the bucket between every test.</div>








<div><br></div><div>The documentation (<a href="http://docs.basho.com/riak/2.0.0beta1/dev/references/http/" target="_blank">http://docs.basho.com/riak/2.0.0beta1/dev/references/http/</a>) says:</div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">








<div><div><i>Delete Buckets</i></div></div><div><div>There is no straightforward way to delete an entire Bucket. To delete all the keys in a bucket, you’ll need to delete them all individually.</div></div></blockquote><div>








<br></div>So, I'm currently using something like:<div><br><div><div><span style="white-space:pre-wrap"> </span>for k in r_bk.get_keys():</div><div><span style="white-space:pre-wrap">                </span>v = r_bk.get(k)</div>

<div><span style="white-space:pre-wrap">          </span>if v.exists:</div><div><span style="white-space:pre-wrap">                     r_bk</span>.delete(v)</div><div><br></div><div>The problem is that r_bk.get_keys() returns a lot of elements that don't exist (tombstones?) and iterating over all of them takes time.</div>








<div><br></div><div>Is that the way it's supposed to work? Or am I missing something?</div><div><br></div><div>- I'm using default delete_mode configuration ( 3 seconds )</div><div>- I'm using Riak 2.0 alpha 19 with Python. ( there's a bug with strong consistency in Beta1, cannot use it)<br>








</div></div></div><div>- changing the bucket name for every run seems .. impractical?<br></div><div><br></div><div>Any advices welcomed,</div><div><br></div><div>--</div><div>Thanks,</div><div>Paweł</div></div>
<br></div></div>_______________________________________________<br>
riak-users mailing list<br>
<a href="mailto:riak-users@lists.basho.com" target="_blank">riak-users@lists.basho.com</a><br>
<a href="http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com" target="_blank">http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
riak-users mailing list<br>
<a href="mailto:riak-users@lists.basho.com" target="_blank">riak-users@lists.basho.com</a><br>
<a href="http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com" target="_blank">http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>