不間斷的從磁盤上線隊(duì)列中取出磁盤插入事件,并根據(jù)處理結(jié)果判斷取出的磁盤插入事件所對(duì)應(yīng)的磁盤是否進(jìn)行數(shù)據(jù)塊的元數(shù)據(jù)信息的上報(bào);
[0075]磁盤助手單元205,用于以異步方式對(duì)該磁盤插入事件對(duì)應(yīng)的磁盤進(jìn)行上線處理,并將成功或失敗的處理結(jié)果返回給存儲(chǔ)管理層單元204 ;
[0076]磁盤任務(wù)管理器單元206,用于接收磁盤插入事件,并將接收到磁盤插入事件封裝成磁盤上線任務(wù),再將磁盤上線任務(wù)緩存到調(diào)度隊(duì)列,其中,所述數(shù)據(jù)節(jié)點(diǎn)服務(wù)器中所有槽位上的磁盤上線任務(wù)都緩存在同一調(diào)度隊(duì)列中;
[0077]磁盤任務(wù)調(diào)度器單元207,用于調(diào)度線程池單元208中的空閑線程與磁盤任務(wù)管理器單元206中的調(diào)度隊(duì)列的磁盤上線任務(wù);
[0078]線程池單元208,用于存儲(chǔ)磁盤上下線任務(wù)的所有空閑線程;
[0079]任務(wù)執(zhí)行模塊單元209,用于接收并處理磁盤上線任務(wù),并將磁盤上線任務(wù)處理結(jié)果反饋給磁盤助手單元205。
[0080]較佳地,等待就緒隊(duì)列,位于存儲(chǔ)管理層單元204,用于緩存包括磁盤所屬槽位和磁盤類別的磁盤插拔事件;
[0081]磁盤上線隊(duì)列,位于存儲(chǔ)管理層單元204,用于緩存附加有上線處理的狀態(tài)的磁盤插拔事件;
[0082]調(diào)度隊(duì)列,位于磁盤任務(wù)管理器單元206,用于緩存磁盤上線任務(wù)。
[0083]綜上,數(shù)據(jù)塊上報(bào)處理模塊102中各單元的處理流程,包括:
[0084]檢測(cè)磁盤插拔事件單元201預(yù)先配置有操作系統(tǒng),該操作系統(tǒng)可以實(shí)時(shí)檢測(cè)數(shù)據(jù)節(jié)點(diǎn)服務(wù)器是否發(fā)生磁盤插拔事件,當(dāng)發(fā)生磁盤插拔事件時(shí),通過(guò)該操作系統(tǒng)內(nèi)核的核心驅(qū)動(dòng)程序調(diào)用熱插拔腳本,將磁盤插拔事件發(fā)送給事件通知客戶端單元202。
[0085]事件通知客戶端單元202將磁盤插拔事件類型和磁盤槽位等磁盤插拔信息實(shí)時(shí)發(fā)送給事件監(jiān)聽(tīng)服務(wù)端單元203。事件監(jiān)聽(tīng)服務(wù)端單元203將獲取的磁盤插拔事件信息緩存到等待就緒隊(duì)列的末尾處,其中,所有槽位對(duì)應(yīng)的磁盤插拔事件都緩存在同一等待就緒隊(duì)列中。
[0086]對(duì)于磁盤插入事件,存儲(chǔ)管理層單元204對(duì)等待就緒隊(duì)列線程實(shí)時(shí)輪詢檢測(cè),取出位于隊(duì)列頭部的磁盤插入事件,也就是,等待就緒隊(duì)列中取出的磁盤插入事件將被刪除。與此同時(shí),將取出的磁盤插入事件緩存到磁盤上線隊(duì)列,并將緩存到磁盤上線隊(duì)列中的磁盤插入事件標(biāo)記為未處理。存儲(chǔ)管理層單元204通過(guò)線程實(shí)時(shí)輪詢檢測(cè),并從磁盤上線隊(duì)列中提取磁盤插入事件,將提取的磁盤插入事件通知磁盤助手單元205。其中,所述線程實(shí)時(shí)輪詢檢測(cè),并取出磁盤插拔事件,是指在存儲(chǔ)管理層單元204中有單獨(dú)的線程專門處理磁盤插拔事件,并不斷檢查等待就緒隊(duì)列。當(dāng)發(fā)現(xiàn)等待就緒隊(duì)列中有需要處理的事件時(shí),則逐個(gè)取出進(jìn)行處理。
[0087]磁盤助手單元205接收到磁盤插入事件通知后,將以異步方式對(duì)該磁盤插入事件對(duì)應(yīng)的磁盤進(jìn)行上線處理。其中,磁盤助手單元205采用的異步處理方式是為優(yōu)化磁盤上線任務(wù)處理速度,即磁盤助手單元205可以發(fā)起多個(gè)磁盤任務(wù),無(wú)需等待發(fā)起的磁盤上線任務(wù)處理結(jié)束,當(dāng)磁盤上線任務(wù)處理結(jié)束后,會(huì)主動(dòng)通知磁盤助手單元205。
[0088]磁盤插入事件對(duì)應(yīng)的磁盤進(jìn)行上線處理具體的流程為:磁盤助手單元205將接收到磁盤插入事件投遞到磁盤任務(wù)管理器單元206,磁盤任務(wù)管理器單元206將接收到的磁盤插入事件封裝成磁盤上線任務(wù),并將磁盤上線任務(wù)緩存到磁盤任務(wù)管理器單元206的調(diào)度隊(duì)列中。與此同時(shí),磁盤任務(wù)調(diào)度器單元207的線程實(shí)時(shí)對(duì)調(diào)度隊(duì)列中磁盤上線任務(wù)輪詢檢測(cè),如果調(diào)度隊(duì)列中有磁盤上線任務(wù),則磁盤任務(wù)調(diào)度器單元207從線程池單元208中取出空閑線程,并從調(diào)度隊(duì)列中取出未執(zhí)行的槽位上的磁盤上線任務(wù),將磁盤上線任務(wù)投遞到任務(wù)執(zhí)行模塊單元209。任務(wù)執(zhí)行模塊單元209將對(duì)投遞過(guò)來(lái)的磁盤上線任務(wù)進(jìn)行處理。當(dāng)磁盤上線任務(wù)處理完成后,任務(wù)執(zhí)行模塊單元209會(huì)將磁盤上線任務(wù)處理結(jié)果附加到磁盤插入事件中,并將磁盤插入事件發(fā)送給磁盤助手單元205。磁盤助手單元205將更新磁盤上線隊(duì)列。存儲(chǔ)管理層單元204實(shí)時(shí)從磁盤上線隊(duì)列中輪詢提取磁盤插入事件,與此同時(shí),從上線隊(duì)列中刪除提取的磁盤插入事件。
[0089]其中,磁盤助手單元205返回的磁盤插拔事件包括,磁盤插拔事件的槽位以及磁盤上線任務(wù)處理結(jié)果(即成功還是失敗)。
[0090]較佳地,磁盤助手單元205,主要用于磁盤上下線的處理,比如掛載、格式化、校驗(yàn)等底層操作。
[0091]對(duì)于磁盤拔出事件,存儲(chǔ)管理層單元204在對(duì)等待就緒隊(duì)列進(jìn)行去重處理后,即先刪除等待就緒隊(duì)列中該槽位的磁盤插拔事件,包括磁盤插入事件和磁盤拔出事件,然后將本次磁盤拔出事件放入等待就緒隊(duì)列的隊(duì)尾,以消除所述等待就緒隊(duì)列中磁盤拔出事件所屬槽位之前沒(méi)必要再執(zhí)行的重復(fù)的磁盤插拔事件。
[0092]存儲(chǔ)管理層單元204對(duì)去重后的等待就緒隊(duì)列進(jìn)行實(shí)時(shí)輪詢檢測(cè),取出位于隊(duì)列頭部的磁盤拔出事件,也就是,等待就緒隊(duì)列中取出的磁盤拔出事件將被刪除。
[0093]具體地,磁盤拔出事件發(fā)生時(shí),存儲(chǔ)管理層單元204對(duì)等待就緒隊(duì)列進(jìn)行去重處理,而磁盤插入事件發(fā)生時(shí),并沒(méi)有對(duì)等待就緒隊(duì)列進(jìn)行去重處理。其主要原因是,在數(shù)據(jù)節(jié)點(diǎn)服務(wù)器啟動(dòng)時(shí),數(shù)據(jù)節(jié)點(diǎn)服務(wù)器上的磁盤都是不可用的狀態(tài),首先,對(duì)每個(gè)磁盤做磁盤上線處理,因此在等待就緒隊(duì)列中,每個(gè)槽位第一個(gè)磁盤插拔事件都是磁盤插入事件,然后才是磁盤拔出事件,而且磁盤插入事件和磁盤拔出事件都是間隔出現(xiàn)。在磁盤拔出事件時(shí)對(duì)等待就緒隊(duì)列進(jìn)行去重處理,即將等待就緒隊(duì)列中該槽位的磁盤插拔事件(包括磁盤插入事件和磁盤拔出事件)都刪除了,所以下一次的磁盤插入事件到來(lái)時(shí),在等待就緒隊(duì)列中肯定不會(huì)存在同槽位的磁盤插入事件。因此,磁盤插入事件發(fā)生時(shí),不需要對(duì)等待就緒隊(duì)列進(jìn)行去重處理。
[0094]下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例中各個(gè)模塊的處理流程進(jìn)行介紹。
[0095]參見(jiàn)圖3,本發(fā)明實(shí)施例對(duì)磁盤插入事件的具體實(shí)施步驟包括:
[0096]S301、磁盤插拔處理模塊101中的事件通知客戶端單元202將磁盤插拔事件類型和磁盤槽位等磁盤插拔信息實(shí)時(shí)發(fā)送給磁盤插拔處理模塊101中的事件監(jiān)聽(tīng)服務(wù)端單元 203 ;
[0097]S302、事件監(jiān)聽(tīng)服務(wù)端單元203將獲取的磁盤插拔事件信息按時(shí)間先后順序緩存到等待就緒隊(duì)列的隊(duì)尾;
[0098]S303、磁盤插拔處理模塊101中的存儲(chǔ)管理層單元204對(duì)等待就緒隊(duì)列實(shí)時(shí)輪詢檢測(cè),取出位于隊(duì)列頭部的磁盤插入事件,也就是,等待就緒隊(duì)列中取出的磁盤插入事件將被刪除,與此同時(shí),將取出的磁盤插入事件緩存到磁盤上線隊(duì)列,并將緩存到磁盤上線隊(duì)列中的磁盤插入事件標(biāo)記為未處理;
[0099]S304、存儲(chǔ)管理層單元204通過(guò)線程實(shí)時(shí)輪詢檢測(cè),并從磁盤上線隊(duì)列中提取磁盤插入事件,將提取的磁盤插入事件通知磁盤插拔處理模塊101中的磁盤助手單元205 ;
[0100]S305、磁盤助手單元205接收到磁盤插入事件通知后,將以異步方式將接收到磁盤插入事件投遞到磁盤插拔處理模塊101中的磁盤任務(wù)管理器單元206 ;
[0101]S306、磁盤任務(wù)管理器單元206將接收到的磁盤插入事件封裝成磁盤上線任務(wù),并將磁盤上線任務(wù)緩存到磁盤任務(wù)管理器單元206的調(diào)度隊(duì)列中;
[0102]S307、磁盤插拔處理模塊101中的磁盤任務(wù)調(diào)度器單元207的線程對(duì)磁盤任務(wù)管理器單元206的調(diào)度隊(duì)列實(shí)時(shí)輪詢檢測(cè),如果調(diào)度隊(duì)列中有磁盤上線任務(wù),則磁盤任務(wù)調(diào)度器單元207從磁盤插拔處理模塊101中的線程池單元208中取出空閑線程,并從調(diào)度隊(duì)列中取出未執(zhí)行的槽位上的磁盤上線任務(wù),通過(guò)每個(gè)線程將一個(gè)磁盤上線任務(wù)投遞到磁盤插拔處理模塊101中的任務(wù)執(zhí)行模塊單元209,任務(wù)執(zhí)行模塊單元209將對(duì)投遞過(guò)來(lái)的磁盤上線任務(wù)進(jìn)行處理;
[0103]S