Thank you for the feedback.
We understand that the log suggests a connection establishment issue between
Apache James and Amazon S3, which may point to an infrastructure or
network-related problem rather than a James software defect.
We have a few additional questions:
- Are there any Apache James, AWS SDK, Netty, or S3 client configuration
settings that could help improve resiliency against these intermittent
connection failures?
- Has anyone experienced similar intermittent S3 connection timeouts when
using Apache James with S3-backed blob storage?
- If so, what was the root cause, and what solution or mitigation helped
resolve the issue?
- Are there any recommended timeout, connection pool, retry, or DNS-related
settings that should be reviewed in a production environment running on
Kubernetes/EKS?
For additional context:
- Apache James 3.9.0
- Cassandra 4.1.10
- Amazon MQ (RabbitMQ)
- Amazon S3 Object Storage
- AWS EKS deployment
- Same AWS region for both James and S3
- Approximately 10 occurrences per day
- During the event, requests to James that require message content retrieval
can time out until connectivity recovers
Any guidance or shared experiences would be greatly appreciated.
On Tuesday, October 20, 2026 at 09:00:19 PM CDT, James A
<[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)