欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于分布式文件系統(tǒng)執(zhí)行重命名操作的方法和設(shè)備與流程

文檔序號(hào):11216341閱讀:650來源:國知局
用于分布式文件系統(tǒng)執(zhí)行重命名操作的方法和設(shè)備與流程

本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種用于分布式文件系統(tǒng)執(zhí)行重命名操作的技術(shù)。



背景技術(shù):

隨著信息技術(shù)的不斷普及和深入化應(yīng)用,越來越多的人們習(xí)慣使用計(jì)算機(jī)進(jìn)行傳輸以及存儲(chǔ)文件。為了區(qū)分每個(gè)文件的不同以及便于查找文件,每個(gè)文件都設(shè)定了自己的名稱。但通常情況下,同一個(gè)文件名是不能標(biāo)注在兩個(gè)文件上的,或者在文件名出現(xiàn)沖突的情況下,就需要使用重命名功能。在單機(jī)系統(tǒng)或分布式系統(tǒng)中,重命名包括文件名變化的情況,也包括文件路徑變化的情況(即文件移動(dòng))。在分布式系統(tǒng)中將命名空間進(jìn)行分布式,使其構(gòu)成一個(gè)聯(lián)盟(federation),從而實(shí)現(xiàn)分布式系統(tǒng)的可擴(kuò)展性。而federation中進(jìn)行重命名(rename)操作只支持同一主節(jié)點(diǎn)組列表(volume)上的rename,而不支持volume間進(jìn)行的rename操作。



技術(shù)實(shí)現(xiàn)要素:

本申請(qǐng)的目的是提供一種用于分布式文件系統(tǒng)執(zhí)行重命名操作的方法與設(shè)備,以解決在不同主節(jié)點(diǎn)組列表間進(jìn)行文件或目錄重命名操作的問題。

根據(jù)本申請(qǐng)的一個(gè)方面,提供了一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的方法,包括:

獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖;

基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

根據(jù)本申請(qǐng)的另一個(gè)方面,提供了一種用于分布式文件系統(tǒng)執(zhí)行目錄重命名操作的方法,包括:

獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖;

掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

根據(jù)本申請(qǐng)的又一方面,還提供了一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的設(shè)備,包括:

獲取文件請(qǐng)求裝置,用于獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

創(chuàng)建臨時(shí)文件裝置,用于當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖;

數(shù)據(jù)操作裝置,用于基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

刪除源文件裝置,用于將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

根據(jù)本申請(qǐng)的再一方面,還提供了一種用于分布式文件系統(tǒng)執(zhí)行目錄重命名操作的設(shè)備,包括:

獲取目錄請(qǐng)求裝置,用于獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

創(chuàng)建臨時(shí)目錄裝置,用于當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖;

數(shù)據(jù)處理裝置,用于掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

刪除源目錄裝置,用于將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

此外,本申請(qǐng)還提供了一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的設(shè)備,包括:

處理器;

以及被安排成存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的存儲(chǔ)器,所述可執(zhí)行指令在被執(zhí)行時(shí)使所述處理器:

獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖;

基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

此外,本申請(qǐng)還提供了一種分布式文件系統(tǒng)中執(zhí)行目錄重命名操作的設(shè)備,包括:

處理器;

以及被安排成存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的存儲(chǔ)器,所述可執(zhí)行指令在被執(zhí)行時(shí)使所述處理器:

獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖;

掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

與現(xiàn)有技術(shù)相比,根據(jù)本申請(qǐng)一個(gè)方面的實(shí)施例所述的方法和設(shè)備,通過對(duì)文件的重命名請(qǐng)求進(jìn)行解析,確定重命名請(qǐng)求是否在同一主節(jié)點(diǎn)組列表中,若不在,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖,通過獲取文件鎖避免了在重命名過程中有用戶寫入新的數(shù)據(jù);基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;最后,將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件,完成不同主節(jié)點(diǎn)組列表之間的文件重命名操作,盡量保持了原有的文件系統(tǒng)的語義,同時(shí)上層用戶可以無感知的繼續(xù)使用文件系統(tǒng)。進(jìn)一步地,通過上述重命名操作僅是元信息的遷移,減少了數(shù)據(jù)的大量拷貝操作。

進(jìn)一步地,根據(jù)本申請(qǐng)的另一個(gè)方面的實(shí)施例所述的方法和設(shè)備,通過獲取目錄重命名請(qǐng)求對(duì)其進(jìn)行解析確定是否在同一主節(jié)點(diǎn)組列表上,當(dāng)在不同的主節(jié)點(diǎn)組列表時(shí)首先獲取目錄鎖,以將目錄設(shè)置成只讀狀態(tài)并在目標(biāo)主節(jié)點(diǎn)組列表上創(chuàng)建臨時(shí)目錄和在臨時(shí)目錄下創(chuàng)建臨時(shí)文件;接著,通過獲取的源目錄鎖對(duì)源目錄進(jìn)行遞歸以獲取源目錄下的所有文件,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;最后,將文件進(jìn)行重命名操作后將目標(biāo)主節(jié)點(diǎn)組列表上的臨時(shí)目錄重命名成真正的文件,然后刪除源目錄完成目錄的重命名操作,從而完成了在不同主節(jié)點(diǎn)組列表之間的目錄重命名操作,且過程中避免出現(xiàn)數(shù)據(jù)丟失同時(shí)不影響用戶使用。

附圖說明

通過閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:

圖1示出根據(jù)本申請(qǐng)一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行重命名操作的流程示意圖;

圖2示出根據(jù)本申請(qǐng)一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的方法流程示意圖;

圖3示出根據(jù)本申請(qǐng)一個(gè)方面的一個(gè)優(yōu)選實(shí)施例的步驟s13的流程示意圖;

圖4示出根據(jù)本申請(qǐng)一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行目錄重命名操作的方法流程示意圖;

圖5示出根據(jù)本申請(qǐng)一個(gè)方面的又一個(gè)優(yōu)選實(shí)施例的步驟s23的流程示意圖;

圖6示出根據(jù)本申請(qǐng)?jiān)僖粋€(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的設(shè)備結(jié)構(gòu)示意圖;

圖7示出根據(jù)本申請(qǐng)?jiān)僖粋€(gè)方面的一個(gè)優(yōu)選實(shí)施例的數(shù)據(jù)操作裝置的結(jié)構(gòu)示意圖;

圖8示出根據(jù)本申請(qǐng)又一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行目錄重命名操作的設(shè)備結(jié)構(gòu)示意圖;

圖9示出根據(jù)本申請(qǐng)又一個(gè)方面的又一個(gè)優(yōu)選實(shí)施例的數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。

附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。

具體實(shí)施方式

下面結(jié)合附圖對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)描述。

圖1示出根據(jù)本申請(qǐng)一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行重命名操作的流程示意圖。在一優(yōu)選實(shí)施例中,如盤古(pangu)文件系統(tǒng)中,重命名操作分為重命名文件和重命名目錄,其中,pangu屬于主從節(jié)點(diǎn)(master-slave)結(jié)構(gòu),數(shù)據(jù)的元信息存儲(chǔ)在主節(jié)點(diǎn)服務(wù)器上,真正的數(shù)據(jù)存儲(chǔ)在從節(jié)點(diǎn)服務(wù)器上。用戶可以使用pangu提供的應(yīng)用程序接口(api)進(jìn)行讀寫數(shù)據(jù),對(duì)于一個(gè)文件,同時(shí)只能有一個(gè)客戶端進(jìn)行寫數(shù)據(jù)。在系統(tǒng)中執(zhí)行重命名文件和重命名目錄操作時(shí)需要調(diào)用不同的api來完成,重命名文件應(yīng)用程序接口(renamefileapi)和重命名目錄應(yīng)用程序接口(renamedirectoryapi)。因此,當(dāng)有重命名請(qǐng)求時(shí),需判斷是重命名文件還是重命名目錄,基于請(qǐng)求采用不同的方法執(zhí)行文件重命名操作和目錄重命名操作。

