本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體涉及一種集群文件系統(tǒng)及分布式文件系統(tǒng)多客戶端文件控制方法。
背景技術(shù):
進(jìn)入信息化時(shí)代后,隨著技術(shù)的不斷發(fā)展,在各行各業(yè)中,對(duì)于存儲(chǔ)的需求呈幾何趨勢(shì)遞增,這就導(dǎo)致常規(guī)的本地文件系統(tǒng)無法滿足業(yè)務(wù)的需求。于是,在應(yīng)用需求的刺激下,各種不同類型的分布式文件系統(tǒng)應(yīng)運(yùn)而生了,如ceph、lustre、gpfs、googlefs等。
對(duì)于分布式文件系統(tǒng)而言,由于其客戶端分布在不同的物理機(jī)器上,因此不同的客戶端對(duì)于文件系統(tǒng)元數(shù)據(jù)和數(shù)據(jù)的操作是相互不可見的。常見的客戶端保護(hù)nfs、fuse、cifs等。對(duì)于有緩存的客戶端來說,客戶端在創(chuàng)建文件后會(huì)持有文件的引用計(jì)數(shù),這時(shí)候如果其他的客戶端去刪除該文件,由于文件的引用計(jì)數(shù)被其他客戶端所持有,則文件刪除不成功,空間不釋放。
因此一種新型的集群文件系統(tǒng)及分布式文件系統(tǒng)多客戶端文件控制方法是有必要的。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案如下:
本發(fā)明提供一種集群文件系統(tǒng),包括分布式文件系統(tǒng)以及掛載到集群文件系統(tǒng)的多個(gè)客戶端,分布式文件系統(tǒng)中添加有回調(diào)注冊(cè)函數(shù),分別提供對(duì)回調(diào)函數(shù)的處理,多個(gè)客戶端分別通過接口向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù),在客戶端執(zhí)行文件操作后,分布式文件系統(tǒng)收到請(qǐng)求,處理后,執(zhí)行回調(diào)刪除函數(shù)隊(duì)列中所有的回調(diào)函數(shù),對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù),更新文件的屬性信息到自己的緩存中。
進(jìn)一步的,分布式文件系統(tǒng)中添加的回調(diào)注冊(cè)函數(shù)通過聲明函數(shù)指針、聲明一個(gè)包含該函數(shù)指針的結(jié)構(gòu)體、定義回調(diào)函數(shù)的注冊(cè)接口來實(shí)現(xiàn)。
進(jìn)一步的,多個(gè)客戶端分別通過接口向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù)通過聲明一個(gè)函數(shù)指針、定義實(shí)際執(zhí)行的回調(diào)函數(shù)、將函數(shù)指針初始化、通過接口函數(shù)向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù)來實(shí)現(xiàn)。
進(jìn)一步的,對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù)為file_op_update。
進(jìn)一步的,客戶端為nfs客戶端、cifs客戶端、fuse客戶端、nfs-ganesha客戶端之一。
此外本發(fā)明還提供一種分布式文件系統(tǒng)多客戶端文件控制的方法,包括以下步驟:
ss1:在分布式文件系統(tǒng)中添加回調(diào)注冊(cè)函數(shù),分別提供對(duì)回調(diào)函數(shù)的處理;
ss2:客戶端分別通過接口向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù);
ss3:客戶端執(zhí)行文件操作,分布式文件系統(tǒng)收到請(qǐng)求,處理后,執(zhí)行回調(diào)刪除函數(shù)隊(duì)列中所有的回調(diào)函數(shù),對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù),更新文件的屬性信息到自己的緩存中。
進(jìn)一步的,步驟ss1具體包括以下步驟:
1)聲明函數(shù)指針client_ino_callback_t
2)聲明函數(shù)指針client_dentry_callback_t
3)聲明函數(shù)指針client_remount_callback_t
4)聲明函數(shù)指針client_getgroups_callback_t
5)聲明一個(gè)結(jié)構(gòu)體,包含1)-4)四個(gè)函數(shù)指針
6)定義回調(diào)函數(shù)的注冊(cè)接口。
進(jìn)一步的,步驟ss2具體包括以下步驟:
1)聲明一個(gè)函數(shù)指針file_op_callback
2)定義實(shí)際執(zhí)行的回調(diào)函數(shù)file_op_update
3)將函數(shù)指針args初始化為file_op_update
4)然后通過接口函數(shù)nfs_reg_cb向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù)。
進(jìn)一步的,步驟ss3中對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù)為file_op_update。
進(jìn)一步的,客戶端可以為nfs客戶端、cifs客戶端、fuse客戶端、nfs-ganesha客戶端之一。
通過本發(fā)明的集群文件系統(tǒng)以及分布式文件系統(tǒng)的多客戶端的文件控制方法,分布式文件系統(tǒng)提供回調(diào)注冊(cè)函數(shù),客戶端想分布式文件系統(tǒng)注冊(cè)自己的回調(diào)函數(shù),當(dāng)其他客戶端執(zhí)行操作時(shí),會(huì)回調(diào)執(zhí)行所有注冊(cè)回調(diào)的客戶端函數(shù)。這樣完成了分布式文件系統(tǒng)對(duì)多客戶端下文件進(jìn)行精確的控制。
附圖說明
圖1示出本發(fā)明集群文件系統(tǒng)結(jié)構(gòu)框圖。
圖2示出本發(fā)明實(shí)現(xiàn)分布式文件系統(tǒng)多客戶端文件控制的方法流程圖。
具體實(shí)施方式
以下結(jié)合說明書附圖及具體實(shí)施例進(jìn)一步說明本發(fā)明的技術(shù)方案。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提出了一種新型的集群文件系統(tǒng)及分布式文件系統(tǒng)多客戶端文件控制方法,本發(fā)明的目的是實(shí)現(xiàn)分布式文件系統(tǒng)對(duì)多客戶端下文件進(jìn)行精確的控制。
本發(fā)明的特征是在分布式文件系統(tǒng)提供回調(diào)注冊(cè)函數(shù),客戶端向分布式文件系統(tǒng)注冊(cè)自己的回調(diào)函數(shù),當(dāng)其他客戶端執(zhí)行操作時(shí),會(huì)回調(diào)執(zhí)行所有注冊(cè)回調(diào)的客戶端函數(shù)。
具體實(shí)現(xiàn)過程如下:
圖1示出本發(fā)明集群文件系統(tǒng)結(jié)構(gòu)框圖。
如圖1所示,根據(jù)本發(fā)明實(shí)施例的集群文件系統(tǒng),包括:分布式文件系統(tǒng)以及掛載到集群文件系統(tǒng)的多個(gè)客戶端,分布式文件系統(tǒng)中添加有回調(diào)注冊(cè)函數(shù),分別提供對(duì)inode、dentry、mount、groups回調(diào)函數(shù)的處理,多個(gè)客戶端分別通過接口向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù),在客戶端執(zhí)行文件操作后,分布式文件系統(tǒng)收到請(qǐng)求,處理后,執(zhí)行回調(diào)刪除函數(shù)隊(duì)列中所有的回調(diào)函數(shù),對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù),更新文件的屬性信息到自己的緩存中。
在本發(fā)明的一個(gè)實(shí)施例中,客戶端可以為nfs客戶端、cifs客戶端、fuse客戶端、nfs-ganesha客戶端等。
在本發(fā)明的一個(gè)實(shí)施例中,分布式文件系統(tǒng)中添加的回調(diào)注冊(cè)函數(shù)通過聲明函數(shù)指針、聲明一個(gè)包含該函數(shù)指針的結(jié)構(gòu)體、定義回調(diào)函數(shù)的注冊(cè)接口來實(shí)現(xiàn)。
在本發(fā)明的一個(gè)實(shí)施例中,多個(gè)客戶端分別通過接口向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù)通過聲明一個(gè)函數(shù)指針、定義實(shí)際執(zhí)行的回調(diào)函數(shù)、將函數(shù)指針初始化、通過接口函數(shù)向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù)來實(shí)現(xiàn)。
在本發(fā)明的一個(gè)實(shí)施例中,對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù)為file_op_update。
圖2為本發(fā)明一個(gè)實(shí)施例的用于實(shí)現(xiàn)上述集群文件系統(tǒng)中分布式文件系統(tǒng)多客戶端文件控制的方法流程圖。
如圖2所示,根據(jù)本發(fā)明實(shí)施例的實(shí)現(xiàn)分布式文件系統(tǒng)多客戶端文件控制方法,包括:
ss1:在分布式文件系統(tǒng)中添加回調(diào)注冊(cè)函數(shù),分別提供對(duì)回調(diào)函數(shù)的處理;
ss2:客戶端分別通過接口向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù);
ss3:客戶端執(zhí)行文件操作,分布式文件系統(tǒng)收到請(qǐng)求,處理后,執(zhí)行回調(diào)刪除函數(shù)隊(duì)列中所有的回調(diào)函數(shù),對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù),更新文件的屬性信息到自己的緩存中。
在本發(fā)明的一個(gè)實(shí)施例中,客戶端可以為nfs客戶端、cifs客戶端、fuse客戶端、nfs-ganesha客戶端等。
在本發(fā)明的一個(gè)實(shí)施例中,步驟ss1具體包括以下步驟:
1)聲明函數(shù)指針client_ino_callback_t
typedefvoid(*client_ino_callback_t)(void*arg1,void*arg2,void*arg3,void*arg4);
//聲明了一個(gè)指針client_ino_callback_t,該指針指向參數(shù)為argl、arg2、arg3、arg4,返回值為void的函數(shù)。
2)聲明函數(shù)指針client_dentry_callback_t
typedefvoid(*client_dentry_callback_t)(void*arg1,void*arg2,void*arg3,void*arg4);
//聲明了一個(gè)指針client_dentry_callback_t,該指針指向參數(shù)為arg1、arg2、arg3、arg4,返回值為void的函數(shù)。
3)聲明函數(shù)指針client_remount_callback_t
typedefvoid(*client_remount_callback_t)(void*arg1,void*arg2,void*arg3,void*arg4);
//聲明了一個(gè)指針client_remount_callback_t,該指針指向參數(shù)為arg1、arg2、arg3、arg4,返回值為void的函數(shù)。
4)聲明函數(shù)指針client_getgroups_callback_t
typedefvoid(*client_getgroups_callback_t)(void*arg1,void*arg2,void*arg3,void*arg4);
//聲明了一個(gè)指針client_getgroups_callback_t,該指針指向參數(shù)為arg1、arg2、arg3、arg4,返回值為void的函數(shù)。
5)聲明一個(gè)結(jié)構(gòu)體,包含1)-4)四個(gè)函數(shù)指針
6)定義回調(diào)函數(shù)的注冊(cè)接口
在本發(fā)明的一個(gè)實(shí)施例中,步驟ss2具體包括以下步驟:
1)聲明一個(gè)函數(shù)指針file_op_callback
typedefvoid(*file_op_callback)(void*argl,void*arg2,void*arg3,void*arg4);
2)定義實(shí)際執(zhí)行的回調(diào)函數(shù)file_op_update
voidfile_op_update(void*arg1,void*arg2,void*arg3,void*arg4){
update_file_attrs(arg1,arg2,arg3,arg4);
}
//實(shí)際執(zhí)行的操作,即更新文件的操作
3)將函數(shù)指針args初始化為file_op_update
file_op_callbackargs=file_op_update;//
4)然后通過接口函數(shù)nfs_reg_cb向文件系統(tǒng)注冊(cè)自己定義的回調(diào)函數(shù),執(zhí)行nfs_reg_cb(cmount,args);
在本發(fā)明的一個(gè)實(shí)施例中,步驟ss3中對(duì)應(yīng)的客戶端執(zhí)行所注冊(cè)的函數(shù)為file_op_update。
本發(fā)明通過注冊(cè)回調(diào)函數(shù)的方式,當(dāng)一個(gè)客戶端操作分布式文件系統(tǒng)的文件時(shí),所有已經(jīng)向文件系統(tǒng)注冊(cè)的客戶端都會(huì)收到該文件的操作,進(jìn)而執(zhí)行回調(diào)函數(shù),執(zhí)行對(duì)應(yīng)的操作。從而達(dá)到多客戶端的控制。
本專利實(shí)現(xiàn)簡(jiǎn)單,能夠很好的對(duì)文件的操作進(jìn)行控制。
盡管在裝置的上下文中已描述了一些方面,但明顯的是這些方面也表示對(duì)應(yīng)方法的描述,其中塊或設(shè)備與方法步驟或方法步驟的特征相對(duì)應(yīng)。類似地,在方法步驟的上下文中所描述的各方面也表示對(duì)應(yīng)的塊或項(xiàng)目或者對(duì)應(yīng)裝置的特征的描述??梢酝ㄟ^(或使用)如微處理器、可編程計(jì)算機(jī)、或電子電路之類的硬件裝置來執(zhí)行方法步驟中的一些或所有??梢酝ㄟ^此類裝置來執(zhí)行最重要的方法步驟中的某一個(gè)或多個(gè)。
所述實(shí)現(xiàn)可以采用硬件或采用軟件或可以使用例如軟盤、dvd、藍(lán)光、cd、rom、prom、eprom、eeprom、或閃存之類的具有被存儲(chǔ)在其上的電子可讀控制信號(hào)的數(shù)字存儲(chǔ)介質(zhì)來執(zhí)行,所述電子可讀控制信號(hào)與可編程計(jì)算機(jī)系統(tǒng)配合(或能夠與其配合)以使得執(zhí)行相應(yīng)的方法??梢蕴峁┚哂须娮涌勺x控制信號(hào)的數(shù)據(jù)載體,所述電子可讀控制信號(hào)能夠與可編程計(jì)算機(jī)系統(tǒng)配合以使得執(zhí)行本文所描述的方法。
所述實(shí)現(xiàn)還可以采用具有程序代碼的計(jì)算機(jī)程序產(chǎn)品的形式,當(dāng)計(jì)算機(jī)程序產(chǎn)品在計(jì)算機(jī)上運(yùn)行時(shí),程序代碼進(jìn)行操作以執(zhí)行該方法??梢栽跈C(jī)器可讀載體上存儲(chǔ)程序代碼。
以上所描述的僅是說明性,并且要理解的是,本文所描述的布置和細(xì)節(jié)的修改和變化對(duì)于本領(lǐng)域技術(shù)人員而言將是明顯的。因此,意在僅由所附權(quán)利要求的范圍而不是由通過以上描述和解釋的方式所呈現(xiàn)的特定細(xì)節(jié)來限制。