Hello

1/ I generally recommend increasing size of the http s3 pool

But here the delays of 10s is most likely your issue.

2/ readyness is to be handled with Guice lifecycle check

You are free to compose healthcheck together in order to match your definition 
of healthy

3/ users won't be able to send and open mails so declaring it unhealthy can 
make sense, yes

4/ See point 1.

Best regards

--

Best regards,

Benoit TELLIER

General manager of Linagora VIETNAM <https://linagora.vn>.
Product owner for Twake-Mail <https://github.com/linagora/tmail-flutter> 
product.
Chairman of the Apache James project <https://james.apache.org/>.

Mail: [email protected]
Tel: (0033) 6 77 26 04 58 (WhatsApp, Signal)

On Oct 26, 2026 at 2:59 AM, James A via server-user 
<[email protected]> wrote:

> Thank you for your feedback.
>
> We are running Apache James with S3 blob storage and have observed 
> intermittent S3 health-check/connectivity timeout failures. Our current 
> configuration appears to wait 10 seconds per attempt with a maximum of 3 
> retries, resulting in requests blocking for up to ~30 seconds while the pod 
> continues serving traffic.
>
> 1) What values are recommended for production-scale deployments for Apache 
> James or AWS SDK configuration properties that control S3 timeout and retry 
> behavior?
>
> 2) Does Apache James have a recommended pattern for distinguishing liveness 
> vs readiness vs and dependency health (S3), or is dependency degradation 
> expected to influence readiness/liveness status?
>
> 3) For temporary S3 connectivity issues, is the recommended approach to keep 
> the James pod serving traffic and fail requests fast, or to make the pod 
> unready and remove it from service?
>
> 4) Are there existing James capabilities or community-recommended patterns 
> (circuit breaker, degraded mode, dependency health indicators, fast-fail 
> configuration) to prevent long S3 waits from consuming request threads and 
> causing user-facing timeout?
>
> Any production deployment recommendations or examples would be greatly 
> appreciated.
>
> Best Regards,
> James A.
>
> On 2026/10/21 02:30:56 Benoit TELLIER via server-user wrote:
> > Hello James A
> >
> > 2026-10-19 16:06:22 DEBUG [aws-java-sdk-NettyEventLoop-0-63] 
> > s.a.a.h.n.n.i.NettyRequestExecutor - Failed to create connection to 
> > https://s3.us-east-1.amazonaws.com/
> >
> > It appears the Amazon S3 driver here do not succeed to open a connection to 
> > James. I do not think it is a software problem but more of an 
> > infrastructure/network problem...
> >
> > --
> >
> > Best regards,
> >
> > Benoit TELLIER
> >
> > General manager of Linagora VIETNAM <https://linagora.vn>.
> > Product owner for Twake-Mail <https://github.com/linagora/tmail-flutter> 
> > product.
> > Chairman of the Apache James project <https://james.apache.org/>.
> >
> > Mail: [email protected]
> > Tel: (0033) 6 77 26 04 58 (WhatsApp, Signal)
> >
> > On Oct 21, 2026 at 4:01 AM, James A via server-user 
> > <[email protected]> wrote:
> >
> > > Hi James Support Team,
> > > We are building an email platform using Apache James 3.9.0 with Cassandra 
> > > 4.1.10, Amazon MQ (RabbitMQ), and Amazon S3 as the object store.
> > >
> > > Apache James is deployed as a containerized application on AWS EKS, using 
> > > JMAP protocol to communicate with James.
> > >
> > > We are experiencing intermittent S3-related failures when retrieving 
> > > email message summaries from James. On average, we observe approximately 
> > > 10 occurrences per day, and during these periods, requests reaching James 
> > > time out until the issue clears.
> > >
> > > As part of our investigation, we have reviewed the health and resource 
> > > utilization of James, Cassandra, and S3, and all metrics appear to be 
> > > within normal operating limits. Both the James application and the S3 
> > > buckets are deployed in the same AWS region, so cross-region latency is 
> > > not a factor.
> > >
> > > Has anyone encountered a similar issue with Apache James and S3-backed 
> > > blob storage? Any insights, recommendations, or known fixes would be 
> > > greatly appreciated.
> > >
> > > The error stack trace is included below for reference.
> > >
> > > 2026-10-19 16:06:21 ERROR [parallel-6] o.a.james.PeriodicalHealthChecks - 
> > > UNHEALTHY: ObjectStorage : Error checking ObjectSotrage
> > >
> > > java.util.concurrent.TimeoutException: Did not observe any item or 
> > > terminal signal within 10000ms in 'handle' (and no fallback has been 
> > > configured)
> > > at 
> > > reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:296)
> > > at 
> > > reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:281)
> > > at 
> > > reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:420)
> > > at 
> > > reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162)
> > > at 
> > > reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270)
> > > at 
> > > reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285)
> > > at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
> > > at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
> > > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
> > > at 
> > > java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
> > > at 
> > > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
> > > at 
> > > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
> > > at java.base/java.lang.Thread.run(Thread.java:1583)
> > > 2026-10-19 16:06:22 DEBUG [sdk-ScheduledExecutor-2-3] 
> > > software.amazon.awssdk.request - Sending Request: 
> > > DefaultSdkHttpFullRequest(httpMethod=GET, protocol=https, 
> > > host=s3.us-east-1.amazonaws.com, encodedPath=/, 
> > > headers=[amz-sdk-invocation-id, User-Agent], queryParameters=[])
> > > 2026-10-19 16:06:22 DEBUG [sdk-ScheduledExecutor-2-3] 
> > > s.a.a.c.i.h.p.s.AsyncSigningStage - Using SelectedAuthScheme: 
> > > aws.auth#sigv4
> > > 2026-10-19 16:06:22 DEBUG [aws-java-sdk-NettyEventLoop-0-63] 
> > > s.a.a.h.n.n.i.NettyRequestExecutor - Failed to create connection to 
> > > https://s3.us-east-1.amazonaws.com/
> > > java.util.concurrent.CancellationException: null
> > > at 
> > > java.base/java.util.concurrent.CompletableFuture.cancel(CompletableFuture.java:2510)
> > > at 
> > > reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.cancel(MonoCompletionStage.java:156)
> > > at 
> > > reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.cancel(FluxFlattenIterable.java:312)
> > > at 
> > > reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.cancel(FluxMapFuseable.java:365)
> > > at 
> > > reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.cancel(FluxHandleFuseable.java:265)
> > > at 
> > > reactor.core.publisher.Operators$MultiSubscriptionSubscriber.drainLoop(Operators.java:2424)
> > > at 
> > > reactor.core.publisher.Operators$MultiSubscriptionSubscriber.drain(Operators.java:2392)
> > > at 
> > > reactor.core.publisher.Operators$MultiSubscriptionSubscriber.cancel(Operators.java:2204)
> > > at 
> > > reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:295)
> > > at 
> > > reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:281)
> > > at 
> > > reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:420)
> > > at 
> > > reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162)
> > > at 
> > > reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270)
> > > at 
> > > reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285)
> > > at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
> > > at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
> > > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
> > > at 
> > > java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
> > > at 
> > > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
> > > at 
> > > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
> > > at java.base/java.lang.Thread.run(Thread.java:1583)
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]

Reply via email to