exponential backoff and retry