<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Mon, May 6, 2013 at 1:05 PM, Timothy Daly <span dir="ltr"><<a href="mailto:timjr@yahoo-inc.com" target="_blank">timjr@yahoo-inc.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
I think this is a great idea.  This type of thing is often called fuzz testing or fuzzing.  They use it a lot to test compilers, but I guess any sufficiently complicated interface is a good candidate.<br>
<br>
In my limited experience with it, you get the most value when the behavior is nearly normal, right on the boundary of expected behavior and brokenness.</blockquote><div><br></div><div style>+1, and it takes a lot of effort to codify chaos around the boundaries (total chaos is easy but only catches obvious issues). Knowing the expected constraints of the interface is important when you want to exceed them.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">For the drivers, there are more ways to fail than just throwing.  For each API entry point, you could either do it, not do it, do something else, or do it but really slowly.  Note that doing the wrong thing is an especially hard case to deal with. They call that Byzantine failure.<br>

<br>
You could get some of the benefit without even modifying the code by doing something like a Netflix chaos monkey -- just go kill off or pause processes at random while generating load.  You can also introduce network latency and packet loss using the linux network emulation.  For example, this adds a 300ms delay to lo, for testing on a single machine:<br>

<br>
        sudo tc qdisc add dev lo root netem delay 300ms<br>
<br>
Cheers,<br>
Tim<br>
<div><div class="h5"><br>
On May 3, 2013, at 7:25 PM, Joshua Harlow wrote:<br>
<br>
> Hi everyone,<br>
><br>
> I've been having an idea for a while but have never had time to get around to doing it, so I thought some other people might like to see if its possible (and or/comments in general).<br>
><br>
> The pitch:<br>
><br>
> It would be neat to implement a set of 'chaos' drivers that could be implemented for each pluggable 'driver-like' backend that can be provided in nova (for example the servicegroup driver, or the vm driver..). The concept would be that a single 'chaos' driver would wrap a working driver and the 'chaos' driver would randomly (likely via a specified seed and/or rate) raise different types of exceptions that the driver interface/abstraction allows to be thrown. For the cases where it does not throw it would pass on the request to the underlying driver, thus it would act as a driver that sporadically fails at a much higher rate (depending on the random seed or other configuration) than the underlying wrapped driver. This would be neat as a way to test the corner cases of the code using said driver (and to see how said code handles varying exceptions). It also provides a repeatable (due to the set seed)  & unique view into what state the system is left in after said exceptions occur. The results of such types of 'chaos' drivers could provide unique insights into how the overall system recovers from failures and could lead to new code to ensure the system is left in a consistent state (if it is not already).<br>

><br>
> If anyone might be interested I put this up @ <a href="https://blueprints.launchpad.net/nova/+spec/chaos-drivers" target="_blank">https://blueprints.launchpad.net/nova/+spec/chaos-drivers</a><br>
><br>
> Thoughts or comments welcome :-)<br>
><br>
> -Josh<br>
><br>
</div></div>> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> <a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</blockquote></div><br></div></div>