volcano源码阅读——action/enqueue

news/2025/10/17 11:36:08/文章来源:https://www.cnblogs.com/xiaoxiongfei/p/19147404
enqueue
将pending状态的job的PodGroup状态设置为inqueue,当会话关闭的时候会更新PodGroup状态。PodGroup状态变为inqueue后,controller会为其创建Pod。
 
pkg\scheduler\actions\enqueue\enqueue.go
 1 func (enqueue *Action) Execute(ssn *framework.Session) {
 2     klog.V(5).Infof("Enter Enqueue ...")
 3     defer klog.V(5).Infof("Leaving Enqueue ...")
 4 
 5     queues := util.NewPriorityQueue(ssn.QueueOrderFn) // 临时队列
 6     queueSet := sets.NewString()                      // 临时集合
 7     jobsMap := map[api.QueueID]*util.PriorityQueue{}  // 临时字典:queueID与job队列对应关系
 8 
 9     for _, job := range ssn.Jobs {
10         // 检查调度开始时间戳,如果是零则为其设置当前时间
11         if job.ScheduleStartTimestamp.IsZero() {
12             ssn.Jobs[job.UID].ScheduleStartTimestamp = metav1.Time{
13                 Time: time.Now(),
14             }
15         }
16         if queue, found := ssn.Queues[job.Queue]; !found {
17             klog.Errorf("Failed to find Queue <%s> for Job <%s/%s>",
18                 job.Queue, job.Namespace, job.Name)
19             continue
20         } else if !queueSet.Has(string(queue.UID)) {
21             klog.V(5).Infof("Added Queue <%s> for Job <%s/%s>",
22                 queue.Name, job.Namespace, job.Name)
23 
24             queueSet.Insert(string(queue.UID))
25             queues.Push(queue)
26         }
27 
28         // 检查job的状态是不是pending,如果是则将其放到jobsMap的队列里
29         if job.IsPending() {
30             if _, found := jobsMap[job.Queue]; !found {
31                 jobsMap[job.Queue] = util.NewPriorityQueue(ssn.JobOrderFn)
32             }
33             klog.V(5).Infof("Added Job <%s/%s> into Queue <%s>", job.Namespace, job.Name, job.Queue)
34             jobsMap[job.Queue].Push(job)
35         }
36     }
37 
38     klog.V(3).Infof("Try to enqueue PodGroup to %d Queues", len(jobsMap))
39 
40     // 遍历PodGroup,将PodGroup状态改为inqueue,并在ssn.Jobs里记录job
41     for {
42         if queues.Empty() {
43             break
44         }
45 
46         queue := queues.Pop().(*api.QueueInfo)
47 
48         // skip the Queue that has no pending job
49         jobs, found := jobsMap[queue.UID]
50         if !found || jobs.Empty() { // 如果当前队列不存在或者job为空,则遍历下个队列
51             continue
52         }
53         job := jobs.Pop().(*api.JobInfo)
54 
55         // 如果未设置最小资源或判定job可以入队,则对job进行处理:
56         // 1、对job执行插件的JobEnqueue处理
57         // 2、将PodGroup的状态改为inqueue
58         // 3、将job记录到ssn上
59         if job.PodGroup.Spec.MinResources == nil || ssn.JobEnqueueable(job) {
60             ssn.JobEnqueued(job)
61             job.PodGroup.Status.Phase = scheduling.PodGroupInqueue
62             ssn.Jobs[job.UID] = job
63         }
64 
65         // Added Queue back until no job in Queue.
66         queues.Push(queue)
67     }
68 }
 
