The review of concurrency bugs is good reading. The “unrelated miscellania” was a dejecting reminder of day-to-day life at large companies.
If you’re in Erlang, and have a license, one can use PULSE to help find concurrency problems. As I understand it, this messes with the schedulers in Erlang to give random orderings. From what I’ve heard, the visualizations are quit nice.
http://publications.lib.chalmers.se/records/fulltext/125252/local_125252.pdf
For my own interests, I liked the bit of confirmation that the bugs in distributed systems were caused by basic messaging reordering.
PULSE is indeed nice. It forces your program to become single threaded so it can provide repeatable interleavings (for quickcheck style shrinking).
A non trivial example: https://github.com/basho/bitcask/blob/develop/test/bitcask_pulse.erl
The review of concurrency bugs is good reading. The “unrelated miscellania” was a dejecting reminder of day-to-day life at large companies.
If you’re in Erlang, and have a license, one can use PULSE to help find concurrency problems. As I understand it, this messes with the schedulers in Erlang to give random orderings. From what I’ve heard, the visualizations are quit nice.
http://publications.lib.chalmers.se/records/fulltext/125252/local_125252.pdf
For my own interests, I liked the bit of confirmation that the bugs in distributed systems were caused by basic messaging reordering.
PULSE is indeed nice. It forces your program to become single threaded so it can provide repeatable interleavings (for quickcheck style shrinking).
A non trivial example: https://github.com/basho/bitcask/blob/develop/test/bitcask_pulse.erl