multiplexer: graceful fallback on specific read exceptions
Under some circumstances (e.g. network instability, service restarts, etc.), one of the object storages backing a multiplexer instance might be temporarily unavailable.
Instead of immediately raising an exception, temporarily disable the
backend for further accesses and attempt reading the object from other
backends. Raise a specific NoBackendsLeft
exception if all the
backends have been disabled due to a transient exception.