There's a rather innocent race condition in merle_pool:get_client():

1. merle_client calls merle_pool:set_cached_checkout_state(..., false), pauses before updating the state.
2. process A calls get_client, gets {client, Client, false}.
3. process B calls get_client, gets {client, Client, false}.
4. process A calls merle_client:checkout, gets Socket ok.
5. process B calls merle_client:checkout, gets busy.

As the result, merle_cluster:exec() can either return checked_out or busy, arbitrarily. It might be polite to always return either busy or checked_out, so the caller doesn't have to handle two different return values for the same case.