the api should be bit different.

during one 'fail', transport internally goes through states:
functioning -> shutdown -> not functioning -> repairing -> functioning

in functioning, shutdown states completes requests with success,
in not functioning, repairing states completes requests with error

during shutdown and repairing state we use given probability to decide whether to move to the next phase or not. 'not functioning' should take 'duration' time.