# File lib/mongo/retryable.rb, line 39 def read_with_retry(session = nil) attempt = 0 begin attempt += 1 yield rescue Error::SocketError, Error::SocketTimeoutError => e if attempt > cluster.max_read_retries || (session && session.in_transaction?) raise end log_retry(e) cluster.scan!(false) retry rescue Error::OperationFailure => e if cluster.sharded? && e.retryable? && !(session && session.in_transaction?) if attempt > cluster.max_read_retries raise end log_retry(e) sleep(cluster.read_retry_interval) retry else raise end end end