[
https://issues.apache.org/jira/browse/IGNITE-15528?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexey Scherbakov reassigned IGNITE-15528:
------------------------------------------
Assignee: Alexey Scherbakov
> JRaft creates at least 4 threads for every raft group on a leader
> ------------------------------------------------------------------
>
> Key: IGNITE-15528
> URL: https://issues.apache.org/jira/browse/IGNITE-15528
> Project: Ignite
> Issue Type: Improvement
> Reporter: Mirza Aliev
> Assignee: Alexey Scherbakov
> Priority: Blocker
> Labels: ignite-3
> Fix For: 3.0.0-alpha3
>
>
> When we create a raft group on a leader, jraft creates at least 4 threads for
> every raft group: one thread for {{electionTimer}}, {{voteTimer}},
> {{stepDownTimer}}, andĀ {{snapshotTimer}}. To be more precise, every timer is
> an instance of {{HashedWheelTimer}}, which creates one thread:
> {code:java}
> private final Worker worker = new Worker();
> ...
> workerThread = threadFactory.newThread(worker);
> {code}
> This fact leads to restrictions on the number of partitions that might be
> created, as far as every partition is associated with a raft group. For
> example, one table with 1024 partitions leads to at least 4096 threads on a
> single node.
> Changing {{HashedWheelTimer}} to {{DefaultTimer}} with shared pool won't make
> any sense, as far as the workload of the shared executor likely will lead to
> instability of cluster because threads are timer threads (election timer, for
> example).
> A possible solution is to implement batched handling of raft groups requests,
> like {{appendEntriesRequest}}. In this approach, timers could be shared by
> raft groups. There is an issue in original JRaft repo with some close ideasĀ
> https://github.com/sofastack/sofa-jraft/issues/672
--
This message was sent by Atlassian Jira
(v8.3.4#803005)