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