调度周期完毕后,关闭会话时会更信PodGroup
 1 func closeSession(ssn *Session) {
 2     ju := NewJobUpdater(ssn)
 3     ju.UpdateAll() // 更新所有
 4 
 5     updateQueueStatus(ssn)
 6 
 7     ssn.Jobs = nil
 8     ssn.Nodes = nil
 9     ssn.RevocableNodes = nil
10     ssn.plugins = nil
11     ssn.eventHandlers = nil
12     ssn.jobOrderFns = nil
13     ssn.queueOrderFns = nil
14     ssn.clusterOrderFns = nil
15     ssn.NodeList = nil
16     ssn.TotalResource = nil
17 
18     klog.V(3).Infof("Close Session %v", ssn.UID)
19 }
20 
21 // updateJob update specified job
22 func (ju *JobUpdater) updateJob(index int) {
23     job := ju.jobQueue[index]
24     ssn := ju.ssn
25 
26     job.PodGroup.Status = jobStatus(ssn, job)
27     oldStatus, found := ssn.PodGroupOldState.Status[job.UID]
28     updatePGStatus := !found || isPodGroupStatusUpdated(job.PodGroup.Status, oldStatus)
29     updatePGAnnotations := ju.isJobAllocatedHyperNodeChanged(job)
30     if _, err := ssn.cache.UpdateJobStatus(job, updatePGStatus, updatePGAnnotations); err != nil {
31         klog.Errorf("Failed to update job <%s/%s>: %v",
32             job.Namespace, job.Name, err)
33     }
34 }
35 
36 // UpdateJobStatus update the status of job and its tasks.
37 func (sc *SchedulerCache) UpdateJobStatus(job *schedulingapi.JobInfo, updatePGStatus, updatePGAnnotations bool) (*schedulingapi.JobInfo, error) {
38     if updatePGStatus || updatePGAnnotations {
39         if updatePGAnnotations {
40             sc.updateJobAnnotations(job)
41         }
42         pg, err := sc.StatusUpdater.UpdatePodGroup(job.PodGroup)
43         if err != nil {
44             return nil, err
45         }
46         job.PodGroup = pg
47     }
48     sc.RecordJobStatusEvent(job, updatePGStatus)
49 
50     return job, nil
51 }

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年工业大吊扇厂家权威推荐榜:大型厂房通风降温设备源头企业综合实力与客户口碑深度解析

2025年工业大吊扇厂家权威推荐榜:大型厂房通风降温设备源头企业综合实力与客户口碑深度解析随着工业4.0时代的深入发展,大型厂房的通风降温需求日益凸显。工业大吊扇作为改善工作环境、提升生产效率的关键设备,其技…

【左扬精讲】SRE 别慌!我用 故障预测与诊断,性能评估与优化,资源分配与规划 讲概率与贝叶斯算法的实战应用,都是咱运维人能懂的话(含代码)

【左扬精讲】SRE 别慌!我用 "故障预测与诊断","性能评估与优化","资源分配与规划" 讲概率与贝叶斯算法的实战应用,都是咱运维人能懂的话(含代码)在 SRE 的运维工作中,不确定性是…

农经权报表生成小程序介绍

背景 根据农经权gdb数据中的DK、CBF、FBF、CBFJTCYB、CBJYQDJB,以上要素和表数据进行逻辑提取和处理,将数据写出到定制好的word模板中 输入:农经权gdb、word模板、输出目录 输出:每户的摸底调查表以承包方编码&…

【2025-10-16】移居香港

20:00假使做事要面面顾到,那就什么事都不能做了。——XX昨天聊到了我的一个高中同学移居香港。这已经是我们7个要好的高中同学中第3个往香港走的了。其实,我还知道有一个老表近期也要到香港去做劳工,听说好像花了好…

学校社团招新的题目(莫队+树状数组统计区间逆序对个数)(蒟蒻被薄纱QAQ)

先放题面: A. 签到题 题目描述 你是城市的顶级信息分析师,负责监管全城的信息高速公路——一条长达 n 个信息节点的“数据高速公路”。 每个信息节点有一个编号 a[i],表示信息的优先级: 编号越小,信息越重要; 编…

基于MATLAB的齿轮故障检测

一、系统架构设计 %% 主程序框架 clear; clc; close all;%% 参数设置 fs = 10000; % 采样频率 t = 0:1/fs:1; % 时间向量 fault_types = {healthy,crack,wear,broken}; num_samples = 10; % 每类样本数量%% …

Linux 中检测gz压缩文件是否损坏

Linux 中检测gz压缩文件是否损坏。001、[s20233040742@admin2 x_test]$ ls a.sh b.sh [s20233040742@admin2 x_test]$ seq 10 | gzip > a.txt.gz [s20233040742@admin2 x_test]$ echo "xxx" > b.txt.…