需要說明的是,以下用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的方法和設(shè)備中所述的實(shí)施例均以pangu文件系統(tǒng)架構(gòu)為場景進(jìn)行說明的,本領(lǐng)域技術(shù)人員應(yīng)能理解,以pangu文件系統(tǒng)架構(gòu)為場景的實(shí)施例僅為本申請(qǐng)的優(yōu)選實(shí)施例,若其他現(xiàn)有的或今后可能出現(xiàn)的文件系統(tǒng)架構(gòu)中的重命名操作如采用本申請(qǐng)所述的分布式文件系統(tǒng)執(zhí)行文件重命名操作的方法和設(shè)備,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并在此以引用方式包含于此。

圖2示出根據(jù)本申請(qǐng)一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的方法流程示意圖。所述方法包括步驟s11、步驟s12、步驟s13和步驟s14,其中,在步驟s11中,獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求;在步驟s12中,當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖;在步驟s13中,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;在步驟s14中,將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

具體地,在步驟s11中,獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求。

在此,客戶端在收到文件重命名請(qǐng)求后,按照內(nèi)存中文件所在的主節(jié)點(diǎn)組列表(volume)的路由表對(duì)文件進(jìn)行解析,確定重命名請(qǐng)求是否在相同的volume上,若是,則客戶端發(fā)送重命名遠(yuǎn)程調(diào)用(renamerpc)接口對(duì)相應(yīng)源文件進(jìn)行重命名即可,若不在同一volume上,則執(zhí)行步驟s12。需要說明的是,所述volume為在命名空間聯(lián)盟(federation)中對(duì)命名空間分組后,每一組的稱謂,為主節(jié)點(diǎn)(master)組的列表,通過列表的查詢可知重命名請(qǐng)求是否在同一volume上進(jìn)行。

具體地,在步驟s12中,當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖。

在此,當(dāng)確定重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表(volume)之間的文件重命名請(qǐng)求時(shí),利用open4append在源主節(jié)點(diǎn)組列表(源volume)上獲取源文件的文件鎖,并在目標(biāo)volume上創(chuàng)建臨時(shí)文件并獲取臨時(shí)文件的文件鎖。優(yōu)選地,所述文件鎖為可讀不可寫鎖類;只有獲取到寫鎖的進(jìn)程或線程才可以對(duì)文件進(jìn)行寫操作,在文件重命名過程中,獲取源文件鎖是為了避免在重命名過程中有用戶寫入了新的數(shù)據(jù),但是在重命名后的目標(biāo)volume上并沒有看到新的數(shù)據(jù)而造成數(shù)據(jù)丟失,獲取臨時(shí)文件的鎖是為了避免在重命名過程中有用戶寫數(shù)據(jù)導(dǎo)致重命名后與源文件中內(nèi)容不一致。

需要說明的是,所述open4append是用于pangu內(nèi)部文件打開寫的方法,會(huì)保證對(duì)于同一個(gè)文件在同一個(gè)時(shí)刻只有一個(gè)客戶端可以進(jìn)行寫操作。本領(lǐng)域技術(shù)人員應(yīng)能理解,所述利用open4append獲取文件鎖的方法僅為本申請(qǐng)的一個(gè)舉例,其他現(xiàn)有的或今后可能出現(xiàn)的獲取文件鎖的方法如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并在此以引用方式包含于此。

具體地,在步驟s13中,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中。

在此,獲取臨時(shí)文件鎖后基于所述源文件的文件類型開始對(duì)真實(shí)的數(shù)據(jù)(data)在從節(jié)點(diǎn)服務(wù)器(數(shù)據(jù)塊存儲(chǔ)服務(wù)器,chunkserver)的磁盤上進(jìn)行硬鏈接(hardlink)或數(shù)據(jù)復(fù)制操作,以將源文件中真實(shí)的數(shù)據(jù)移動(dòng)到所創(chuàng)建的臨時(shí)文件中;對(duì)不同文件類型中的真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到臨時(shí)文件的處理方式的不同的目的是:在重命名過程失敗,造成源volume上和目標(biāo)volume上都相同的文件,那么用戶再寫數(shù)據(jù)后,由于真正的數(shù)據(jù)在磁盤上進(jìn)行的硬鏈接可能造成數(shù)據(jù)錯(cuò)亂。在一優(yōu)選實(shí)施例中,pangu文件系統(tǒng)中,文件的元信息存儲(chǔ)在master上,文件的真實(shí)數(shù)據(jù)存儲(chǔ)在chunkserver上,創(chuàng)建文件時(shí)是只在master端修改元信息,鏈接時(shí)只是在chunkserver上對(duì)數(shù)據(jù)進(jìn)行鏈接;例如,用戶寫了一個(gè)長度為64mb的文件,則文件的長度、創(chuàng)建時(shí)間、修改時(shí)間。文件名等元信息記錄在master端,而用戶的實(shí)際數(shù)據(jù)記錄在chunkserver上,當(dāng)在volume之間進(jìn)行文件的移動(dòng)時(shí),是對(duì)實(shí)際的數(shù)據(jù)進(jìn)行鏈接,而元信息需要重新創(chuàng)建。

具體地,在步驟s14中,將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

在此,在本申請(qǐng)一優(yōu)選實(shí)施例中,優(yōu)選地,當(dāng)完成步驟s13后,則進(jìn)行更新所述臨時(shí)文件的元信息,將所述臨時(shí)文件的元信息寫入所述目標(biāo)主節(jié)點(diǎn)設(shè)備,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作。在此,當(dāng)將存儲(chǔ)在chunkserver上的真實(shí)數(shù)據(jù)通過硬鏈接操作和/或數(shù)據(jù)復(fù)制操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中后,將臨時(shí)文件的元信息進(jìn)行更新,將創(chuàng)建臨時(shí)文件及對(duì)臨時(shí)文件進(jìn)行修改等元信息寫到目標(biāo)volume上的目標(biāo)主節(jié)點(diǎn)設(shè)備(目標(biāo)master)上,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作,如可調(diào)用commitandclose函數(shù)可實(shí)現(xiàn)元信息寫到目標(biāo)volume上,其中,所述commitandclose是盤古內(nèi)部將文件的元信息寫到master端并且將該文件的寫關(guān)閉掉的函數(shù);隨后將已有真實(shí)數(shù)據(jù)的臨時(shí)文件重命名為目標(biāo)文件,最后將源volume上的源文件刪除完成不同volume之間的文件重命名操作。

本申請(qǐng)一實(shí)施例所述用于分布式文件系統(tǒng)中執(zhí)行文件重命名操作的方法,通過在目標(biāo)volume上采用先創(chuàng)建一個(gè)臨時(shí)文件,再將臨時(shí)文件重命名到真正的文件是防止重命名過程中失敗,造成目標(biāo)volume端有一個(gè)殘缺的文件,影響用戶的使用,而且通過所述方法降低了在兩個(gè)volume上出現(xiàn)相同文件的概率,從而避免分布式文件系統(tǒng)中使用文件混亂的情況。

