The `S3RetryingInputStream` hides cases where S3 closes a connection partway through downloading a blob. By default it retries 3 times before failing the download. However, the number of failures tends to increase on larger blobs and often 3 failures is not enough to complete a multi-GB download if S3 is suffering from a cluster of failures as sometimes happens. Typically we make 10s-to-100s of MBs of progress between each failure even in this state.

I think we should increase the tenacity of `S3RetryingInputStream` when downloading larger blobs. For instance, we could not count a partial download towards the retry limit if it makes significant progress before failing.
modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobContainerRetriesTests.java
public class S3BlobContainerRetriesTests extends AbstractBlobContainerRetriesTestCase {
    private S3Service service;
    @Before
    public void setUp() throws Exception {
        service = new S3Service(Mockito.mock(Environment.class));
        super.setUp();
    }
    @After
    public void tearDown() throws Exception {
        IOUtils.close(service);
        super.tearDown();
    }
    @Override
    protected String downloadStorageEndpoint(BlobContainer container, String blob) {
        return "/bucket/" + container.path().buildAsString() + blob;
    }
    @Override
    protected String bytesContentType() {
        return "text/plain; charset=utf-8";
    }
    @Override
    protected Class<? extends Exception> unresponsiveExceptionType() {
        return SdkClientException.class;
    }
    @Override
    protected BlobContainer createBlobContainer(
        final @Nullable Integer maxRetries,
        final @Nullable TimeValue readTimeout,