You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Vladislav Pyatkov (Jira)" <ji...@apache.org> on 2024/07/10 11:54:00 UTC

[jira] [Assigned] (IGNITE-22261) Deadlock on configuration application in NodeImpl when disruptors are full

     [ https://issues.apache.org/jira/browse/IGNITE-22261?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Vladislav Pyatkov reassigned IGNITE-22261:
------------------------------------------

    Assignee: Vladislav Pyatkov

> Deadlock on configuration application in NodeImpl when disruptors are full
> --------------------------------------------------------------------------
>
>                 Key: IGNITE-22261
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22261
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Roman Puchkovskiy
>            Assignee: Vladislav Pyatkov
>            Priority: Major
>              Labels: ignite-3
>
> # NodeImpl#executeApplyingTasks() takes NodeImpl.writeLock and calls LogManager.appendEntries()
>  # LogManager tries to enqueue a task to diskQueue which is full, hence it blocks until a task gets consumed from diskQueue
>  # diskQueue is consumed by StableClosureEventHandler
>  # StableClosureEventHandler tries to enqueue a task to FSMCallerImpl#taskQueue, which is also full, so this also blocks until a task gets consumed from FSMCallerImpl#taskQueue
>  # FSMCallerImpl#taskQueue is consumed by ApplyTaskHandler
>  # ApplyTaskHandler calls NodeImpl#onConfigurationChangeDone(), which tries to take NodeImpl#writeLock
> As a result, there is a deadlock: NodeImpl#writeLock->LogManager#diskQueue->FSMCallerImpl#taskQueue->NodeImpl#writeLock (disruptors are used as blocking queues in JRaft, so, when full, they act like locks).
> This was caught by ItNodeTest#testNodeTaskOverload() which uses extremely short disruptors (2 items max each).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)