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)