You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@yunikorn.apache.org by "Manikandan R (Jira)" <ji...@apache.org> on 2026/10/29 06:53:00 UTC

[jira] [Resolved] (YUNIKORN-3530) RemoveApplication does not clear allocatingAcceptedApps on parent queues

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

Manikandan R resolved YUNIKORN-3530.
------------------------------------
     Fix Version/s: 1.11.0
    Target Version: 1.11.0
        Resolution: Fixed

> RemoveApplication does not clear allocatingAcceptedApps on parent queues
> ------------------------------------------------------------------------
>
>                 Key: YUNIKORN-3530
>                 URL: https://issues.apache.org/jira/browse/YUNIKORN-3530
>             Project: Apache YuniKorn
>          Issue Type: Bug
>          Components: core - scheduler
>            Reporter: YUNG_CHENG
>            Assignee: YUNG_CHENG
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.11.0
>
>
> {\{Queue.setAllocatingAccepted()}} adds an application that is in the Accepted state with placeholders allocated to \{{allocatingAcceptedApps}} on the leaf queue and on all of its parent queues. When the application moves to Running, \{{incRunningApps()}} removes it from every level.
> {\{Queue.RemoveApplication()}} only removes the application from the leaf queue's \{{allocatingAcceptedApps}}. If the application is removed before it reaches Running, for example after a hard gang scheduling timeout (Accepted -> Failing), its ID stays in \{{allocatingAcceptedApps}} of every parent queue.
> {\{canRunApp()}} counts \{{allocatingAcceptedApps}} as running applications, so each leaked entry permanently takes one \{{maxApplications}} slot on the parent. Once the leaked entries reach the limit, no new application can run in any queue below that parent until the scheduler is restarted.
> *Reproduction*
> Queue hierarchy \{{root.parent.leaf}} with \{{maxApplications: 1}} on \{{root.parent}}:
> {code:go}
> app := newApplication("app-1", "default", "root.parent.leaf")
> leaf.AddApplication(app)
> leaf.setAllocatingAccepted(app.ApplicationID)
> leaf.RemoveApplication(app)
> // leaf.allocatingAcceptedApps   = map[]
> // parent.allocatingAcceptedApps = map[app-1:true]
> // root.allocatingAcceptedApps   = map[app-1:true]
> // parent.canRunApp("app-2")     = false, with 0 running applications
> {code}
> *Proposed fix*
> Add a recursive \{{removeAllocatingAccepted()}}, the counterpart of \{{setAllocatingAccepted()}}, and call it from \{{RemoveApplication()}} in \{{pkg/scheduler/objects/queue.go}}.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

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