一種事件通知方法、監(jiān)聽(tīng)器的處理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種事件通知方法、監(jiān)聽(tīng)器的處理方法及
目.0
【背景技術(shù)】
[0002]通知(Notify)是一種文件系統(tǒng)的變化通知機(jī)制。通過(guò)該機(jī)制,如文件增加、刪除等事件可以立刻讓用戶態(tài)得知。服務(wù)器信息塊協(xié)議版本2 (英文:Server Message BlockProtocol Vers1n 2,簡(jiǎn)稱:SMB2.0)中定義了客戶端(英文:Client Agent,簡(jiǎn)稱:CA)和文件服務(wù)器之間監(jiān)聽(tīng)請(qǐng)求和響應(yīng)消息。CA發(fā)送監(jiān)聽(tīng)消息去修改目錄/文件的監(jiān)聽(tīng)類型,同時(shí)可以設(shè)置多個(gè)監(jiān)聽(tīng)掩碼。當(dāng)文件服務(wù)器中被監(jiān)控的目錄/文件有修改操作的時(shí)候,并且和監(jiān)聽(tīng)掩碼匹配,服務(wù)器會(huì)把操作事件通過(guò)監(jiān)聽(tīng)響應(yīng)消息發(fā)送給CA。
[0003]現(xiàn)有技術(shù)提供的創(chuàng)建監(jiān)聽(tīng)器的流程請(qǐng)參考圖1a所示。該創(chuàng)建流程包括:用戶通過(guò)協(xié)議發(fā)送增加監(jiān)聽(tīng)器(watch)的消息給CA,該消息中攜帶監(jiān)聽(tīng)的目錄/文件。CA獲取監(jiān)聽(tīng)的目錄/文件的標(biāo)識(shí)(id)。CA向元數(shù)據(jù)服務(wù)器(英文:Metadata Service,簡(jiǎn)稱:MDS)發(fā)送增加監(jiān)聽(tīng)器的消息,該消息中除了攜帶監(jiān)聽(tīng)的目錄/文件的標(biāo)識(shí)之外,還攜帶CA的標(biāo)識(shí)以及監(jiān)聽(tīng)掩碼(mask)。其中,監(jiān)聽(tīng)掩碼表示監(jiān)聽(tīng)的事件類型,例如刪除事件、創(chuàng)建事件的。MDS在該監(jiān)聽(tīng)的目錄/文件的節(jié)點(diǎn)(Inode)信息中創(chuàng)建監(jiān)聽(tīng)器。然后MDS向CA返回創(chuàng)建成功的消息。CA再回調(diào)協(xié)議接口向用戶返回創(chuàng)建成功的消息。其中,在圖1a中,CA(1,2,3)表示多個(gè)CA的處理流程相同。
[0004]接下來(lái)請(qǐng)參考圖1b所示,為現(xiàn)有技術(shù)中監(jiān)聽(tīng)事件通知的流程示意圖。具體來(lái)說(shuō),當(dāng)采用如圖1a所示的方法在MDS注冊(cè)了監(jiān)聽(tīng)器之后,MDS對(duì)監(jiān)聽(tīng)的目錄/文件進(jìn)行監(jiān)聽(tīng)。當(dāng)監(jiān)聽(tīng)的目錄/文件發(fā)生了監(jiān)聽(tīng)掩碼所代表的事件變化時(shí),MDS就遍歷該目錄/文件的節(jié)點(diǎn)信息中的所有CA的監(jiān)聽(tīng)器,假設(shè)該所有的CA為CA2,那么然后向CA2發(fā)送事件變化通知。CA2回調(diào)協(xié)議接口把事件變化通知發(fā)送給用戶。
[0005]然而,上述方法在設(shè)置有目錄樹(shù)的情況下,因?yàn)樾枰O(jiān)控指定目錄下的所有文件和遞歸目錄下的所有文件,所以會(huì)存在這樣的問(wèn)題:當(dāng)目錄樹(shù)中的某個(gè)目錄/文件有變化時(shí),就要回溯各級(jí)父目錄,經(jīng)多次路由才能回溯到注冊(cè)了監(jiān)聽(tīng)器的父目錄。舉例來(lái)說(shuō),請(qǐng)參考圖2所示,假設(shè)根目錄(Dirl)的節(jié)點(diǎn)(Inodel)信息中,CA注冊(cè)了一個(gè)監(jiān)聽(tīng)器。當(dāng)文件6有操作變化時(shí),就需要通知在文件6的父目錄中注冊(cè)了監(jiān)聽(tīng)器的CA,所以就需要回溯文件6的各級(jí)父目錄中看哪級(jí)被注冊(cè)了監(jiān)聽(tīng)器。然而,有時(shí)候每一級(jí)目錄的Inode不在同一個(gè)MDS上,所以就要發(fā)送消息給其他MDS進(jìn)行查詢。由此可見(jiàn),現(xiàn)有技術(shù)中的方法存在需要多次路由才能回溯到注冊(cè)了監(jiān)聽(tīng)器的父目錄的問(wèn)題。
【發(fā)明內(nèi)容】
[0006]本申請(qǐng)實(shí)施例提供一種事件通知方法、監(jiān)聽(tīng)器的處理方法及裝置,用于解決現(xiàn)有技術(shù)中的在事件通知時(shí)需要多次路由才能回溯到注冊(cè)了監(jiān)聽(tīng)器的父目錄的技術(shù)問(wèn)題。
[0007]本申請(qǐng)第一方面提供了一種事件通知方法,包括:
[0008]當(dāng)客戶端CA進(jìn)行使得目錄/文件發(fā)生變化的操作時(shí),確定所述目錄/文件的全路徑上的各級(jí)目錄的節(jié)點(diǎn)信息vnode是有效的;
[0009]所述CA完成所述操作后,確定所述各級(jí)目錄的vnode中監(jiān)聽(tīng)器計(jì)數(shù)不為零的vnode所對(duì)應(yīng)的第一目錄;
[0010]所述CA根據(jù)所述第一目錄的標(biāo)識(shí)在多個(gè)通知服務(wù)器NS中確定出所述第一目錄的監(jiān)聽(tīng)器所注冊(cè)的NS ;其中,所述多個(gè)NS的數(shù)量與所有CA的數(shù)量相同;所述所注冊(cè)的NS上保存有所述第一目錄的監(jiān)聽(tīng)器的屬性信息,所述屬性信息包括所述第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼與注冊(cè)所述監(jiān)聽(tīng)器的CA的標(biāo)識(shí);所述監(jiān)聽(tīng)掩碼用于表示監(jiān)聽(tīng)的事件類型;
[0011]所述CA向所述所注冊(cè)的NS發(fā)送事件通知,所述事件通知包括所述第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼以及與所述操作對(duì)應(yīng)的事件內(nèi)容;以使所述所注冊(cè)的NS能夠在所述事件通知中的監(jiān)聽(tīng)掩碼和所述屬性信息中的監(jiān)聽(tīng)掩碼匹配時(shí),向所述注冊(cè)所述監(jiān)聽(tīng)器的CA發(fā)送事件通知。
[0012]結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,確定所述目錄/文件的全路徑上的各級(jí)目錄的節(jié)點(diǎn)信息vnode是有效的,包括:
[0013]當(dāng)所述各級(jí)目錄中的目錄存在vnode時(shí),查看所述vnode的標(biāo)記信息;
[0014]當(dāng)所述標(biāo)記信息表示所述vnode有效時(shí),確定所述vnode是有效的;
[0015]當(dāng)所述標(biāo)記信息表示所述vnode無(wú)效時(shí),所述CA向元數(shù)據(jù)服務(wù)器MDS獲取所述無(wú)效的vnode所對(duì)應(yīng)的目錄的監(jiān)聽(tīng)器信息,并根據(jù)所述監(jiān)聽(tīng)器信息更新所述無(wú)效的vnode信息為有效的vnode ;
[0016]當(dāng)所述各級(jí)目錄中的目錄不存在vnode時(shí),所述CA向元數(shù)據(jù)服務(wù)器MDS獲取所述不存在vnode的目錄的監(jiān)聽(tīng)器信息,并根據(jù)所述監(jiān)聽(tīng)器信息創(chuàng)建所述目錄的vnode并設(shè)置為有效的vnode。
[0017]結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,當(dāng)所述標(biāo)記信息表示所述vnode無(wú)效時(shí),在查看所述vnode的標(biāo)記信息之前,所述方法還包括:
[0018]所述CA接收鎖服務(wù)器發(fā)送的廣播消息,所述廣播消息用于通知所述CA所述無(wú)效的vnode所對(duì)應(yīng)的目錄的元數(shù)據(jù)將要發(fā)生變化;
[0019]所述CA將所述目錄的vnode的標(biāo)記信息設(shè)置為表示所述目錄的vnode無(wú)效的信息。
[0020]本申請(qǐng)第二方面提供一種事件通知方法,包括:
[0021]通知服務(wù)器NS接收發(fā)送事件變化的CA發(fā)送的第一事件通知;所述第一事件通知包括第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼以及事件內(nèi)容;所述監(jiān)聽(tīng)掩碼用于表示監(jiān)聽(tīng)的事件類型;
[0022]所述NS根據(jù)所述第一目錄的標(biāo)識(shí)獲得注冊(cè)的用于監(jiān)聽(tīng)所述第一目錄的監(jiān)聽(tīng)器;所述監(jiān)聽(tīng)器的屬性信息包括所述第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼以及注冊(cè)所述監(jiān)聽(tīng)器的CA的標(biāo)識(shí);
[0023]所述NS確定所述第一事件通知中的監(jiān)聽(tīng)掩碼和所述監(jiān)聽(tīng)器的屬性信息中的監(jiān)聽(tīng)掩碼匹配;
[0024]所述NS向注冊(cè)所述監(jiān)聽(tīng)器的CA發(fā)送第二事件通知;所述第二事件通知包括所述第一目錄的標(biāo)識(shí)、所述監(jiān)聽(tīng)掩碼以及所述事件內(nèi)容。
[0025]本申請(qǐng)第三方面提供一種監(jiān)聽(tīng)器的處理方法,包括:
[0026]客戶端CA接收用于處理監(jiān)聽(tīng)器的第一消息,所述第一消息中攜帶監(jiān)聽(tīng)的目錄/文件以及監(jiān)聽(tīng)掩碼;其中,所述監(jiān)聽(tīng)掩碼用于表示監(jiān)聽(tīng)的事件類型;
[0027]所述CA獲取所述監(jiān)聽(tīng)的目錄/文件的標(biāo)識(shí);
[0028]所述CA根據(jù)所述監(jiān)聽(tīng)的目錄/文件的標(biāo)識(shí)在多個(gè)通知服務(wù)器NS中確定出本次處理的NS ;其中,所述多個(gè)NS的數(shù)量與所述CA的數(shù)量相同;
[0029]所述CA向確定出的所述本次處理的NS發(fā)送用于處理監(jiān)聽(tīng)器的第二消息,所述第二消息中攜帶所述CA的標(biāo)識(shí)、所述監(jiān)聽(tīng)的目錄/文件的標(biāo)識(shí)以及所述監(jiān)聽(tīng)掩碼。
[0030]結(jié)合第三方面,在第三方面的第一種可能的實(shí)現(xiàn)方式中,在所述CA向確定出的所述本次處理的NS發(fā)送用于處理監(jiān)聽(tīng)器的第二消息之后,所述方法還包括:
[0031 ] 所述CA向鎖服務(wù)器發(fā)送獲取所述監(jiān)聽(tīng)的目錄/文件的元數(shù)據(jù)的鎖的請(qǐng)求;以使所述鎖服務(wù)器根據(jù)所述請(qǐng)求通知其它CA所述元數(shù)據(jù)將要發(fā)生變化,所述其它CA中所述監(jiān)聽(tīng)的目錄/文件的節(jié)點(diǎn)信息vnode無(wú)效;
[0032]所述CA接收所述鎖服務(wù)器返回的拿鎖成功的消息。
[0033]結(jié)合第三方面或第三方面的第一種可能的實(shí)現(xiàn)方式中,在第三方面的第二種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0034]所述CA向元數(shù)據(jù)服務(wù)器MDS發(fā)送所述監(jiān)聽(tīng)的目錄/文件的標(biāo)識(shí)和所述監(jiān)聽(tīng)掩碼。
[0035]本申請(qǐng)第四方面提供一種事件通知裝置,包括:
[0036]處理單元,用于當(dāng)客戶端CA進(jìn)行使得目錄/文件發(fā)生變化的操作時(shí),確定所述目錄/文件的全路徑上的各級(jí)目錄的節(jié)點(diǎn)信息vnode是有效的;當(dāng)所述CA完成所述操作后,確定所述各級(jí)目錄的vnode中監(jiān)聽(tīng)器計(jì)數(shù)不為零的vnode所對(duì)應(yīng)的第一目錄;根據(jù)所述第一目錄的標(biāo)識(shí)在多個(gè)通知服務(wù)器NS中確定出所述第一目錄的監(jiān)聽(tīng)器所注冊(cè)的NS ;其中,所述多個(gè)NS的數(shù)量與所有CA的數(shù)量相同;所述所注冊(cè)的NS上保存有所述第一目錄的監(jiān)聽(tīng)器的屬性信息,所述屬性信息包括所述第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼與注冊(cè)所述監(jiān)聽(tīng)器的CA的標(biāo)識(shí);所述監(jiān)聽(tīng)掩碼用于表示監(jiān)聽(tīng)的事件類型;
[0037]發(fā)送單元,用于向所述所注冊(cè)的NS發(fā)送事件通知,所述事件通知包括所述第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼以及與所述操作對(duì)應(yīng)的事件內(nèi)容;以使所述所注冊(cè)的NS能夠在所述事件通知中的監(jiān)聽(tīng)掩碼和所述屬性信息中的監(jiān)聽(tīng)掩碼匹配時(shí),向所述注冊(cè)所述監(jiān)聽(tīng)器的CA發(fā)送事件通知。
[0038]結(jié)合第四方面,在第四方面的第一種可能的實(shí)現(xiàn)方式中,所述處理單元具體用于:當(dāng)所述各級(jí)目錄中的目錄存在vnode時(shí),查看所述vnode的標(biāo)記信息;
[0039]當(dāng)所述標(biāo)記信息表示所述vnode有效時(shí),確定所述vnode是有效的;
[0040]所述發(fā)送單元還用于:當(dāng)所述標(biāo)記信息表示所述vnode無(wú)效時(shí),向元數(shù)據(jù)服務(wù)器MDS獲取所述無(wú)效的vnode所對(duì)應(yīng)的目錄的監(jiān)聽(tīng)器信息,所述處理單元還用于根據(jù)所述監(jiān)聽(tīng)器信息更新所述無(wú)效的vnode信息為有效的vnode ;
[0041]所述發(fā)送單元還用于當(dāng)所述各級(jí)目錄中的目錄不存在vnode時(shí),向元數(shù)據(jù)服務(wù)器MDS獲取所述不存在vnode的目錄的監(jiān)聽(tīng)器信息,所述處理單元還用于根據(jù)所述監(jiān)聽(tīng)器信息創(chuàng)建所述目錄的vnode并設(shè)置為有效的vnode。
[0042]結(jié)合第四方面的第一種可能的實(shí)現(xiàn)方式中,在第四方面的第二種可能的實(shí)現(xiàn)方式中,所述裝置還包括接收單元,用于當(dāng)所述標(biāo)記信息表示所述vnode無(wú)效時(shí),在所述處理單元查看所述vnode的標(biāo)記信息之前,接收鎖服務(wù)器發(fā)送的廣播消息,所述廣播消息用于通知所述裝置所述無(wú)效的vnode所對(duì)應(yīng)的目錄的元數(shù)據(jù)將要發(fā)生變化;
[0043]所述處理單元還用于:將所述目錄的vnode的標(biāo)記信息設(shè)置為表示所述目錄的vnode無(wú)效的信息。
[0044]本申請(qǐng)第五方面提供一種事件通知裝置,包括:
[0045]接收單元,用于接收發(fā)送事件變化的CA發(fā)送的第一事件通知;所述第一事件通知包括第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼以及事件內(nèi)容;所述監(jiān)聽(tīng)掩碼用于表示監(jiān)聽(tīng)的事件類型;
[0046]處理單元,用于根據(jù)所述第一目錄的標(biāo)識(shí)獲得注冊(cè)的用于監(jiān)聽(tīng)所述第一目錄的監(jiān)聽(tīng)器;所述監(jiān)聽(tīng)器的屬性信息包括所述第一目錄的標(biāo)識(shí)、監(jiān)聽(tīng)掩碼以及注冊(cè)所述監(jiān)聽(tīng)器的CA的