<div dir="ltr">With all due respect to the Basho guys and the wars from which their unique and terrible scars were born, the question here was recovering a single gen_server from split-brain.<div><br></div><div>Disregarding for a moment the incongruousness of installing a Riak cluster to try to handle that case, there's nothing Riak could do to even help out, even if both progressing gen_servers were able to instantly save state in a known shared key.  Either it's configured as last-write-wins ("lose data") or it's configured to return siblings ("split-brain, YOU handle it"). </div><div><br></div><div>The underlying problem is that you need conflict resolution, which Riak *does* provide with their recent CRDT work, but that's a function of CRDTs as a concept and organizing your data properly.  And while I wholeheartedly agree with the Basho guys that you should go to the literature and proven algorithms rather than inventing your own, there's a very large class of gen_servers for which conflicting progress state is trivially composable (e.g 'union', 'greater_of').</div><div><br></div><div>CRDT paper: <a href="http://highscalability.com/blog/2010/12/23/paper-crdts-consistency-without-concurrency-control.html">http://highscalability.com/blog/2010/12/23/paper-crdts-consistency-without-concurrency-control.html</a></div><div>great discussion of the issues: <a href="http://aphyr.com/posts/285-call-me-maybe-riak">http://aphyr.com/posts/285-call-me-maybe-riak</a></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 20, 2014 at 10:28 PM, Scott Lystig Fritchie <span dir="ltr"><<a href="mailto:fritchie@snookles.com" target="_blank">fritchie@snookles.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Andrew Stone <<a href="mailto:andrew.j.stone.1@gmail.com">andrew.j.stone.1@gmail.com</a>> wrote:<br>
<br>
ajs> Hi, I've waited for someone to jump in and say this, but it hasn't<br>
ajs> happened. You really, really don't want to try dealing with<br>
ajs> netsplits and application failover in an app specific manner. It is<br>
ajs> not safe, and you will likely lose data.<br>
<br>
Agreed, 106%.<br>
<br>
As Joe Armstrong, benelovent co-leader of the concurrent world, is fond<br>
of saying, it takes at least two machines to detect and recover from a<br>
fault in one.  In the larger case of split brain management in<br>
distributed, asynchronous, message passing environment (like the<br>
Universe), there are fundamental limits and impossibilities that nobody<br>
is immune from.  Good luck with two machines figuring that out.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Scott<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>