Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
3.0
-
None
Description
Currently IO is resubmitted to inboundExecutor for further processing (even there are corner cases then a message handler called in IO thread)
It makes message processing essentially single threaded and introduces additional lag due to message transition to additional queue.
addMessageHandler should be extended with a 3-d argument: a pool for submitting a callback for execution, or an executorSelector like in jraft.
inboundExecutor should be changed to striped, use more than one thread, and serve messages without explicit executor. Delivery guaranties should be preserved: if a message A is send before B, B can't be processed on a receiver before A. A stripe is defined by sender-receiver pair (or can be user defined - TBD)
outboundExecutor also looks like a contention point - need to be addressed as well
Attachments
Issue Links
- blocks
-
IGNITE-21541 Avoid partition-operations pool when it not lead to starvation
- Resolved
- is blocked by
-
IGNITE-21601 Avoid watch thread hijack due to schema sync in KV/record views
- Resolved
- relates to
-
IGNITE-21458 Up to 25% performance drop in key-value operations (embedded node)
- Closed
-
IGNITE-21600 Make partition-operations a plain executor
- Resolved
- split to
-
IGNITE-21627 Make Outbound pool striped
- Open
-
IGNITE-21626 Make each component of the Inbound pool striped
- Resolved
- links to