add retry with exponential backoff