从静态图表到交互叙事:数据可视化的新范式与实现 - 实践

从静态图表到交互叙事:数据可视化的新范式与实现 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销

2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销在数字化营销浪潮中,信息流广告已成为企业获取流量、实现转化的重要渠道。随着算法技术的迭代和用户行为的变迁,信息流代运…

2025 年 PP 管厂家最新推荐榜:全面甄选优质 pp 风管、PP 喷淋塔等产品厂家,助力实验室场景精准选型

当前 PP 管市场虽供需活跃,但采购难题却让众多企业倍感困扰。部分厂家为追求利润,使用劣质原料生产,导致产品耐腐蚀性、抗老化性大幅下降,在使用中频繁出现破裂、渗漏问题,不仅造成经济损失,还带来安全隐患。同时…

基于MATLAB的无线传感器网络(WSN)仿真程序实现

一、系统架构设计 graph TD A[网络初始化] --> B[节点部署] B --> C[路由协议运行] C --> D[能量消耗计算] D --> E[性能评估] E --> F[可视化展示]二、核心代码实现 1. 网络参数初始化 %% 系统参数设置…

NMAP扫描

NMAP 扫描-sT — TCP connect 扫描 使用操作系统的 connect() 建立完整 TCP 连接(非特权用户可用)。容易被检测/记录,但兼容性最好。-sS — SYN(半开)扫描(又称 stealth) 发送 SYN 后根据返回包判断端口状态(…

MyEMS:衔接 “双控” 政策与企业实践的开源能源管理利器

在 “碳达峰、碳中和” 战略目标引领下,能源消费总量和强度双控制度(以下简称 “双控” 政策)已成为我国推动能源结构优化、倒逼企业绿色转型的核心抓手。然而,不少企业在落实 “双控” 要求时,面临着能耗数据碎片…

权限维持-Windows权限维持

权限维持-Windows权限维持 1.注册表权限维持Get-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run | >> Format-List可以看到这里有个flag.bat执行文件,我们去文件资源管理器里面看看…

2025 电动轮椅厂家最新推荐榜:深度解析智能轻便 / 长续航 / 高安全国产优质品牌核心优势

随着人口老龄化加剧与残障人士出行需求升级,电动轮椅市场规模持续扩张,但行业乱象也随之凸显。市场上产品质量两极分化,部分产品宣称 “轻便折叠” 却因材质劣质导致机身笨重,标榜 “安全可靠” 却缺乏核心防护技术…

2025年信息流代运营服务商权威推荐榜单:专业投放策略与高效转化服务口碑之选

2025年信息流代运营服务商权威推荐榜单:专业投放策略与高效转化服务口碑之选在数字营销快速演进的今天,信息流广告已成为企业获取流量、实现转化的重要渠道。随着算法技术的不断升级和用户行为的日益复杂,信息流代运…

一些框架

一些框架1 OpenMCT:一套NASA阿姆斯研究中心开源Mission Control框架,专门帮你在浏览器或手机里展示、分析各种遥测数据

1017

商业秘密权可以对软件的技术信息和经营信息进行保护 专利申请 注册商标专利权不看谁先完成 也不看谁先使用 看谁先申请 专利权只能由一方获得外模式---视图 模式---基本表 内模式---存储文件

2025 建筑工程施工总包公司最新推荐榜:聚焦质量管控与新锐势力,优质企业权威甄选

当前建筑工程行业正处于高质量发展转型关键期,市场对工程质量、环保标准与管理效率的要求持续升级,但行业内仍存在资质参差不齐、工期延误、隐性成本突出等问题,让业主与开发商在选择施工总包企业时面临诸多困扰。尤…

2025 广州人力资源/派遣/外包/劳务外包/人事代理/推荐榜:精典人才创新 5 星领跑,适配招聘 / 测评 / 培训全场景企业需求

随着广州企业对 “精准人才匹配 + 科学人才评估 + 持续能力提升” 需求升级,专业人力资源服务成为优化团队、降本增效的关键。结合服务完整性、行业适配度、响应效率与用户反馈,2025 年广州人力资源推荐榜发布,广州…