識信息包括表示Stash操作的新對象是否存在的標(biāo)識信息和表示Stash操作后續(xù)存在刪除操作的標(biāo)識信息。
[0041]詳細(xì)的,步驟Sll的具體過程為:
[0042]判斷待回放的日志操作是否為Stash操作,若是,在預(yù)處理列表中記錄日志操作及日志操作的操作信息;操作信息包括操作對象的地址ID信息,執(zhí)行操作的位置信息,以及表示Stash操作的新對象是否存在的標(biāo)識信息;
[0043]若待回放的日志操作不是Stash操作,判斷待回放的日志操作是否是刪除操作;若是,繼續(xù)判斷日志操作的操作對象是否是Stash操作的新對象;若日志操作的操作對象是Stash操作的新對象,確定日志操作為Stash操作后續(xù)存在的刪除操作,在預(yù)處理列表中記錄刪除操作及表示Stash操作后續(xù)存在刪除操作的標(biāo)識信息。
[0044]需要說明的是,直接糾刪要求數(shù)據(jù)可以回滾,為了實(shí)現(xiàn)這一特性,直接糾刪實(shí)現(xiàn)了stash操作。stash操作將當(dāng)前文件重命名為一個帶有版本號文件名,將修改后的文件內(nèi)容重新寫入一個新文件中(當(dāng)前文件),當(dāng)要求回滾時,可以直接刪除當(dāng)前文件,然后再將帶版本號的文件重命名為當(dāng)前文件,這樣可以實(shí)現(xiàn)數(shù)據(jù)的回滾功能。stash操作包含兩個操作,一個是將當(dāng)前文件重命名成帶版本號的文件,一個是將修改后的內(nèi)容寫入到當(dāng)前文件中。例如,磁盤中有一個文件名為A的文件,對它進(jìn)行stash操作,第一步將A重命名為AOl,第二步將修改后的內(nèi)容寫入到文件A中。
[0045]S12:在日志回放過程中,依據(jù)預(yù)處理列表中記錄的信息進(jìn)行日志回放。
[0046]其中,在日志回放過程中,依據(jù)預(yù)處理列表中記錄的信息進(jìn)行日志回放之前,對待回放的日志操作進(jìn)行分類處理。詳細(xì)的,對待回放的日志操作進(jìn)行分類處理的過程具體為:依據(jù)日志操作的操作信息中的地址ID信息和位置信息對待回放的日志操作進(jìn)行分類,分為無后續(xù)Stash操作、有后續(xù)Stash操作和Stash操作。
[0047]詳細(xì)的,首先判斷日志操作是否是無后續(xù)Stash操作;若不是無后續(xù)Stash操作,再判斷日志操作的當(dāng)前操作位置是否小于記錄中的位置,若日志操作的當(dāng)前操作位置小于記錄中的位置,則日志操作為有后續(xù)Stash操作,若日志操作的當(dāng)前操作位置是等于記錄中的位置,則日志操作為Stash操作。
[0048]其中,在日志回放過程中,依據(jù)預(yù)處理列表中記錄的操作進(jìn)行日志回放的過程具體為:若日志操作為無后續(xù)Stash操作,直接回放日志操作;若日志操作為有后續(xù)Stash操作,判斷日志操作的新對象是否存在;若是,將日志操作直接應(yīng)用于新對象進(jìn)行回放;若否,將日志操作采用順序執(zhí)行的方式進(jìn)行回放;若日志操作為Stash操作,判斷日志操作的新對象是否存在;若是,將日志操作采用順序執(zhí)行的方式進(jìn)行回放;若否,忽略當(dāng)前日志回放。
[0049]本發(fā)明所提供的一種云存儲系統(tǒng)中直接糾刪的日志回放優(yōu)化方法,依據(jù)直接糾刪的特征對待回放的日志進(jìn)行預(yù)處理,將待回放的日志中的Stash操作及Stash操作的標(biāo)識信息讀取出來并記錄在預(yù)處理列表中;在日志回放過程中,依據(jù)預(yù)處理列表中記錄的信息進(jìn)行日志回放??梢?,該方法結(jié)合了直接糾刪的特征,將待回放的日志中的Stash操作和標(biāo)識信息讀出來并記錄的列表中,在回放的過程中根據(jù)預(yù)處理列表中的記錄進(jìn)行日志的回放,由于預(yù)處理操作記錄了對象后續(xù)是否存在刪除操作,以及新對象是否存在,根據(jù)就這些記錄可以精簡或者忽略日志回放中的某些操作,從而提高了日志回放的效率。
[0050]具體的,該方法對日志回放的過程進(jìn)行優(yōu)化,主要是根據(jù)直接糾刪的特征,采用預(yù)處理的方式,將待回放的日志預(yù)先處理一遍,并記錄對象的回放操作中的Stash操作,后續(xù)是否存在新對象的刪除操作,新對象是否存在以及成功執(zhí)行到的位置等信息,根據(jù)預(yù)處理記錄的信息進(jìn)行分析優(yōu)化日志回放的操作,可以精簡和優(yōu)化日志的回放。在能夠保證日志回放結(jié)果相同的前提下,提高日志回放效率。
[0051]請參考圖2,圖2為本發(fā)明所提供一種云存儲系統(tǒng)中直接糾刪的日志回放優(yōu)化裝置的結(jié)構(gòu)示意圖,該裝置包括:
[0052]預(yù)處理模塊101,用于對待回放的日志進(jìn)行預(yù)處理,將待回放的日志中的Stash操作及Stash操作的標(biāo)識信息讀取出來,并將記錄在預(yù)處理列表中;
[0053]回放模塊102,用于在日志回放過程中,依據(jù)預(yù)處理列表中記錄的信息進(jìn)行日志回放。
[0054]詳細(xì)的,預(yù)處理模塊包括:
[0055]第一判斷單元,用于判斷待回放的日志操作是否為Stash操作;若是,在預(yù)處理列表中記錄日志操作及日志操作的操作信息;操作信息包括操作對象的地址ID信息,執(zhí)行操作的位置信息,以及表示Stash操作的新對象是否存在的標(biāo)識信息;
[0056]第二判斷單元,用于若待回放的日志操作不是Stash操作,判斷待回放的日志操作是否是刪除操作,若是,繼續(xù)判斷日志操作的操作對象是否是Stash操作的新對象;若日志操作的操作對象是Stash操作的新對象,確定日志操作為Stash操作后續(xù)存在的刪除操作,在預(yù)處理列表中記錄刪除操作及表示Stash操作后續(xù)存在刪除操作的標(biāo)識信息。
[0057]可選的,所述裝置還包括:分類模塊,用于對待回放的日志操作進(jìn)行分類處理。
[0058]其中,分類模塊,用于對待回放的日志操作進(jìn)行分類處理,包括:
[0059]分類模塊,用于依據(jù)日志操作的操作信息中的地址ID信息和位置信息對待回放的日志操作進(jìn)行分類,分為無后續(xù)Stash操作、有后續(xù)Stash操作和Stash操作。
[0060]其中,回放模塊包括:
[0061 ]第一回放單元,用于若日志操作為無后續(xù)Stash操作,直接回放日志操作;
[0062]第二回放單元,用于若日志操作為有后續(xù)Stash操作,判斷日志操作的新對象是否存在;若是,將日志操作直接應(yīng)用于新對象進(jìn)行回放;若否,將日志操作采用順序執(zhí)行的方式進(jìn)行回放;
[0063]第三回放單元,用于若日志操作為Stash操作,判斷日志操作的新對象是否存在;若是,將日志操作采用順序執(zhí)行的方式進(jìn)行回放;若否,忽略當(dāng)前日志回放。
[0064]具體的,參見圖3,圖3為日志預(yù)處理流程圖。云存儲系統(tǒng)啟動的過程中,預(yù)處理模塊首先對待回放的日志進(jìn)行預(yù)處理,判斷待回放的操作的是否是Stash操作,如果是Stash操作則將記錄該操作及該操作的相關(guān)信息,如操作對象ID,執(zhí)行的位置信息,以及Stash操作到的新對象是否存在等信息;同時也判斷待回放的操作的是否是刪除操作,如果是刪除操作再判斷該刪除操作的操作對象是否是Stash操作到的新對象,如果是,記錄下刪除操作,也記錄下Stash操作后續(xù)存在刪除操作的標(biāo)識信息。圖中的remove代表刪除,remove操作為刪除操作。
[0065]具體的,分類模塊將對待回放的操作進(jìn)行分類處理;主要是根據(jù)操作對象ID判斷是否存在后續(xù)的Stash操作和回放執(zhí)行到的位置進(jìn)行分類,主要分為:無后續(xù)Stash操作、Stash操作之前的操作、Stash操作。
[0066]如果是無后續(xù)Stash操作,直接執(zhí)行日志回放操作。
[0067]如果是Stash之前的操作,還需要判斷新對象是否存在,如果存在則該回放的操作需要直接應(yīng)用到新對象;如果新對象不存在,并且后續(xù)也沒有刪除操作,則順序執(zhí)行即可;如果新對象不存在,但是存在后續(xù)的刪除操作,則忽略該回放的操作。
[0068]如果當(dāng)前回放的操作就是Stash操作,同樣需要判斷新對象是否存在,如果存在則忽略本次Stash操作;如果新對象不存在,而且也沒有后續(xù)的刪除操作,則順序執(zhí)行本次回放的操作;如果新對象不存在,但是存在后續(xù)的刪除操作,則忽略本次回放的操作。
[0069]具體的,參見圖4,圖4為日志回放流程圖?;胤拍K在回放日志時,需要根據(jù)分類模塊的