優(yōu)選地,所述源文件的文件類型包括:僅能追加寫的非日志文件、僅能追加寫的日志文件、可隨機(jī)寫入文件;圖3示出根據(jù)本申請(qǐng)一個(gè)方面的一個(gè)優(yōu)選實(shí)施例的步驟s13的流程示意圖;所述步驟s13包括:步驟s131、步驟s132和步驟s133;其中,在步驟s131中,若所述源文件的類型為僅能追加寫的非日志文件,則將所述真實(shí)數(shù)據(jù)的最后一個(gè)數(shù)據(jù)塊進(jìn)行數(shù)據(jù)復(fù)制操作,并將其他數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;在步驟s132中,若所述源文件類型為僅能追加寫的日志文件,則將所述真實(shí)數(shù)據(jù)的所有的數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;在步驟s133中,若所述源文件的類型為可隨機(jī)寫入文件,則將所述真實(shí)數(shù)據(jù)的所有數(shù)據(jù)塊進(jìn)行復(fù)制操作。

在一優(yōu)選實(shí)施例中,例如在盤古文件系統(tǒng)中,文件類型有四種類型:normalfile、raidfile、logfile和randomaccessfile,其中,所述normalfile:用戶只能追加寫,在寫完后需要將數(shù)據(jù)的元信息存儲(chǔ)在主節(jié)點(diǎn)設(shè)備端;所述raidfile:對(duì)數(shù)據(jù)進(jìn)行磁盤失效算法(erasurecode)后的normalfile;所述logfile:用戶每次追加寫,寫完就算成功,如果寫失敗,則換一個(gè)數(shù)據(jù)塊進(jìn)行寫;所述randomaccessfile:用戶可以隨機(jī)寫的文件。由此可知,源文件的文件類型中僅能追加寫的非日志文件在盤古文件系統(tǒng)里包括normalfile和raidfile。在對(duì)源文件中真實(shí)數(shù)據(jù)進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作時(shí)根據(jù)不同的文件類型采用不同的操作方式,如對(duì)于僅能追加寫的非日志文件normalfile和raidfile,將該文件類型對(duì)應(yīng)的最后一個(gè)數(shù)據(jù)塊進(jìn)行復(fù)制操作,其余的數(shù)據(jù)塊進(jìn)行硬鏈接操作;若文件類型為logfile,則將所有的數(shù)據(jù)塊進(jìn)行硬鏈接;若文件類型為randomaccessfile,則將所有的數(shù)據(jù)塊進(jìn)行復(fù)制操作。在此,對(duì)于不同文件種類的處理方式的不同的目的是防止在重命名操作過程失敗,造成源volume上和目標(biāo)volume上都相同的文件,那么用戶再寫數(shù)據(jù)后,由于真正的數(shù)據(jù)在磁盤上是進(jìn)行的硬件,可能造成數(shù)據(jù)錯(cuò)亂的問題。

優(yōu)選地,所述方法還包括:當(dāng)所述重命名請(qǐng)求為同一主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)源文件進(jìn)行重命名。

在此,當(dāng)客戶端在接收重命名請(qǐng)求后對(duì)請(qǐng)求進(jìn)行解析,確定重命名請(qǐng)求是否在同一主節(jié)點(diǎn)列表上,若在同一主節(jié)點(diǎn)組列表上,則直接發(fā)送重命名遠(yuǎn)程調(diào)用請(qǐng)求(renamerpc)即可,調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)的源文件進(jìn)行重命名。

優(yōu)選地,所述方法還包括:創(chuàng)建掃描線程,定期掃描所述臨時(shí)文件,若所述臨時(shí)文件在超時(shí)時(shí)間內(nèi)未被重命名為所述目標(biāo)文件,則刪除所述臨時(shí)文件。

在此,創(chuàng)建掃描線程,進(jìn)行定期地掃描臨時(shí)文件,如果被掃描的臨時(shí)文件在超過時(shí)間閾值內(nèi)沒有被重命名為目標(biāo)文件,則將其刪除,避免不用的臨時(shí)文件構(gòu)成的垃圾占用過多的空間,對(duì)其進(jìn)行垃圾回收。

在本申請(qǐng)所述的用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的方法,使得文件系統(tǒng)支持在不同主節(jié)點(diǎn)組列表之間能夠進(jìn)行重命名文件操作使上層用戶可以無感知的繼續(xù)使用文件系統(tǒng)。需要說明的是,在進(jìn)行文件重命名的過程中,無論是在相同主節(jié)點(diǎn)組列表中進(jìn)行還是在不同主節(jié)點(diǎn)組列表中進(jìn)行的都需要對(duì)文件所在的目錄進(jìn)行更新操作。

圖4示出根據(jù)本申請(qǐng)一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行目錄重命名操作的方法流程示意圖;其中,所述方法包括:步驟s21、步驟s22、步驟s23和步驟s24;其中,在步驟s21中,獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求;在步驟s22中,當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖;在步驟s23中,掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;在步驟s24中,將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

具體地,在步驟s21中,獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求。

在此,客戶端在收到目錄重命名請(qǐng)求后,按照所需重命名的源目錄所在的主節(jié)點(diǎn)組列表(源volume)的路由表對(duì)源目錄進(jìn)行解析,確定重命名請(qǐng)求是否在相同的volume上,若是,則客戶端發(fā)送重命名遠(yuǎn)程調(diào)用(renamerpc)接口對(duì)相應(yīng)源目錄進(jìn)行重命名即可,若不在同一volume上,則執(zhí)行步驟s22。

具體地,在步驟s22中,當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖。

在此,優(yōu)選地,所述目錄鎖為可讀不可寫鎖類。對(duì)于目錄的重命名操作,需要獲取整個(gè)目錄的鎖,保證在重命名操作過程中沒有用戶進(jìn)行寫操作,避免出現(xiàn)數(shù)據(jù)丟失的情況。客戶端獲取目錄鎖將目錄設(shè)置成只讀狀態(tài),然后客戶端定期向主節(jié)點(diǎn)設(shè)備發(fā)送遠(yuǎn)程調(diào)用請(qǐng)求,主節(jié)點(diǎn)設(shè)備在收到請(qǐng)求后確定客戶端存在,當(dāng)主節(jié)點(diǎn)設(shè)備一個(gè)只讀狀態(tài)的目錄長時(shí)間沒有收到請(qǐng)求后,主節(jié)點(diǎn)設(shè)備將該只讀狀態(tài)的目錄設(shè)置成正常狀態(tài),即可讀可寫狀態(tài),用戶還可以寫該目錄。在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建完臨時(shí)目錄后,需在臨時(shí)目錄下創(chuàng)建臨時(shí)文件,以使將源文件中的真實(shí)數(shù)據(jù)遷移到臨時(shí)文件中。

具體地,在步驟s23中,掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中。

