二 Hera排程系統初始化 生成和清理版本

2021-09-25 11:20:14 字數 3003 閱讀 4769

一、event事件、listener、dispatcher

一、初始化 listener、dispatcher.jobhandlers

初始化 不同任務型別的listener

獲取前2天到當前的 所有action_id的詳細資訊 (預設配置2天)

將所有的 action_id 新增進 dispatcher.jobhandlers

將action_id列表 放入記憶體中 heraactionmap

// master

public

void

init

(mastercontext mastercontext));

});

二、生成版本 generatebatchaction

獲取hera_job所有的job資訊

actionmap 初始化為 heraactionmap (兩天內的所有action_id)

將定時任務生成版本 generateschedulejobaction (解析quartz表示式)

如果 hera_job列表裡排程型別是 定時排程的job,則解析quartz表示式,生成action_id版本

生成的action_id版本,如果存在資料表hera_action中,去update操作,否則insert

生成的action_id版本,往actionmap裡 新增上新增的版本

遍歷所有依賴任務 單個生成版本 generatedependjobaction

如果該任務的依賴任務之前沒有處理過,那麼遞迴呼叫generatedependjobaction

直到該任務的所有依賴任務都處理過,優先找到該任務的所有依賴任務中版本數最少的

如果依賴任務中,版本數相同,找去時間較大的那個依賴 (action_id更大的)

該依賴任務的action_id, 是根據 所有依賴任務中 版本數最少 且 時間最大的 那個生成的

該依賴任務的 依賴action_id列表,是依賴任務中的所有版本 選乙個時間最接近 step4生成的 action_id

生成action_id版本,往actionmap裡 新增上新增的版本

如果執行的時間 在23點之前, heraactionmap = actionmap (更新快取在記憶體中的 action_id列表)

dispatcher.jobhandlers 新增上 新增的 action_id對應的 jobhandler

如果生成的版本 大於當前時間,傳送更新版本事件 herajobmaintenanceevent

// master

private

boolean

generateaction

(boolean issingle, integer jobid)

long nowaction = long.

parselong

(currstring)

; map

actionmap =

newhashmap

<

>

(heraactionmap.

size()

);list

joblist =

newarraylist

<

>()

;//批量 生成版本

//step 1. 獲取hera_job所有的job資訊

joblist = mastercontext.

getherajobservice()

.getall()

; string crondate = actionutil.

getactionversionprefix

(now)

; map

> idmap =

newhashmap

<

>

(joblist.

size()

);map

jobmap =

newhashmap

<

>

(joblist.

size()

);//step 2. 定時任務生成版本 (解析quartz表示式)

generateschedulejobaction

(joblist, crondate, actionmap, nowaction, idmap, jobmap)

;for

(map.entry

entry : jobmap.

entryset()

)if(executehour < actionutil.action_create_max_hour)

dispatcher dispatcher = mastercontext.

getdispatcher()

;if(dispatcher != null)}}

} schedulelog.

info

("[單個任務:{},任務id:{}]generate action success"

, issingle, jobid)

;return

true;}

}catch

(exception e)

finally

return

false

;}

三、清理版本 clearinvalidaction

移除15分鐘前的 定時任務版本

移除大於當前時間,並且不在heraactionmap中的版本(資料表hera_action刪除、dispatcher.jobhandlers也刪除對應的jobhandler)

// master

private

void

clearinvalidaction()

else

if(aid >= currdate && aid < nextday)}}

);}}

linux排程器原始碼分析 初始化 二

上期文章linux排程器原始碼分析 概述 一 已經把排程器相關的資料結構介紹了一遍,本篇著重通過 說明排程器在系統啟動初始化階段是如何初始化和工作的。通過上期文章我們知道,在多核cpu和smp系統中,每個cpu 多核cou中的每個核 都有自己的struct rq佇列,而rq佇列中又有著自己的stru...

linux排程器原始碼分析 初始化 二

上期文章linux排程器原始碼分析 概述 一 已經把排程器相關的資料結構介紹了一遍,本篇著重通過 說明排程器在系統啟動初始化階段是如何初始化和工作的。通過上期文章我們知道,在多核cpu和smp系統中,每個cpu 多核cou中的每個核 都有自己的struct rq佇列,而rq佇列中又有著自己的stru...

SRIO系統初始化過程和路由配置

qq群 852283276 b站 主頁 rapidio規範 rapidio rev 2.2 specification 書籍 rapidio the embedded system interconnect 系列部落格srio學習 系列部落格rapidio 還介紹了tsi721 xilinx zyn...