You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "Tao Yang (Jira)" <ji...@apache.org> on 2025/08/05 02:23:00 UTC

[jira] [Created] (YARN-11843) Fix potential deadlock when auto-correction of container allocation is enabled

Tao Yang created YARN-11843:
-------------------------------

             Summary: Fix potential deadlock when auto-correction of container allocation is enabled
                 Key: YARN-11843
                 URL: https://issues.apache.org/jira/browse/YARN-11843
             Project: Hadoop YARN
          Issue Type: Bug
          Components: scheduler
    Affects Versions: 3.5.0
            Reporter: Tao Yang
            Assignee: Tao Yang


The feature introduced in YARN-11702 has a potential deadlock issue. When enabled, it can cause deadlock when holding application-level write locks while trying to acquire queue-level write locks.
 
Root Cause:
 - autoCorrectContainerAllocation is called while holding application-level write locks
 - It directly calls completedContainer() which requires queue-level write locks
{code:java}
CapacityScheduler#allocate
   --> ...
       application.getWriteLock().lock();   //1. requires app writeLock!!!
       try{
           ...
           AbstractYarnScheduler#autoCorrectContainerAllocation
              --> AbstractYarnScheduler#completedContainer 
                  --> AbstractYarnScheduler#completedContainerInternal
                      --> AbstractLeafQueue#completedContainer
                           writeLock.lock()  //2. requires queue writeLock!!!
                           try{
                               ...
                               FiCaSchedulerApp#containerCompleted
                                   //3. requires app writeLock!!!
                           }finally{
                               writeLock.unlock();
                           }
       }finally{
           application.getWriteLock().unlock();
       }{code}

 - This violates lock hierarchy and creates deadlock scenarios, since AbstractYarnScheduler#completedContainer could be called from another thread during normal container completion operations.
 

Solution:
Replace direct completedContainer() calls with asyncContainerRelease() in autoCorrectContainerAllocation method.
Before:
{code:java}
completedContainer(rmContainer, ...); // Direct call causes deadlock {code}
After:
{code:java}
asyncContainerRelease(rmContainer); // Async call avoids deadlock {code}



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

---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-issues-help@hadoop.apache.org