在此,客戶端在獲取源目錄的目錄鎖后對(duì)源目錄進(jìn)行遞歸以獲取源目錄下的所有的文件,之后開始對(duì)所獲取的源文件進(jìn)行重命名操作,需要說明的是,在此不需要獲取文件的鎖,因已獲取目錄鎖。在所創(chuàng)建的臨時(shí)目錄中創(chuàng)建臨時(shí)文件,基于所述源文件的文件類型開始對(duì)真實(shí)的數(shù)據(jù)(data)在從節(jié)點(diǎn)服務(wù)器(數(shù)據(jù)塊存儲(chǔ)服務(wù)器,chunkserver)的磁盤上進(jìn)行硬鏈接(hardlink)或數(shù)據(jù)復(fù)制操作,以將源文件中真實(shí)的數(shù)據(jù)移動(dòng)到所創(chuàng)建的臨時(shí)目錄下的臨時(shí)文件中。在一優(yōu)選實(shí)施例中,如在源volume1上的源目錄/src/dir1/dir2/file需要重命名操作到目標(biāo)volume2上的目標(biāo)目錄/dst/dir3/file,則客戶端將源目錄下的文件移動(dòng)到目標(biāo)volume2上的一個(gè)臨時(shí)目錄下/pangutempdir/file,之后客戶端通知目標(biāo)volume2的主節(jié)點(diǎn)設(shè)備(master)將臨時(shí)目錄/pangutempdir/file重命名成目標(biāo)目錄/dst/dir3/file。

具體地,在步驟s24中,將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

接前例,將源目錄下的所有文件進(jìn)行重命名操作之后即完成將源文件移動(dòng)到目標(biāo)目錄下,主節(jié)點(diǎn)設(shè)備收到客戶端請(qǐng)求后,將記錄文件名的目錄樹進(jìn)行加鎖,之后進(jìn)行臨時(shí)目錄重命名成目標(biāo)目錄的操作,完成目錄重命名操作后將源目錄進(jìn)行刪除。需要說明的是,在完成源目錄下所有文件的重命名操作后,不需要?jiǎng)h除源文件,因源目錄狀態(tài)是只讀的不能被寫操作處理,且在進(jìn)行文件重命名操作過程中可能會(huì)失敗,因此不能過早的刪除源文件。

優(yōu)選地,所述方法還包括:進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作之后,更新所述臨時(shí)文件的元信息,將所述臨時(shí)文件的元信息寫入所述目標(biāo)主節(jié)點(diǎn)設(shè)備,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作。

在此,所述進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作之后,更新所述臨時(shí)文件的元信息,將所述臨時(shí)文件的元信息寫入所述目標(biāo)主節(jié)點(diǎn)設(shè)備,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作與上述當(dāng)完成步驟s13后進(jìn)行的更新所述臨時(shí)文件的元信息,將所述臨時(shí)文件的元信息寫入所述目標(biāo)主節(jié)點(diǎn)設(shè)備,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作的內(nèi)容相同或基本相同,為簡明起見,不再贅述,僅以引用的方式包含于此。

優(yōu)選地,所述源文件的文件類型包括:僅能追加寫的非日志文件、僅能追加寫的日志文件、可隨機(jī)寫入文件;圖5示出根據(jù)本申請(qǐng)另一個(gè)方面的一個(gè)優(yōu)選實(shí)施例的步驟s23的流程示意圖;所述步驟s23包括:步驟s231、步驟s232和步驟s233;在步驟s231中,若所述源文件的類型為僅能追加寫的非日志文件,則將所述真實(shí)數(shù)據(jù)的最后一個(gè)數(shù)據(jù)塊進(jìn)行數(shù)據(jù)復(fù)制操作,并將其他數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;在步驟s232中,若所述源文件類型為僅能追加寫的日志文件,則將所述真實(shí)數(shù)據(jù)的所有的數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;在步驟s233中,若所述源文件的類型為可隨機(jī)寫入文件,則將所述真實(shí)數(shù)據(jù)的所有數(shù)據(jù)塊進(jìn)行復(fù)制操作。

在此,圖5中所示的步驟s231、步驟s232和步驟s233和圖3中所示的步驟s131、步驟s132和步驟s133的內(nèi)容相同或基本相同,為簡明起見,不再贅述,僅以引用的方式包含于此。

優(yōu)選地,所述方法還包括:當(dāng)所述重命名請(qǐng)求為同一主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)源目錄進(jìn)行重命名。

在此,當(dāng)客戶端在接收目錄重命名請(qǐng)求后對(duì)該請(qǐng)求進(jìn)行解析,確定重命名請(qǐng)求是否在同一主節(jié)點(diǎn)列表上,若在同一主節(jié)點(diǎn)組列表上,則直接發(fā)送重命名遠(yuǎn)程調(diào)用請(qǐng)求(renamerpc)即可,調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)的源目錄進(jìn)行重命名操作。需要說明的是,進(jìn)行目錄重命名操作的過程中需要將目錄下的所有文件也進(jìn)行重命名操作。

優(yōu)選地,所述方法還包括:獲取客戶端發(fā)送的心跳請(qǐng)求,若在超時(shí)時(shí)間內(nèi)未收到所述心跳請(qǐng)求,則將所述源目錄修改為可讀可寫狀態(tài)。

在此,在源volume上的主節(jié)點(diǎn)設(shè)備獲取到客戶端發(fā)送的心跳請(qǐng)求,若在超過預(yù)設(shè)時(shí)間內(nèi)未收到心跳請(qǐng)求,則將源目錄改為可讀可寫的狀態(tài)(normal狀態(tài)),所述心跳為客戶端向主節(jié)點(diǎn)設(shè)備發(fā)送遠(yuǎn)程調(diào)用請(qǐng)求(rpc),主節(jié)點(diǎn)設(shè)備收到rpc請(qǐng)求后確認(rèn)客戶端存在,這一過程稱為心跳。

優(yōu)選地,所述方法還包括:創(chuàng)建掃描線程,定期掃描所述臨時(shí)目錄,若所述臨時(shí)目錄在超時(shí)時(shí)間內(nèi)未被重命名為所述目標(biāo)目錄,則刪除所述臨時(shí)目錄。

在此,創(chuàng)建掃描線程,進(jìn)行定期地掃描臨時(shí)目錄,如果被掃描的臨時(shí)目錄在超過時(shí)間閾值內(nèi)沒有被重命名為目標(biāo)目錄,則將其刪除,避免不用的臨時(shí)目錄構(gòu)成的垃圾占用過多的空間,對(duì)其進(jìn)行垃圾回收。

在本申請(qǐng)所述的用于分布式文件系統(tǒng)中執(zhí)行目錄重命名操作的方法的實(shí)施例中,通過目錄鎖以設(shè)置目錄為可讀不可寫狀態(tài),掃描源目錄下的所有文件,將文件進(jìn)行重命名操作后在目標(biāo)主節(jié)點(diǎn)組列表上將臨時(shí)目錄重命名成目標(biāo)目錄,刪除源目錄,完成不同主節(jié)點(diǎn)組列表之間的重命名操作,盡量保持了原有的文件系統(tǒng)語義,使得上層用戶可以無感知的繼續(xù)使用文件系統(tǒng);同時(shí)在進(jìn)行重命名操作過程中將臨時(shí)文件的元信息存儲(chǔ)在主節(jié)點(diǎn)設(shè)備,完成了元信息的遷移,大量減少了數(shù)據(jù)的拷貝過程。進(jìn)一步地,創(chuàng)建了掃描線程對(duì)臨時(shí)目錄進(jìn)行掃描,將長期未進(jìn)行重命名操作的臨時(shí)目錄刪除避免占用過多的空間。

