ilya terskov created JAMES-4233:
-----------------------------------
Summary: Hardening IMAP IDLE: Eliminate blocking synchronization,
improve lifecycle resilience, and fix idle timeout handling
Key: JAMES-4233
URL: https://issues.apache.org/jira/browse/JAMES-4233
Project: James Server
Issue Type: Improvement
Components: IMAPServer
Affects Versions: master, 3.9.0
Reporter: ilya terskov
### Context & Motivation
While Apache James has adopted Project Reactor for modern, non-blocking
I/O, the IMAP IDLE implementation still retained legacy synchronous primitives
and fragile lifecycle management. Under real-world workloads—particularly with
high event concurrency and unstable client connections (mobile networks, NAT
expirations, abrupt client drops)—these gaps led to thread pool exhaustion,
lingering ghost connections, and subtle protocol race conditions.
### What PR #3198 Achieves
This PR hardens the IMAP IDLE subsystem through targeted,
backward-compatible improvements centered on three core architectural pillars:
1. **Fully Non-Blocking Event Flow**:
Migrates internal event synchronization from blocking primitives
(`CountDownLatch::await`) to native reactive constructs (`Sinks.One`), ensuring
Reactor and Netty worker threads are never held up waiting for handshake
completions.
2. **Defensive Lifecycle & Resource Management**:
Guarantees deterministic cleanup across both happy paths and edge cases
(unannounced client disconnects, mailbox deselection, and I/O write failures).
Listener registrations and scheduled heartbeat tasks now cleanly self-heal
and release session references immediately rather than relying on delayed
garbage collection.
3. **Strict Protocol Compliance & Network Robustness**:
- Aligns Netty idle state tracking with RFC 2177, ensuring
dead/half-open client connections are reliably detected even when outbound
server heartbeats are actively running.
- Eliminates protocol data races by ensuring clean response ordering
between untagged mailbox updates and terminal tagged completion statuses.
- Provides fault-tolerant handling of line delimiters and immediate
buffer flushing to prevent artificial client handshake latency.
### Expected Impact
Greatly improved stability under heavy mail delivery, lower heap footprint
from eliminating zombie sessions, and cleaner server logs without breaking any
existing behavior or public APIs.
https://github.com/apache/james-project/pull/3198
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]