<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 9, 2015 at 12:07 AM, Jörgen Brandt <span dir="ltr"><<a href="mailto:brandjoe@hu-berlin.de" target="_blank">brandjoe@hu-berlin.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":130" class="a3s" style="overflow:hidden">Consider an application (with transient software faults),<br>
processing user queries.</div></blockquote></div><br></div><div class="gmail_extra">I think this is the central point of the mail. One of the usual Erlang approaches is to rely on stable storage and checkpointing for these kinds of work units.<br><br></div><div class="gmail_extra">Stable storage means that you can write to disk, sync data, and then you have a linearizable point in time after which data are safe on the disk and can be re-read.<br><br></div><div class="gmail_extra">Checkpointing means to track on stable storage whenever the system reaches some safe invariant state.<br><br></div><div class="gmail_extra">In order to make sure progress happens, even under the possibility of transient errors, one must figure out how to checkpoint invariant state such that it can be recovered. In some cases, you don't need truly persistent storage, but can simply ship the state to another process, or even system.<br><br></div><div class="gmail_extra">The other ingredient you need is that of idempotent operations. That is, you can rerun an operation/subtask and it will produce the same result as before, or it will return early with the answer if the answer is already evaluated and cached.<br><br></div><div class="gmail_extra">Given these two ingredients, you don't need to use transactions. You just reinject unfulfilled obligations into the system and you track which obligations that deadline.<br><br></div><div class="gmail_extra">A project like Apache Storm implements this workflow, and I'm 99% sure a lot of Erlang projects exist for this, though the names eludes me right now.<br></div><div class="gmail_extra"><br clear="all"><br>-- <br><div class="gmail_signature">J.</div>
</div></div>