圖6示出根據(jù)本申請(qǐng)?jiān)僖粋€(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的設(shè)備結(jié)構(gòu)示意圖。所述設(shè)備1包括獲取文件請(qǐng)求裝置11、創(chuàng)建臨時(shí)文件裝置12、數(shù)據(jù)操作裝置13和刪除源文件裝置14,其中,獲取文件請(qǐng)求裝置11獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求;創(chuàng)建臨時(shí)文件裝置12用于當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖;數(shù)據(jù)操作裝置13基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;刪除源文件裝置14將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

在此,所述設(shè)備1包括但不限于用戶設(shè)備、或用戶設(shè)備與網(wǎng)絡(luò)設(shè)備通過網(wǎng)絡(luò)相集成所構(gòu)成的設(shè)備。所述用戶設(shè)備其包括但不限于任何一種可與用戶通過觸摸板進(jìn)行人機(jī)交互的移動(dòng)電子產(chǎn)品,例如智能手機(jī)、pda等,所述移動(dòng)電子產(chǎn)品可以采用任意操作系統(tǒng),如android操作系統(tǒng)、ios操作系統(tǒng)等。其中,所述網(wǎng)絡(luò)設(shè)備包括一種能夠按照事先設(shè)定或存儲(chǔ)的指令,自動(dòng)進(jìn)行數(shù)值計(jì)算和信息處理的電子設(shè)備,其硬件包括但不限于微處理器、專用集成電路(asic)、可編程門陣列(fpga)、數(shù)字處理器(dsp)、嵌入式設(shè)備等。所述網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、vpn網(wǎng)絡(luò)、無線自組織網(wǎng)絡(luò)(adhoc網(wǎng)絡(luò))等。優(yōu)選地,設(shè)備1還可以是運(yùn)行于所述用戶設(shè)備、或用戶設(shè)備與網(wǎng)絡(luò)設(shè)備、觸摸終端或網(wǎng)絡(luò)設(shè)備與觸摸終端通過網(wǎng)絡(luò)相集成所構(gòu)成的設(shè)備上的腳本程序。當(dāng)然,本領(lǐng)域技術(shù)人員應(yīng)能理解上述設(shè)備1僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的設(shè)備1如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。

具體地,獲取文件請(qǐng)求裝置11獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求。

在此,客戶端在收到文件重命名請(qǐng)求后,按照內(nèi)存中文件所在的主節(jié)點(diǎn)組列表(volume)的路由表對(duì)文件進(jìn)行解析,確定重命名請(qǐng)求是否在相同的volume上,若是,則客戶端發(fā)送重命名遠(yuǎn)程調(diào)用(renamerpc)接口對(duì)相應(yīng)源文件進(jìn)行重命名即可,若不在同一volume上,則創(chuàng)建臨時(shí)文件裝置12進(jìn)行后續(xù)的處理。需要說明的是,所述volume為在命名空間聯(lián)盟(federation)中對(duì)命名空間分組后,每一組的稱謂,為主節(jié)點(diǎn)(master)組的列表,通過列表的查詢可知重命名請(qǐng)求是否在同一volume上進(jìn)行。

具體地,創(chuàng)建臨時(shí)文件裝置12當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖。

在此,當(dāng)確定重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表(volume)之間的文件重命名請(qǐng)求時(shí),利用open4append在源主節(jié)點(diǎn)組列表(源volume)上獲取源文件的文件鎖,并在目標(biāo)volume上創(chuàng)建臨時(shí)文件并獲取臨時(shí)文件的文件鎖。優(yōu)選地,所述文件鎖為可讀不可寫鎖類;只有獲取到寫鎖的進(jìn)程或線程才可以對(duì)文件進(jìn)行寫操作,在文件重命名過程中,獲取源文件鎖是為了避免在重命名過程中有用戶寫入了新的數(shù)據(jù),但是在重命名后的目標(biāo)volume上并沒有看到新的數(shù)據(jù)而造成數(shù)據(jù)丟失,獲取臨時(shí)文件的鎖是為了避免在重命名過程中有用戶寫數(shù)據(jù)導(dǎo)致重命名后與源文件中內(nèi)容不一致。

需要說明的是,所述open4append是用于pangu內(nèi)部文件打開寫的方法,會(huì)保證對(duì)于同一個(gè)文件在同一個(gè)時(shí)刻只有一個(gè)客戶端可以進(jìn)行寫操作。本領(lǐng)域技術(shù)人員應(yīng)能理解,所述利用open4append獲取文件鎖的方法僅為本申請(qǐng)的一個(gè)舉例,其他現(xiàn)有的或今后可能出現(xiàn)的獲取文件鎖的方法如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并在此以引用方式包含于此。

具體地,數(shù)據(jù)操作裝置13基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中。

在此,獲取臨時(shí)文件鎖后基于所述源文件的文件類型開始對(duì)真實(shí)的數(shù)據(jù)(data)在從節(jié)點(diǎn)服務(wù)器(數(shù)據(jù)塊存儲(chǔ)服務(wù)器,chunkserver)的磁盤上進(jìn)行硬鏈接(hardlink)或數(shù)據(jù)復(fù)制操作,以將源文件中真實(shí)的數(shù)據(jù)移動(dòng)到所創(chuàng)建的臨時(shí)文件中;對(duì)不同文件類型中的真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到臨時(shí)文件的處理方式的不同的目的是:在重命名過程失敗,造成源volume上和目標(biāo)volume上都相同的文件,那么用戶再寫數(shù)據(jù)后,由于真正的數(shù)據(jù)在磁盤上進(jìn)行的硬鏈接可能造成數(shù)據(jù)錯(cuò)亂。在一優(yōu)選實(shí)施例中,pangu文件系統(tǒng)中,文件的元信息存儲(chǔ)在master上,文件的真實(shí)數(shù)據(jù)存儲(chǔ)在chunkserver上,創(chuàng)建文件時(shí)是只在master端修改元信息,鏈接時(shí)只是在chunkserver上對(duì)數(shù)據(jù)進(jìn)行鏈接;例如,用戶寫了一個(gè)長度為64mb的文件,則文件的長度、創(chuàng)建時(shí)間、修改時(shí)間。文件名等元信息記錄在master端,而用戶的實(shí)際數(shù)據(jù)記錄在chunkserver上,當(dāng)在volume之間進(jìn)行文件的移動(dòng)時(shí),是對(duì)實(shí)際的數(shù)據(jù)進(jìn)行鏈接,而元信息需要重新創(chuàng)建。

具體地,刪除源文件裝置14將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

在此,在本申請(qǐng)一優(yōu)選實(shí)施例中,優(yōu)選地,所述設(shè)備1還包括第一更新裝置(未示出):更新所述臨時(shí)文件的元信息,將所述臨時(shí)文件的元信息寫入所述目標(biāo)主節(jié)點(diǎn)設(shè)備,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作。在此,當(dāng)將存儲(chǔ)在chunkserver上的真實(shí)數(shù)據(jù)通過硬鏈接操作和/或數(shù)據(jù)復(fù)制操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中后,將臨時(shí)文件的元信息進(jìn)行更新,將創(chuàng)建臨時(shí)文件及對(duì)臨時(shí)文件進(jìn)行修改等元信息寫到目標(biāo)volume上的目標(biāo)主節(jié)點(diǎn)設(shè)備(目標(biāo)master)上,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作,如可調(diào)用commitandclose函數(shù)可實(shí)現(xiàn)元信息寫到目標(biāo)volume上,其中,所述commitandclose是盤古內(nèi)部將文件的元信息寫到master端并且將該文件的寫關(guān)閉掉的函數(shù);隨后將已有真實(shí)數(shù)據(jù)的臨時(shí)文件重命名為目標(biāo)文件,最后將源volume上的源文件刪除完成不同volume之間的文件重命名操作。

本申請(qǐng)一實(shí)施例所述用于分布式文件系統(tǒng)中執(zhí)行文件重命名操作的方法,通過在目標(biāo)volume上采用先創(chuàng)建一個(gè)臨時(shí)文件,再將臨時(shí)文件重命名到真正的文件是防止重命名過程中失敗,造成目標(biāo)volume端有一個(gè)殘缺的文件,影響用戶的使用,而且通過所述方法降低了在兩個(gè)volume上出現(xiàn)相同文件的概率,從而避免分布式文件系統(tǒng)中使用文件混亂的情況。

優(yōu)選地,所述源文件的文件類型包括:僅能追加寫的非日志文件、僅能追加寫的日志文件、可隨機(jī)寫入文件;圖7示出根據(jù)本申請(qǐng)?jiān)僖粋€(gè)方面的一個(gè)優(yōu)選實(shí)施例的數(shù)據(jù)操作裝置的結(jié)構(gòu)示意圖;所述數(shù)據(jù)操作裝置13包括:第一關(guān)聯(lián)單元131、第二關(guān)聯(lián)單元132和第三關(guān)聯(lián)單元133;其中,所述第一關(guān)聯(lián)單元131用于若所述源文件的類型為僅能追加寫的非日志文件,則將所述真實(shí)數(shù)據(jù)的最后一個(gè)數(shù)據(jù)塊進(jìn)行數(shù)據(jù)復(fù)制操作,并將其他數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;所述第二關(guān)聯(lián)單元132用于若所述源文件類型為僅能追加寫的日志文件,則將所述真實(shí)數(shù)據(jù)的所有的數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;所述第三關(guān)聯(lián)單元133用于若所述源文件的類型為可隨機(jī)寫入文件,則將所述真實(shí)數(shù)據(jù)的所有數(shù)據(jù)塊進(jìn)行復(fù)制操作。

