<div dir="ltr"><div>Fuse is an application which implements the so-called circuit-breaker pattern for Erlang. The goal is to "do it rightâ„¢" by having ample amounts of documentation, proper EDoc, a tutorial, proper instrumentation, alarm_handlers, event hookup points, and a CT test suite with good base coverage.</div>

<div><br></div><div>A circuit breaker is used to guard against cascading subsystem failure in a larger project. If a subsystem fails, the circuit breaker opens. Rather than calling the failing subsystem, we just return immediately with information about the circuit breaker being open. The consequences are:</div>

<div><br></div><div>* No resource buildup due to timeouts</div><div>* Low latency in responses</div><div>* The ability to act differently when we know the system is not merely slow, but failing.</div><div><br></div><div>
After a while, the circuit automatically heals.</div>
<div><br></div><div>Because fuse will be critical infrastructure it comes with full Quviq Quickcheck models which tests all possible concurrent interleavings through the PULSE scheduler. Thomas Arts has been helpful with lots of small hints on how to make this work out. The only thing you have to trust is that erlang:send_after/3 works as intended. As part of the development, millions of sequential and parallel invocations were run. While this does not guarantee no bugs, the bar has been set considerably higher than in most other projects.</div>

<div><br></div><div>More is in the projects README.md file:</div><div><br></div><div><span class="" style="white-space:pre">    </span><a href="https://github.com/jlouis/fuse">https://github.com/jlouis/fuse</a></div><div><span class="" style="white-space:pre">  </span></div>

<div>As well as all the background information and such. Issues and Patches are very welcome!</div><div><br></div><div><br></div>-- <br>J.
</div>