Class WriteRequestFilter

java.lang.Object
org.apache.mina.core.filterchain.IoFilterAdapter
org.apache.mina.filter.executor.WriteRequestFilter
All Implemented Interfaces:
IoFilter

public class WriteRequestFilter extends IoFilterAdapter
Attaches an IoEventQueueHandler to an IoSession's WriteRequest queue to provide accurate write queue status tracking.

The biggest difference from OrderedThreadPoolExecutor and UnorderedThreadPoolExecutor is that IoEventQueueHandler.polled(Object, IoEvent) is invoked when the write operation is completed by an IoProcessor, consequently providing the accurate tracking of the write request queue status to the IoEventQueueHandler.

Most common usage of this filter could be detecting an IoSession which writes too fast which will cause OutOfMemoryError soon:

    session.getFilterChain().addLast(
            "writeThrottle",
            new WriteRequestFilter(new IoEventQueueThrottle()));

Known issues

You can run into a dead lock if you run this filter with the blocking IoEventQueueHandler implementation such as IoEventQueueThrottle in the IoProcessor thread. It's because an IoProcessor thread is what processes the WriteRequests and notifies related WriteFutures; the IoEventQueueHandler implementation that waits for the size of the write request queue to decrease will never wake up. To use such an handler, you have to insert an ExecutorFilter before this filter or call IoSession.write(Object) method always from a different thread.