在一優(yōu)選實(shí)施例中,例如在盤古文件系統(tǒng)中,文件類型有四種類型:normalfile、raidfile、logfile和randomaccessfile,其中,所述normalfile:用戶只能追加寫,在寫完后需要將數(shù)據(jù)的元信息存儲(chǔ)在主節(jié)點(diǎn)設(shè)備端;所述raidfile:對(duì)數(shù)據(jù)進(jìn)行磁盤失效算法(erasurecode)后的normalfile;所述logfile:用戶每次追加寫,寫完就算成功,如果寫失敗,則換一個(gè)數(shù)據(jù)塊進(jìn)行寫;所述randomaccessfile:用戶可以隨機(jī)寫的文件。由此可知,源文件的文件類型中僅能追加寫的非日志文件在盤古文件系統(tǒng)里包括normalfile和raidfile。在對(duì)源文件中真實(shí)數(shù)據(jù)進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作時(shí)根據(jù)不同的文件類型采用不同的操作方式,如對(duì)于僅能追加寫的非日志文件normalfile和raidfile,將該文件類型對(duì)應(yīng)的最后一個(gè)數(shù)據(jù)塊進(jìn)行復(fù)制操作,其余的數(shù)據(jù)塊進(jìn)行硬鏈接操作;若文件類型為logfile,則將所有的數(shù)據(jù)塊進(jìn)行硬鏈接;若文件類型為randomaccessfile,則將所有的數(shù)據(jù)塊進(jìn)行復(fù)制操作。在此,對(duì)于不同文件種類的處理方式的不同的目的是防止在重命名操作過程失敗,造成源volume上和目標(biāo)volume上都相同的文件,那么用戶再寫數(shù)據(jù)后,由于真正的數(shù)據(jù)在磁盤上是進(jìn)行的硬件,可能造成數(shù)據(jù)錯(cuò)亂的問題。

優(yōu)選地,所述設(shè)備1還包括:第一調(diào)用裝置(未示出),當(dāng)所述重命名請(qǐng)求為同一主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)源文件進(jìn)行重命名。

在此,當(dāng)客戶端在接收重命名請(qǐng)求后對(duì)請(qǐng)求進(jìn)行解析,確定重命名請(qǐng)求是否在同一主節(jié)點(diǎn)列表上,若在同一主節(jié)點(diǎn)組列表上,則直接發(fā)送重命名遠(yuǎn)程調(diào)用請(qǐng)求(renamerpc)即可,調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)的源文件進(jìn)行重命名。

優(yōu)選地,所述設(shè)備1還包括:第一掃描裝置(未示出),創(chuàng)建掃描線程,定期掃描所述臨時(shí)文件,若所述臨時(shí)文件在超時(shí)時(shí)間內(nèi)未被重命名為所述目標(biāo)文件,則刪除所述臨時(shí)文件。

在此,創(chuàng)建掃描線程,進(jìn)行定期地掃描臨時(shí)文件,如果被掃描的臨時(shí)文件在超過時(shí)間閾值內(nèi)沒有被重命名為目標(biāo)文件,則將其刪除,避免不用的臨時(shí)文件構(gòu)成的垃圾占用過多的空間,對(duì)其進(jìn)行垃圾回收。

在本申請(qǐng)所述的設(shè)備用于分布式文件系統(tǒng)執(zhí)行文件重命名操作,使得文件系統(tǒng)支持在不同主節(jié)點(diǎn)組列表之間能夠進(jìn)行重命名文件操作使上層用戶可以無感知的繼續(xù)使用文件系統(tǒng)。需要說明的是,在進(jìn)行文件重命名的過程中,無論是在相同主節(jié)點(diǎn)組列表中進(jìn)行還是在不同主節(jié)點(diǎn)組列表中進(jìn)行的都需要對(duì)文件所在的目錄進(jìn)行更新操作。

圖8示出根據(jù)本申請(qǐng)又一個(gè)方面的一種用于分布式文件系統(tǒng)執(zhí)行目錄重命名操作的設(shè)備結(jié)構(gòu)示意圖;其中,所述設(shè)備2包括:獲取目錄請(qǐng)求裝置21、創(chuàng)建臨時(shí)目錄裝置22、數(shù)據(jù)處理裝置23和刪除源目錄裝置24;其中,所述獲取目錄請(qǐng)求裝置21獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求;所述創(chuàng)建臨時(shí)目錄裝置22當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖;所述數(shù)據(jù)處理裝置23掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;所述刪除源目錄裝置24將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

在此,所述設(shè)備2包括但不限于用戶設(shè)備、或用戶設(shè)備與網(wǎng)絡(luò)設(shè)備通過網(wǎng)絡(luò)相集成所構(gòu)成的設(shè)備。所述用戶設(shè)備其包括但不限于任何一種可與用戶通過觸摸板進(jìn)行人機(jī)交互的移動(dòng)電子產(chǎn)品,例如智能手機(jī)、pda等,所述移動(dòng)電子產(chǎn)品可以采用任意操作系統(tǒng),如android操作系統(tǒng)、ios操作系統(tǒng)等。其中,所述網(wǎng)絡(luò)設(shè)備包括一種能夠按照事先設(shè)定或存儲(chǔ)的指令,自動(dòng)進(jìn)行數(shù)值計(jì)算和信息處理的電子設(shè)備,其硬件包括但不限于微處理器、專用集成電路(asic)、可編程門陣列(fpga)、數(shù)字處理器(dsp)、嵌入式設(shè)備等。所述網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、vpn網(wǎng)絡(luò)、無線自組織網(wǎng)絡(luò)(adhoc網(wǎng)絡(luò))等。優(yōu)選地,設(shè)備2還可以是運(yùn)行于所述用戶設(shè)備、或用戶設(shè)備與網(wǎng)絡(luò)設(shè)備、觸摸終端或網(wǎng)絡(luò)設(shè)備與觸摸終端通過網(wǎng)絡(luò)相集成所構(gòu)成的設(shè)備上的腳本程序。當(dāng)然,本領(lǐng)域技術(shù)人員應(yīng)能理解上述設(shè)備2僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的設(shè)備2如可適用于本申請(qǐng),也應(yīng)包含在本申請(qǐng)保護(hù)范圍以內(nèi),并在此以引用方式包含于此。

具體地,獲取目錄請(qǐng)求裝置21獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求。

在此,客戶端在收到目錄重命名請(qǐng)求后,按照所需重命名的源目錄所在的主節(jié)點(diǎn)組列表(源volume)的路由表對(duì)源目錄進(jìn)行解析,確定重命名請(qǐng)求是否在相同的volume上,若是,則客戶端發(fā)送重命名遠(yuǎn)程調(diào)用(renamerpc)接口對(duì)相應(yīng)源目錄進(jìn)行重命名即可,若不在同一volume上,則創(chuàng)建臨時(shí)目錄裝置22進(jìn)行后續(xù)的處理。

具體地,創(chuàng)建臨時(shí)目錄裝置22當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖。

在此,優(yōu)選地,所述目錄鎖為可讀不可寫鎖類。對(duì)于目錄的重命名操作,需要獲取整個(gè)目錄的鎖,保證在重命名操作過程中沒有用戶進(jìn)行寫操作,避免出現(xiàn)數(shù)據(jù)丟失的情況。客戶端獲取目錄鎖將目錄設(shè)置成只讀狀態(tài),然后客戶端定期向主節(jié)點(diǎn)設(shè)備發(fā)送遠(yuǎn)程調(diào)用請(qǐng)求,主節(jié)點(diǎn)設(shè)備在收到請(qǐng)求后確定客戶端存在,當(dāng)主節(jié)點(diǎn)設(shè)備一個(gè)只讀狀態(tài)的目錄長時(shí)間沒有收到請(qǐng)求后,主節(jié)點(diǎn)設(shè)備將該只讀狀態(tài)的目錄設(shè)置成正常狀態(tài),即可讀可寫狀態(tài),用戶還可以寫該目錄。在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建完臨時(shí)目錄后,需在臨時(shí)目錄下創(chuàng)建臨時(shí)文件,以使將源文件中的真實(shí)數(shù)據(jù)遷移到臨時(shí)文件中。

具體地,數(shù)據(jù)處理裝置23掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中。

在此,客戶端在獲取源目錄的目錄鎖后對(duì)源目錄進(jìn)行遞歸以獲取源目錄下的所有的文件,之后開始對(duì)所獲取的源文件進(jìn)行重命名操作,需要說明的是,在此不需要獲取文件的鎖,因已獲取目錄鎖。在所創(chuàng)建的臨時(shí)目錄中創(chuàng)建臨時(shí)文件,基于所述源文件的文件類型開始對(duì)真實(shí)的數(shù)據(jù)(data)在從節(jié)點(diǎn)服務(wù)器(數(shù)據(jù)塊存儲(chǔ)服務(wù)器,chunkserver)的磁盤上進(jìn)行硬鏈接(hardlink)或數(shù)據(jù)復(fù)制操作,以將源文件中真實(shí)的數(shù)據(jù)移動(dòng)到所創(chuàng)建的臨時(shí)目錄下的臨時(shí)文件中。在一優(yōu)選實(shí)施例中,如在源volume1上的源目錄/src/dir1/dir2/file需要重命名操作到目標(biāo)volume2上的目標(biāo)目錄/dst/dir3/file,則客戶端將源目錄下的文件移動(dòng)到目標(biāo)volume2上的一個(gè)臨時(shí)目錄下/pangutempdir/file,之后客戶端通知目標(biāo)volume2的主節(jié)點(diǎn)設(shè)備(master)將臨時(shí)目錄/pangutempdir/file重命名成目標(biāo)目錄/dst/dir3/file。

具體地,刪除源目錄裝置24將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

接前例,將源目錄下的所有文件進(jìn)行重命名操作之后即完成將源文件移動(dòng)到目標(biāo)目錄下,主節(jié)點(diǎn)設(shè)備收到客戶端請(qǐng)求后,將記錄文件名的目錄樹進(jìn)行加鎖,之后進(jìn)行臨時(shí)目錄重命名成目標(biāo)目錄的操作,完成目錄重命名操作后將源目錄進(jìn)行刪除。需要說明的是,在完成源目錄下所有文件的重命名操作后,不需要?jiǎng)h除源文件,因源目錄狀態(tài)是只讀的不能被寫操作處理,且在進(jìn)行文件重命名操作過程中可能會(huì)失敗,因此不能過早的刪除源文件。

優(yōu)選地,所述設(shè)備2還包括:第二更新裝置(未示出),進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作之后,更新所述臨時(shí)文件的元信息,將所述臨時(shí)文件的元信息寫入所述目標(biāo)主節(jié)點(diǎn)設(shè)備,并關(guān)閉所述臨時(shí)文件的當(dāng)前寫操作。

在此,所述設(shè)備2中的第二更新裝置與所述設(shè)備1中的第一更新裝置的內(nèi)容相同或基本相同,為簡明起見,不再贅述,僅以引用的方式包含于此。

優(yōu)選地,所述源文件的文件類型包括:僅能追加寫的非日志文件、僅能追加寫的日志文件、可隨機(jī)寫入文件;圖9示出根據(jù)本申請(qǐng)又一個(gè)方面的一個(gè)優(yōu)選實(shí)施例的數(shù)據(jù)處理的結(jié)構(gòu)示意圖;所述數(shù)據(jù)處理裝置23包括:第一處理單元231、第二處理單元232和第三處理單元233;所述第一處理單元231若所述源文件的類型為僅能追加寫的非日志文件,則將所述真實(shí)數(shù)據(jù)的最后一個(gè)數(shù)據(jù)塊進(jìn)行數(shù)據(jù)復(fù)制操作,并將其他數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;所述第二處理單元232若所述源文件類型為僅能追加寫的日志文件,則將所述真實(shí)數(shù)據(jù)的所有的數(shù)據(jù)塊通過硬鏈接操作對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件;所述第三處理單元233若所述源文件的類型為可隨機(jī)寫入文件,則將所述真實(shí)數(shù)據(jù)的所有數(shù)據(jù)塊進(jìn)行復(fù)制操作。

在此,圖9中所示的第一處理單元231、第二處理單元232和第三處理單元233和圖7中所示的第一關(guān)聯(lián)單元131、第二關(guān)聯(lián)單元132和第三關(guān)聯(lián)單元133的內(nèi)容相同或基本相同,為簡明起見,不再贅述,僅以引用的方式包含于此。

優(yōu)選地,所述設(shè)備2還包括:第二調(diào)用裝置(未示出),當(dāng)所述重命名請(qǐng)求為同一主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)源目錄進(jìn)行重命名。

在此,當(dāng)客戶端在接收目錄重命名請(qǐng)求后對(duì)該請(qǐng)求進(jìn)行解析,確定重命名請(qǐng)求是否在同一主節(jié)點(diǎn)列表上,若在同一主節(jié)點(diǎn)組列表上,則直接發(fā)送重命名遠(yuǎn)程調(diào)用請(qǐng)求(renamerpc)即可,調(diào)用重命名遠(yuǎn)程調(diào)用接口對(duì)相應(yīng)的源目錄進(jìn)行重命名操作。需要說明的是,進(jìn)行目錄重命名操作的過程中需要將目錄下的所有文件也進(jìn)行重命名操作。

優(yōu)選地,所述設(shè)備2還包括:獲取心跳請(qǐng)求裝置(未示出)獲取客戶端發(fā)送的心跳請(qǐng)求,若在超時(shí)時(shí)間內(nèi)未收到所述心跳請(qǐng)求,則將所述源目錄修改為可讀可寫狀態(tài)。

在此,在源volume上的主節(jié)點(diǎn)設(shè)備獲取到客戶端發(fā)送的心跳請(qǐng)求,若在超過預(yù)設(shè)時(shí)間內(nèi)未收到心跳請(qǐng)求,則將源目錄改為可讀可寫的狀態(tài)(normal狀態(tài)),所述心跳為客戶端向主節(jié)點(diǎn)設(shè)備發(fā)送遠(yuǎn)程調(diào)用請(qǐng)求(rpc),主節(jié)點(diǎn)設(shè)備收到rpc請(qǐng)求后確認(rèn)客戶端存在,這一過程稱為心跳。

優(yōu)選地,所述設(shè)備2還包括:第二掃描裝置(未示出),創(chuàng)建掃描線程,定期掃描所述臨時(shí)目錄,若所述臨時(shí)目錄在超時(shí)時(shí)間內(nèi)未被重命名為所述目標(biāo)目錄,則刪除所述臨時(shí)目錄。

在此,創(chuàng)建掃描線程,進(jìn)行定期地掃描臨時(shí)目錄,如果被掃描的臨時(shí)目錄在超過時(shí)間閾值內(nèi)沒有被重命名為目標(biāo)目錄,則將其刪除,避免不用的臨時(shí)目錄構(gòu)成的垃圾占用過多的空間,對(duì)其進(jìn)行垃圾回收。

在本申請(qǐng)所述的設(shè)備2用于分布式文件系統(tǒng)中執(zhí)行目錄重命名操作的實(shí)施例中,通過目錄鎖以設(shè)置目錄為可讀不可寫狀態(tài),掃描源目錄下的所有文件,將文件進(jìn)行重命名操作后在目標(biāo)主節(jié)點(diǎn)組列表上將臨時(shí)目錄重命名成目標(biāo)目錄,刪除源目錄,完成不同主節(jié)點(diǎn)組列表之間的重命名操作,盡量保持了原有的文件系統(tǒng)語義,使得上層用戶可以無感知的繼續(xù)使用文件系統(tǒng);同時(shí)在進(jìn)行重命名操作過程中將臨時(shí)文件的元信息存儲(chǔ)在主節(jié)點(diǎn)設(shè)備,完成了元信息的遷移,大量減少了數(shù)據(jù)的拷貝過程。進(jìn)一步地,創(chuàng)建了掃描線程對(duì)臨時(shí)目錄進(jìn)行掃描,將長期未進(jìn)行重命名操作的臨時(shí)目錄刪除避免占用過多的空間。

此外,本申請(qǐng)還提供了一種用于分布式文件系統(tǒng)執(zhí)行文件重命名操作的設(shè)備,包括:

處理器;

以及被安排成存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的存儲(chǔ)器,所述可執(zhí)行指令在被執(zhí)行時(shí)使所述處理器:

獲取文件重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的文件重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中獲取源文件的文件鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)文件并獲取所述臨時(shí)文件的文件鎖;

基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

將所述臨時(shí)文件重命名為目標(biāo)文件,并刪除所述源文件。

此外,本申請(qǐng)還提供了一種分布式文件系統(tǒng)中執(zhí)行目錄重命名操作的設(shè)備,包括:

處理器;

以及被安排成存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的存儲(chǔ)器,所述可執(zhí)行指令在被執(zhí)行時(shí)使所述處理器:

獲取目錄重命名請(qǐng)求,并解析所述重命名請(qǐng)求;

當(dāng)所述重命名請(qǐng)求為不同主節(jié)點(diǎn)組列表之間的目錄重命名請(qǐng)求,則從源主節(jié)點(diǎn)組列表中源目錄的目錄鎖,并在目標(biāo)主節(jié)點(diǎn)組列表中創(chuàng)建臨時(shí)目錄并在所述臨時(shí)目錄下創(chuàng)建臨時(shí)文件,并獲取所述臨時(shí)目錄的目錄鎖;

掃描所述源目錄,以獲取所述源目錄的所有源文件,基于所述源文件的文件類型,在存儲(chǔ)所述源文件對(duì)應(yīng)真實(shí)數(shù)據(jù)的從節(jié)點(diǎn)磁盤上進(jìn)行硬鏈接操作和/或數(shù)據(jù)復(fù)制操作,以將所述真實(shí)數(shù)據(jù)對(duì)應(yīng)關(guān)聯(lián)到所述臨時(shí)文件中;

將所述臨時(shí)文件重命名為目標(biāo)文件,基于所述目標(biāo)文件將所述臨時(shí)目錄重命名為目標(biāo)目錄,并刪除所述源目錄。

需要注意的是,本申請(qǐng)可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(asic)、通用目的計(jì)算機(jī)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本申請(qǐng)的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請(qǐng)的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,ram存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤及類似設(shè)備。另外,本申請(qǐng)的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。

另外,本申請(qǐng)的一部分可被應(yīng)用為計(jì)算機(jī)程序產(chǎn)品,例如計(jì)算機(jī)程序指令,當(dāng)其被計(jì)算機(jī)執(zhí)行時(shí),通過該計(jì)算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請(qǐng)的方法和/或技術(shù)方案。而調(diào)用本申請(qǐng)的方法的程序指令,可能被存儲(chǔ)在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過廣播或其他信號(hào)承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲(chǔ)在根據(jù)所述程序指令運(yùn)行的計(jì)算機(jī)設(shè)備的工作存儲(chǔ)器中。在此,根據(jù)本申請(qǐng)的一個(gè)實(shí)施例包括一個(gè)裝置,該裝置包括用于存儲(chǔ)計(jì)算機(jī)程序指令的存儲(chǔ)器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計(jì)算機(jī)程序指令被該處理器執(zhí)行時(shí),觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請(qǐng)的多個(gè)實(shí)施例的方法和/或技術(shù)方案。

對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本申請(qǐng)不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請(qǐng)的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請(qǐng)。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請(qǐng)的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請(qǐng)內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
洛隆县| 嘉黎县| 勃利县| 英德市| 新河县| 宁夏| 郑州市| 阜阳市| 板桥市| 丘北县| 丰镇市| 城口县| 太保市| 大化| 报价| 克什克腾旗| 郎溪县| 天气| 巴彦淖尔市| 黄大仙区| 姚安县| 信丰县| 腾冲县| 邳州市| 同心县| 丹寨县| 建阳市| 濮阳县| 阿城市| 恩施市| 井冈山市| 老河口市| 商河县| 徐水县| 磐石市| 清丰县| 井陉县| 北川| 关岭| 原阳县| 临沧市|