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

管理鎖定和事務的制作方法

文檔序號:6475048閱讀:222來源:國知局
專利名稱:管理鎖定和事務的制作方法
技術領域
本發(fā)明旨在管理鎖定和事務。
背景技術
資源(例如,存儲器、磁盤驅(qū)動器、光纖信道等等)常常是在多個應用程序之間共享的。例如,在多個客戶端計算機中,每一個都運行客戶端應用程序,它們可以訪問具有資源集的同一臺服務器計算機。在某些情況下,應用程序可能希望訪問資源,而不允許任何其他應用程序同時訪問該資源。例如,如果第一應用程序希望更新數(shù)據(jù)庫中的數(shù)據(jù),第一應用程序可能希望訪問數(shù)據(jù)庫以進行更新,而不希望有其他應用程序潛在地試圖更新數(shù)據(jù)庫的相同部分。
為確保對資源的連續(xù)訪問,常常使用鎖。應用程序獲取資源上的鎖,以便可以訪問資源。例如,如果第一應用程序獲取了第一資源上的鎖,則第二應用程序?qū)⒉荒茉L問第一資源,直到第一資源上的鎖被第一應用程序釋放。
在某些情況下,來自客戶端計算機中的客戶端應用程序的請求可以發(fā)送到服務器計算機上的第一代理。第一代理可以將請求傳遞給第二代理,而第二代理又可以將請求傳遞給第三代理。第一代理充當?shù)诙淼目蛻舳耍诙碛殖洚數(shù)谌淼目蛻舳?。第三代理可以對請求進行處理(例如,檢索數(shù)據(jù)),并將結果返回到第二代理,而第二代理又將結果返回到第一代理。然后,第一代理將結果返回到客戶端應用程序。雖然在此示例中使用了三個代理,也可以使用兩個或更多代理一起協(xié)作,以傳遞請求并返回結果,這些代理可以簡稱為“級聯(lián)代理”。
在某些情況下,級聯(lián)代理集中的每一個代理都獲取資源上的鎖。然而,沒有鏈接指出代理為其獲取了鎖的客戶端應用程序。如此,有可能第一代理為某客戶端應用程序獲取了資源上的鎖。然后,當?shù)诙斫邮盏絹碜缘谝淮淼恼埱螅⒃噲D獲取資源上的鎖時,第二代理被拒絕給予鎖。由于第一和第二代理兩者都在處理客戶端應用程序的同一個請求,因此,兩者都應該能夠鎖定資源。如此,某些常規(guī)系統(tǒng)不支持級聯(lián)代理的鎖定操作。
可能需要多個鎖才能處理一個請求。某些常規(guī)系統(tǒng)需要客戶端應用程序獲取處理一個請求所需的所有鎖。例如,如果第一應用程序需要訪問第一和第二資源,某些系統(tǒng)要求第一應用程序在進行任何處理之前獲取兩個資源的鎖。如果第一應用程序獲取第一資源上的鎖,但是,第二應用程序獲取第二資源上的鎖,則第一資源等待第二資源上的鎖。
某些系統(tǒng)要求客戶端應用程序來對鎖進行管理。進行鎖定的規(guī)則可能很麻煩,這會導致客戶端應用程序變得更加復雜。
此外,某些數(shù)據(jù)庫管理系統(tǒng)還包括事務管理器。這些事務管理器會記錄動作的結果,而不記錄動作本身。
當前技術需要一種改進的鎖定和事務管理系統(tǒng)。

發(fā)明內(nèi)容
提供了用于進行鎖定的方法、系統(tǒng)和程序。接收用第一操作標識符鎖定第一資源的請求。第一資源用第一操作標識符進行鎖定?;谝獮檎埱髨?zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
更多的實現(xiàn)方式提供了用于進行鎖定的方法、系統(tǒng)和程序。接收用第一操作標識符鎖定資源的請求。判斷資源是否用第一操作標識符進行了鎖定。如果判斷資源被用第一操作標識符進行了鎖定,則請求接收到具有指出資源被用第一操作標識符進行了鎖定的指示的響應。如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
其他實現(xiàn)方式提供了用于進行死鎖管理的方法、系統(tǒng)和程序。對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示。鎖定請求被放置在具有鎖隊列超時時段的隊列中。如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求。
本發(fā)明的所描述的實現(xiàn)方式提供了鎖和事務管理系統(tǒng)的方法、系統(tǒng)和程序。
本發(fā)明在第一方面相應地提供了用于進行鎖定的方法,包括接收用第一操作標識符鎖定第一資源的請求;用第一操作標識符鎖定第一資源;以及基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
優(yōu)選情況下,第一方面的方法進一步包括判斷第二資源應該用第一操作標識符進行鎖定;以及用第一操作標識符鎖定第二資源。優(yōu)選情況下,該方法進一步包括判斷第二資源應該用第二操作標識符進行鎖定;獲取第二操作標識符;以及用第二操作標識符鎖定第二資源。
本發(fā)明在第二方面相應地提供了用于進行鎖定的系統(tǒng),包括處理器;處理器可以訪問的計算機可讀的介質(zhì);以及包括能夠使處理器執(zhí)行如下操作的代碼的程序邏輯(i)接收用第一操作標識符鎖定第一資源的請求;(ii)用第一操作標識符鎖定第一資源;以及(iii)基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
優(yōu)選情況下,在第二方面的系統(tǒng)中,代碼能夠使處理器進一步執(zhí)行如下操作判斷第二資源應該用第一操作標識符進行鎖定;以及用第一操作標識符鎖定第二資源。優(yōu)選情況下,代碼能夠使處理器進一步執(zhí)行如下操作判斷第二資源應該用第二操作標識符進行鎖定;獲取第二操作標識符;以及用第二操作標識符鎖定第二資源。
本發(fā)明在第三方面相應地提供了存儲在計算機可使用的介質(zhì)中的計算機程序產(chǎn)品,包括計算機可讀的程序裝置,用于接收用第一操作標識符鎖定第一資源的請求;用第一操作標識符鎖定第一資源;以及基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
優(yōu)選情況下,第三方面的計算機程序產(chǎn)品進一步包括計算機可讀的程序裝置,用于判斷第二資源應該用第一操作標識符進行鎖定;以及用第一操作標識符鎖定第二資源。優(yōu)選情況下,第三方面的計算機程序產(chǎn)品進一步包括計算機可讀的程序裝置,用于判斷第二資源應該用第二操作標識符進行鎖定;獲取第二操作標識符;以及用第二操作標識符鎖定第二資源。
本發(fā)明在第四方面相應地提供了用于進行鎖定的系統(tǒng),包括代理;被代理控制的第一資源;不被代理控制的第二資源;用于接收用第一操作標識符鎖定第一資源的請求的裝置;用于用第一操作標識符鎖定第一資源的裝置;基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定的裝置。
本發(fā)明在第五方面相應地提供了用于進行鎖定的方法,包括接收用第一操作標識符鎖定資源的請求;判斷資源是否用第一操作標識符進行鎖定;如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求;如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
優(yōu)選情況下,在第五方面的方法中,判斷資源是否用第一操作標識符進行鎖定的過程進一步包括將第一操作標識符與用于鎖定資源的操作標識符進行匹配。
本發(fā)明在第六方面相應地提供了用于進行鎖定的系統(tǒng),包括處理器;處理器可以訪問的計算機可讀的介質(zhì);以及包括能夠使處理器執(zhí)行如下操作的代碼的程序邏輯(i)接收用第一操作標識符鎖定第一資源的請求;(ii)判斷資源是否用第一操作標識符進行鎖定;(iii)如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求;如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
優(yōu)選情況下,在第六方面的系統(tǒng)中,在判斷資源是否被用第一操作標識符進行了鎖定的過程中,代碼能夠使處理器進一步執(zhí)行如下操作將第一操作標識符與用于鎖定資源的操作標識符進行匹配。
本發(fā)明在第七方面相應地提供了存儲在計算機可使用的介質(zhì)中的計算機程序產(chǎn)品,包括計算機可讀的程序裝置,用于接收用第一操作標識符鎖定資源的請求;判斷資源是否用第一操作標識符進行鎖定;如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求;如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
優(yōu)選情況下,第七方面的計算機程序產(chǎn)品進一步包括計算機可讀的程序裝置,用于將第一操作標識符與用于鎖定資源的操作標識符進行匹配。
本發(fā)明在第八方面相應地提供了用于進行鎖定的系統(tǒng),包括用于接收用第一操作標識符鎖定資源的請求的裝置;一種裝置,用于通過將第一操作標識符與用于鎖定資源的操作標識符進行匹配,判斷資源是否被用第一操作標識符進行了鎖定;一種裝置,用于,如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求;以及一種裝置,如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
本發(fā)明在第九方面相應地提供了用于進行死鎖管理的方法,包括對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示;將鎖定請求放置在具有鎖隊列超時時段的隊列中;以及如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求。
優(yōu)選情況下,第九方面的方法進一步包括,如果在鎖隊列超時時段內(nèi)不允許鎖定請求,則拒絕鎖定請求。
本發(fā)明在第十方面相應地提供了用于進行死鎖管理定的系統(tǒng),包括處理器;處理器可以訪問的計算機可讀的介質(zhì);以及包括能夠使處理器執(zhí)行如下操作的代碼的程序邏輯(i)對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示;(ii)將鎖定請求放置在具有鎖隊列超時時段的隊列中;以及(iii)如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求。
優(yōu)選情況下,在第十方面的系統(tǒng)中,代碼能夠使處理器進一步執(zhí)行如下操作如果在鎖隊列超時時段內(nèi)不允許鎖定請求,則拒絕鎖定請求。
本發(fā)明在第十一方面相應地提供了存儲在計算機可使用的介質(zhì)中的計算機程序產(chǎn)品,包括計算機可讀的程序裝置,用于,對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示;將鎖定請求放置在具有鎖隊列超時時段的隊列中;以及如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求。
優(yōu)選情況下,第十一方面的計算機程序產(chǎn)品進一步包括,計算機可讀的程序裝置,用于,如果在鎖隊列超時時段內(nèi)不允許鎖定請求,則拒絕鎖定請求。
本發(fā)明在第十二方面相應地提供了用于進行死鎖管理的系統(tǒng),包括用于,對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示的裝置;用于將鎖定請求放置在具有鎖隊列超時時段的隊列中的裝置;用于,如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求的裝置。


現(xiàn)在將參考附圖,只作為示例,對本發(fā)明的優(yōu)選實施例進行描述,其中圖1以方框圖顯示了根據(jù)本發(fā)明的優(yōu)選實施例的涉及四個不同角色的用于進行鎖定和事務管理的參考模型。
圖2A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的具有事務管理器的鎖定環(huán)境。
圖2B顯示了根據(jù)本發(fā)明的優(yōu)選實施例的沒有事務管理器的鎖定環(huán)境。
圖2C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的具有不能識別鎖定的客戶端的鎖定環(huán)境。
圖3顯示了根據(jù)本發(fā)明的優(yōu)選實施例的級聯(lián)鎖定。
圖4A顯示了在根據(jù)本發(fā)明的優(yōu)選實施例的在存儲空間不足的虛擬化系統(tǒng)上創(chuàng)建卷的過程。
圖4B顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在存儲空間不足的虛擬化系統(tǒng)上創(chuàng)建卷的動作序列中鎖定步驟和主要客戶端動作請求的表。
圖5A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的從一個虛擬化系統(tǒng)向另一個虛擬化系統(tǒng)移動存儲空間的過程。
圖5B和5C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在從一個虛擬化系統(tǒng)向另一個虛擬化系統(tǒng)移動存儲空間的隔離鎖定級別下采取的動作序列中的鎖定步驟和主要客戶端動作請求的表。
圖6A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的從虛擬化系統(tǒng)向邏輯卷管理器移動存儲空間的過程。
圖6B和6C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在從虛擬化系統(tǒng)向邏輯卷管理器虛移動存儲空間的隔離鎖定級別下采取的動作序列中的鎖定步驟和主要客戶端動作請求的表。
圖7A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的創(chuàng)建邏輯卷和從多個源提供邏輯卷的過程。
圖7B和7C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在創(chuàng)建邏輯卷和從多個源提供邏輯卷的隔離鎖定級別下采取的動作序列中的鎖定步驟和主要客戶端動作請求的表。
圖8顯示了根據(jù)本發(fā)明的優(yōu)選實施例的鎖定和事務管理(LTM)系統(tǒng)中為處理鎖定而實現(xiàn)的邏輯。
圖9顯示了根據(jù)本發(fā)明的優(yōu)選實施例的鎖定管理器實現(xiàn)的邏輯。
圖10顯示了根據(jù)本發(fā)明的優(yōu)選實施例的事務管理器實現(xiàn)的邏輯。
圖11A和11B顯示了根據(jù)本發(fā)明的優(yōu)選實施例由級聯(lián)代理在判斷鎖定資源要使用哪個操作標識符時所執(zhí)行的邏輯。
圖11C和11D顯示了根據(jù)本發(fā)明的優(yōu)選實施例當?shù)谝淮礞i定由第二代理控制的資源并且第二代理接收到另一個鎖定該資源的請求時由級聯(lián)代理執(zhí)行的邏輯。
圖12顯示了根據(jù)本發(fā)明的優(yōu)選實施例鎖定管理器為允許客戶端的不同級別的鎖定而實現(xiàn)的邏輯。
圖13顯示了根據(jù)本發(fā)明的優(yōu)選實施例由代理實現(xiàn)的邏輯。
圖14顯示了根據(jù)本發(fā)明的優(yōu)選實施例由鎖定管理器為解決死鎖而實現(xiàn)的邏輯。
圖15顯示了根據(jù)本發(fā)明的優(yōu)選實施例的識別鎖定的客戶端、事務管理服務器、鎖定管理服務器和鎖定管理代理的體系結構。
具體實施例方式
提供了鎖定和事務管理(LTM)系統(tǒng)。LTM系統(tǒng)標識鎖定注意事項和支持“虛擬化”和“虛擬存儲服務”的要求。術語“虛擬化”是指來自多個網(wǎng)絡存儲設備的物理存儲設備匯聚到好像是從單服務器計算機集中管理的單個存儲設備。在本發(fā)明的優(yōu)選實施例中,虛擬化被用作存儲區(qū)域網(wǎng)絡(SAN)的一部分。存儲區(qū)域網(wǎng)絡(SAN)是將共享數(shù)據(jù)存儲設備與被客戶端計算機訪問的關聯(lián)的服務器計算機互相連接的高速網(wǎng)絡或子網(wǎng)。術語“虛擬存儲設備”是指已經(jīng)被匯聚的存儲設備。術語“虛擬存儲服務”是指由匯聚的存儲設備提供的服務(例如,鎖定)。除了指定鎖定管理協(xié)議之外,LTM系統(tǒng)還支持鎖定管理器。
此外,LTM系統(tǒng)還支持事務管理器并定義支持事務管理所需的鎖定。在本發(fā)明的優(yōu)選實施例中,鎖定管理器是為識別鎖定的客戶端和識別鎖定的代理提供鎖定功能并遵循鎖定管理器的規(guī)則的“鎖定管理服務器”。
在本發(fā)明的優(yōu)選實施例中,事務管理器是管理和控制事務的執(zhí)行和提交或回滾處理的啟動的“事務管理服務器”。事務是具有“ACID”屬性的操作。即,事務是原子性的,產(chǎn)生一致的結果,是孤立的,并且是持久的。簡而言之,事務是要么“全部完成”要么“全部失敗”的操作,這在整個系統(tǒng)或組件故障中得到保證。操作是來自單個客戶端的代理請求(或“動作”)的序列。這還可以稱為“客戶端操作”。在存在事務管理器的情況下,操作就是事務?!疤峤弧笔侵复_保事務的動作全部都被執(zhí)行的事務功能?!盎貪L”是指涉及“撤消”事務的動作的事務功能。事務管理器維護了事務日志,該事務日志是事務信息的非易失性記錄。
LTM系統(tǒng)鎖定后面的基本原理是定義事務相關的鎖定,然后定義沒有事務支持的鎖定?;谑聞赵O計,預期沒有事務支持的鎖定降低設計要求,以適應不太嚴格的設計。意圖是,確保沒有事務支持的鎖定的這種降低要求的實現(xiàn)方式是事務相關的鎖定設計的子集,降低要求的沒有事務支持的鎖定設計事實上可以擴展到事務處理。
LTM系統(tǒng)鎖定試圖在鎖定管理服務器中而不是在客戶端或代理中添加智能。這樣做的基本原理是基于這樣的假定如果智能是局部的,而不是跨多個供應商客戶端和代理而分布,則會比較容易地使功能正確運轉(或至少一致)。
引言鎖定管理協(xié)議的目的是支持多個非協(xié)作性客戶端針對代理的分布式網(wǎng)絡而進行操作。非協(xié)作性客戶端是彼此獨立、爭奪資源、并彼此獨立執(zhí)行的多個客戶端。鎖定用于管理異構存儲區(qū)域網(wǎng)絡中的來自多個供應商的客戶端的潛在地發(fā)生沖突的操作。參與鎖定機制的客戶端將被確保,它們的操作不會與可能在存儲區(qū)域網(wǎng)絡正在進行的其他操作發(fā)生沖突。
LTM系統(tǒng)中的鎖定管理可以支持多個“支持級別”。最堅固的級別是“事務”鎖定級別。對于鎖定支持的事務級別的支持要求有“事務管理器”。支持的下一個級別叫做“隔離”鎖定級別,不要求存在事務管理器。支持的最后一個級別叫做“客戶端控制的”鎖定級別。這些級別中的每一個級別的特征都在于它們保證的ACID(原子性、一致性、完整性和持久性)支持。下面的表1中概述了所提供的支持表1

原子性“原子性”是指要么完全完成要么根本不執(zhí)行的“操作”(其中,操作被定義為向一個或多個代理的多個請求)。對于原子性的支持要求在操作失敗的情況下撤消“操作”請求的“回滾”功能。因此,原子性在“事務”鎖定級別得到支持,事務管理器支持/驅(qū)動回滾過程。
“隔離”和“客戶端控制的”鎖定級別不支持或要求原子性支持。結果,這些級別可以在沒有事務管理器的情況下工作。
一致性“一致性”是指使“模型”數(shù)據(jù)保持一致狀態(tài)。一致性在事務鎖定級別得到支持。一致性不一定在隔離或客戶端控制的級別得到支持。在本發(fā)明的優(yōu)選實施例中,預計代理確保它們的模型是自相一致的。然而,沒有辦法確保一個代理的模型與其他代理的模型一致。
由于回滾在隔離或客戶端控制的級別得不到支持,因此,“交叉代理”模型不一定保持一致狀態(tài)。例如,如果客戶端更改區(qū)域(例如,結構請求)并重新分配新區(qū)域中的卷(例如,陣列請求),在發(fā)生故障的情況下,這可能會“執(zhí)行到一半”。在隔離和客戶端控制的鎖定級別,SAN模型級別中的一致性由客戶端決定。
隔離在鎖定管理的上下文中,LTM系統(tǒng)將操作定義為代表單個客戶端啟動的相關的代理動作(或請求)的序列。動作是從單個客戶端發(fā)往代理的單個請求??蛻舳瞬僮魍ǔ0瑢Ω鞣N代理的多個動作(或請求)。對于隔離,“操作”似乎它們與其他操作一起連續(xù)地執(zhí)行。盡管LTM系統(tǒng)操作并行地執(zhí)行,對于每一個操作“0”,似乎其他操作要么在操作“0”之前執(zhí)行,要么在操作“0”之后執(zhí)行,而不是兩者。這就意味著,在LTM系統(tǒng)的鎖定管理下,與其他LTM系統(tǒng)操作或一般信息模型(CIM)操作并行地執(zhí)行的LTM系統(tǒng)操作,好像是唯一在執(zhí)行的操作。CIM是為管理信息創(chuàng)建對象模型的標準。對象模型是諸如存儲區(qū)域網(wǎng)絡之類的網(wǎng)絡資源的面向?qū)ο蟮谋硎尽IM標準是Distributed Management TaskForce(DMTF),Inc.所提供的。有關CIM標準的更多信息,請參見2002年5月發(fā)表的“Specification for CIM Operations over HTTP”,1.1版本,以下簡稱為“CIM規(guī)范”,這里原文引用了該規(guī)范作為參考。
隔離要求鎖定阻止修改由動作所使用的信息。隔離在事務和隔離鎖定級別都得到支持。隔離可以在使用“客戶端控制的”鎖定級別時由客戶端邏輯來實現(xiàn),但是,鎖定機制本身不能保證隔離。
為支持隔離,鎖定設計支持“讀取”鎖定的概念,這與“更改”鎖定有所不同。讀取鎖允許客戶端持有客戶端沒有明確的更改意圖,但是不希望在客戶端的操作在進行中時更改值的資源。例如,客戶端可能掃描多個存儲池,以查找用于創(chuàng)建卷的可用空間,并且客戶端將從其中一個存儲池創(chuàng)建卷。不是獲取所有存儲池上的“更改”鎖,客戶端可以獲取所有存儲池上的“讀取”鎖,并對客戶端選擇的一個存儲池發(fā)出“更改”鎖。
盡管鎖定支持“讀取”鎖以支持隔離,但是,對于客戶端將不會重新讀取或依賴信息的情況,鎖定設計還支持“臟讀”(即使在沒有獲取“讀取”鎖的情況下,也允許讀取)。臟讀是在沒有獲取鎖(即,讀取或更改)的情況下從代理那里檢索信息的任何客戶端請求。這叫做臟讀,是因為讀取沒有被保護。對相同信息的隨后的讀取可能會產(chǎn)生不同的結果。
持久性對于持久性,當返回成功時,結果實際產(chǎn)生?!俺志眯浴钡囊饬x根據(jù)所使用的鎖定的級別而不同。在事務鎖定級別的上下文中,持久性是指,當客戶端操作完成時(成功或失敗),結果可以跨越故障地得到保證。這暗示日志和2階段提交過程,以確保所有代理都已經(jīng)提交(或回滾)。在2階段提交過程中,第一進程向其他進程表示,它正在準備提交。每一個其他進程都準備提交。然后,第一進程提交,其他進程也提交。日志確保了,在重新啟動時,事務管理器可以確定將發(fā)生什么并確保確實發(fā)生。
“隔離”或“客戶端控制的”鎖定級別的上下文中的持久性保證了,當客戶端獲取成功的返回時,已經(jīng)滿足請求。這包括代理模型上的鎖定請求,以及動作。那些沒有被響應的請求不能被認為已經(jīng)完成(雖然它們可能已經(jīng)完成)。本質(zhì)上,客戶端應用程序可以在最后一個肯定響應之前認為操作完成。
鎖定/事務管理組件在對鎖定管理和事務管理的討論中,有許多參與該過程的組件。這里,為便于參考,概括了組件。
元件管理器是用于管理SAN環(huán)境中的特定設備的管理工具。在鎖定設計的上下文中,假設元件管理器是不能識別鎖定的,不是CIM客戶端。如果元件管理器被編碼為CIM客戶端,那么,它接受管轄識別鎖定的客戶端的規(guī)則的約束。
鎖定管理器也被稱為“鎖定管理服務器”,為識別鎖定的客戶端和識別鎖定的代理提供鎖定功能,并遵循鎖定管理器的規(guī)則。
識別鎖定的代理是支持代理的鎖定請求并支持代理的鎖定規(guī)則的代理或?qū)ο蠊芾砥鳌?br> 識別鎖定的客戶端是對資源進行鎖定并遵循鎖定的客戶端規(guī)則的客戶端。
不能識別鎖定的代理是不支持鎖定請求的代理或CIM對象管理器。
不能識別鎖定的客戶端是根本不進行鎖定的客戶端。
事務管理器是管理和控制事務的執(zhí)行(和提交或回滾處理的啟動)的服務器。
由于可縮放性的原因,鎖定管理器和事務管理器設計包含了這些組件中的每一個組件的多個實例(包括多個鎖定管理器和多個事務管理器)。
設計原則有一組鎖定可以支持的設計原則。并非所有的設計原則都適用于所有級別。在下面的表2中概述了設計原則和它們所適用的鎖定級別
表2

為保護來自多個同時的非協(xié)作性客戶端的跨多個代理的操作,所有鎖定機制都支持跨非協(xié)作性客戶端的對SAN中的管理信息的協(xié)調(diào)訪問。依據(jù)客戶端所希望的功能,所需的鎖定級別可以不同,但所有鎖定級別都允許客戶端通過鎖定保護客戶端操作。
鎖定機制對付不進行鎖定的客戶端或其他管理工具的能力是對當今不進行鎖定的現(xiàn)有的管理工具的讓步。鎖定機制能夠以保護進行鎖定的客戶端的方式對付現(xiàn)有的管理工具。
比整個代理提供更細微的鎖定,通過允許客戶端以小于整個代理的粒度進行鎖定而允許客戶端獲得更大的并行性。
定義可擴展的鎖定體系結構定義了允許擴展?jié)M足SAN管理的日益發(fā)展的需求的體系結構。
定義可以通過Storage Networking Industry Association(SNIA)和Distributed Management TaskForce(DMTF)標準化的鎖定體系結構,允許鎖定體系結構可以在CIM管理的環(huán)境的上下文中使用,以便使它可以作為CIM的標準的潛在擴展使用。
為級聯(lián)代理提供支持是另一個設計原則。在級聯(lián)代理支持方面,虛擬化涉及存儲區(qū)域網(wǎng)絡(SAN)中的元件的級聯(lián)(例如,存儲設備)。級聯(lián)代理是也充當“較低級別的”代理的鎖定管理客戶端的鎖定管理代理。LTM系統(tǒng)允許虛擬化系統(tǒng)能夠作為客戶端操作的結果在較低級別的代理上執(zhí)行動作。動作是從單個客戶端發(fā)往代理的單個請求??蛻舳瞬僮魍ǔ0瑢Ω鞣N代理的多個“動作”。具體來說,利用LTM系統(tǒng),級聯(lián)代理判斷對較低級別的代理的動作是否與發(fā)出客戶端相沖突。在本發(fā)明的優(yōu)選實施例中,如果需要鎖定才能完成客戶端請求,則級聯(lián)代理代表客戶端獲取鎖定。如果客戶端請求觸發(fā)了動作,但不是完成客戶端請求所必需的,則級聯(lián)代理可以自己執(zhí)行該動作。
“隨意進行鎖定”支持允許客戶端“隨意進行鎖定”,鎖定不必由客戶端獲取,直到客戶端決定采取動作。這就允許虛擬化系統(tǒng)調(diào)用較低級別的代理上的功能?!半S意進行鎖定”支持還給客戶端更多對代碼邏輯的自由度(例如,搜索存儲空間,當發(fā)現(xiàn)時,鎖定并移到下一步驟)。
可縮放的設計是指所有級別的鎖定都擴展到企業(yè)SAN配置的設計原則。這就意味著,鎖定設計避免了支持鎖定設計不壓倒網(wǎng)絡所需的體系結構和通信中的“瓶頸”。
利用對客戶端所選定的鎖定級別的支持,客戶端理解客戶端操作的特性以及它試圖取得什么。鎖定設計支持由客戶端所選擇的鎖定級別。
對客戶端“智能”依賴程度低,而是將智能放入鎖定管理器或代理中,支持不禁止有用的工作的客戶端的規(guī)則??蛻舳说囊?guī)則不會過度復雜。隔離和事務鎖定級別避免過分地依賴行為良好的客戶端??蛻舳藥缀鯖]有它們需要遵循的規(guī)則,違犯正當?shù)男袨榈目蛻舳怂扇〉膭幼鞅粡娭?。正在使用“隔離”或“事務”鎖定級別的識別鎖定的客戶端不必擔心它是否正確地進行了鎖定。鎖定要么正常起作用,要么當客戶端違犯鎖定協(xié)議時,鎖定系統(tǒng)將告訴客戶端。
鎖定的這種對客戶端智能依賴程度低的特征對鎖定管理器和鎖定管理具有影響。鎖定管理器處理大多數(shù)規(guī)則和規(guī)則執(zhí)行。然而,此設計原則不適用于客戶端控制的鎖定級別。
利用對于事務管理的擴展的設計,隔離鎖定級別(在某種程度上,客戶端控制的級別)可擴展到事務鎖定級別,而不需要對客戶端進行重新設計。即,在事務管理器存在于鎖定環(huán)境中而客戶端退卻最小的情況,隔離鎖定級別能夠承擔起事務功能。在本發(fā)明的優(yōu)選實施例中,此設計原則不適用于事務鎖定級別。
為簡單鎖定機制提供死鎖處理和從錯誤情況恢復的能力是一個設計原則。當兩個或更多客戶端試圖按順序鎖定兩個或更多資源(例如,對象)而導致任何一個客戶端都不能夠完成它們的操作時,發(fā)生死鎖,因為它們兩者都在等待對方?!翱蛻舳丝刂频摹辨i定級別的目的是適應鎖定的相對簡單的部署。這包括支持死鎖處理和在錯誤的情況下的定義的恢復狀態(tài)的機制。在本發(fā)明的優(yōu)選實施例中,此設計原則適用于客戶端控制的鎖定級別。
“隨意進行解鎖”支持是用于支持最小鎖定環(huán)境的鎖定協(xié)議。即,最小化持有的鎖的數(shù)量和持有的鎖的持續(xù)時間的鎖定?!半S意進行解鎖”是指,當客戶端準備釋放客戶端所獲取的資源時,客戶端可以告訴系統(tǒng)。在本發(fā)明的優(yōu)選實施例中,這犧牲了隔離屬性和事務處理,但是,這是基于客戶端邏輯的合理的動作。因此,設計允許非事務應用程序“隨意進行解鎖”。在本發(fā)明的優(yōu)選實施例中,此設計原則適用于客戶端控制的鎖定級別。
提供可以支持所有ACID屬性的鎖定機制是指,鎖定機制支持由事務管理器所暗示的鎖定要求。在本發(fā)明的優(yōu)選實施例中,提供可以支持所有ACID屬性的鎖定機制并不意味著,鎖定管理器必須提供事務管理器角色或鎖定管理器需要在所有情況下支持事務鎖定(只是在事務環(huán)境下)。在本發(fā)明的優(yōu)選實施例中,此設計原則適用于事務鎖定級別。
提供跨越故障地恢復的鎖定機制是另一個設計原則。為支持事務處理,鎖定機制能夠在發(fā)生故障的情況下進行恢復。這與結合事務管理器來完成。如果在客戶端操作的中間發(fā)生故障,則對被鎖定的資源的訪問被阻止,直到可以應用適當?shù)幕謴瓦^程。
一旦確保了恢復,所有鎖都將被釋放,以防止客戶端所持有的任何鎖丟失。在設計中考慮了一些故障情況,包括鎖定管理服務器、鎖代理、鎖客戶端和它們之間的通信的故障。在本發(fā)明的優(yōu)選實施例中,此設計原則適用于事務鎖定級別。
代理假設有一些鎖定設計相對于對于管理請求的設備支持作出的假設。這些假設是設備的設計和代理提供商和他們支持的設備之間的關系所固有的。這些假設對理解代理動作的行為十分有用,是使鎖定機制有效發(fā)揮作用所必需的。
在本發(fā)明的優(yōu)選實施例中,設備被設計為使它們的元數(shù)據(jù)保持一致狀態(tài)。在本發(fā)明的優(yōu)選實施例中,存儲設備不允許將元數(shù)據(jù)保持不一致狀態(tài)的動作。例如,磁盤陣列不會保持存儲器被丟失的狀態(tài)(例如,標記為已使用但沒有分配給任何卷)。同樣,磁盤陣列不會保持存儲器被無意地映射到兩個不同的卷的狀態(tài)。此假設還暗示,設備的CIM代理可以通過使其模型與設備中的元數(shù)據(jù)同步來確保其數(shù)據(jù)一致。
在本發(fā)明的優(yōu)選實施例中,在處理不能識別鎖定的客戶端時,識別鎖定的代理和設備一個請求一個請求地暗示鎖定。不能識別鎖定的客戶端是根本不進行鎖定的客戶端。這暗示設備中的鎖定識別。即,如果沒有獲取鎖定,識別鎖定的代理獲取必需的鎖定(或等效物,例如,閂鎖),以執(zhí)行客戶端請求。然而,一旦執(zhí)行了客戶端請求,就釋放鎖定。這暗示,設備是識別鎖定的(不只是代理),以阻止與鎖定客戶端沖突的“元件管理器”動作。
參考模型圖1以方框圖顯示了根據(jù)本發(fā)明的優(yōu)選實施例的涉及四個不同角色的用于進行鎖定和事務管理的參考模型。
參考模型包括識別鎖定的客戶端110。下面將詳細討論不能識別鎖定的客戶端。識別鎖定的客戶端110選擇它希望的鎖定級別。如果識別鎖定的客戶端110希望事務鎖定級別,則識別鎖定的客戶端110通過向事務管理器發(fā)出BeginTransaction(開始事務)請求(下面將進一步詳細描述)來達到這一目的。事務管理器管理事務的提交或回滾的協(xié)調(diào)(即,在事務管理控制下執(zhí)行的客戶端操作)。在本發(fā)明的優(yōu)選實施例中,事務管理器是作為獨立的事務管理服務器120來描述的。在本發(fā)明的優(yōu)選實施例中,事務管理器可以與客戶端應用程序共同駐留在同一個系統(tǒng)上。對于運行識別鎖定的客戶端的每一個系統(tǒng),通常有一個事務管理器。事務管理器維護了客戶端應用程序所采取的動作(例如,客戶端請求)以及執(zhí)行事務的回滾所要求的“反向”動作的日志。
如果識別鎖定的客戶端110希望隔離或客戶端控制的鎖定級別,則識別鎖定的客戶端110省略到事務管理服務器120的請求,并直接用GetoperationId請求(下面將進一步詳細描述)進入鎖定管理器,以獲取操作的操作標識符(“操作id”或“OperationId”)。在本發(fā)明的優(yōu)選實施例中,鎖定管理器是鎖定管理服務器130,并協(xié)調(diào)從一組鎖定管理代理140A...N中獲取鎖,這一組鎖定管理代理140A...N與鎖定管理服務器130位于同一個鎖定管理組中。在圖中,為便于參考,例圖中的元件的多個副本可以用相同參看編號和字符來引用(例如,110A到110N,其中,N表示元件的第n個副本)。例如,鎖定管理代理140A、140B和140N將被稱為鎖定管理代理140A...N。
鎖定管理組包括鎖定管理服務器和一個或多個代理。在環(huán)境中可以有一個或多個鎖定管理服務器120,因此,有一個或多個鎖定管理組。每一個鎖定管理服務器130管理鎖定管理組中的一組鎖定管理代理140A...N的鎖定。管理員可以根據(jù)需要設置任意多的鎖定管理服務器130和鎖定管理組,以支持可縮放性要求。如果支持排隊,鎖定管理服務器130可以執(zhí)行鎖排隊。
鎖定管理代理140A...N執(zhí)行由鎖定管理代理140A...N進行管理的設備的鎖定。即,獲取資源上的實際鎖,并保留在代理級別。在某些實現(xiàn)方式中,鎖定管理代理140A...140N不執(zhí)行排隊。相反,鎖定管理代理140A...140N允許或拒絕鎖定,鎖定管理服務器130管理鎖定請求的排隊。鎖定管理代理140A...140N持有鎖定,直到鎖定管理服務器130告訴鎖定管理代理140A...140N將它們釋放。
這些角色中的每一個角色(識別鎖定的客戶端110、事務管理服務器120、鎖定管理服務器130、以及鎖定管理代理140A...N)基于客戶端請求的鎖定級別(即,事務、隔離或客戶端控制的)執(zhí)行功能。
鎖定的參考模型考慮多個鎖定環(huán)境,包括下面幾種具有支持事務鎖定級別的鎖定環(huán)境;沒有事務管理器的鎖定環(huán)境,包括隔離和客戶端控制的鎖定級別;以及,對于不能識別鎖定的客戶端的支持,包括支持任何給定鎖定級別。
具有事務管理器的鎖定參考模型圖2A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的具有事務管理器220的鎖定環(huán)境。事務鎖定的參考模型包括環(huán)境中的一個或多個事務管理器,以及鎖定管理服務器。
識別鎖定的客戶端-1 210連接到事務管理器220、鎖定管理服務器A 240和鎖定管理服務器B 260。鎖定管理組A 230包括鎖定管理服務器A 240、鎖定代理W 242和鎖定代理X 244。鎖定管理組B250包括鎖定管理服務器B 260、鎖定代理Y 262和鎖定代理Z264。鎖定代理W 242、X 244、Y 262、Z 264是鎖定識別的代理。在本發(fā)明的優(yōu)選實施例中,CIM代理實現(xiàn)鎖定代理W 242、X 244、Y262、Z 264。
事務如客戶端應用程序在客戶端上所定義的那樣開始和結束。為便于參考,由客戶端應用程序執(zhí)行的動作將被說成由客戶端執(zhí)行。在圖2A中,當識別鎖定的客戶端-1 210向事務管理器220上的客戶端應用程序發(fā)送BeginTransaction請求時,事務開始。事務管理器220“創(chuàng)建”事務,并返回操作id以標識事務。
在本發(fā)明的優(yōu)選實施例中,操作id在鎖定管理組和事務管理器中是唯一的。如此,操作id可以是復合的密鑰,第一部分是操作id是否為事務管理器生成的指示,第二部分是鎖定管理組名或事務管理器名稱,最后一部分是在鎖定管理組或事務管理器的上下文中唯一的編號。即,操作id呈現(xiàn)T:A:number的形式(其中,T是布爾值,A是鎖定管理組或事務管理器名稱,“number”是唯一整數(shù))。
事務管理器220所記錄的日志和持有的鎖定將在操作id的上下文中。事務的第一日志條目是存在事務(例如,開始事務)。
一旦識別鎖定的客戶端-1 210具有事務操作id,則識別鎖定的客戶端-1 210鎖定那些識別鎖定的客戶端-1 210打算更改的資源。識別鎖定的客戶端-1 210還鎖定識別鎖定的客戶端-1 210讀取的并且識別鎖定的客戶端-1 210希望在其操作期間保持不變的資源。對于識別鎖定的客戶端-1 210打算發(fā)出的更改操作(即,更改數(shù)據(jù)的操作),識別鎖定的客戶端-1 210向事務管理器220傳遞執(zhí)行更改的命令,以便進行記錄,并通過鎖定管理服務器A 240、B 260向鎖定代理W 242、X 244、Y 252、Z 264發(fā)出鎖定請求。除了更改請求之外,識別鎖定的客戶端-1 210還向事務管理器220提供在事務管理器220需要執(zhí)行操作回滾的情況下執(zhí)行的“反向”動作。
事務管理器220記錄更改請求和具有可逆動作的更改請求的“反向”動作。在更改請求沒有可逆動作的情況下,動作被視為超出事務的范圍。
由三個事件中的一個事件確定事務的結束識別鎖定的客戶端-1 210向事務管理器220發(fā)出的提交;識別鎖定的客戶端-1 210向事務管理器220發(fā)出的回滾;事務中的任何組件(例如,識別鎖定的客戶端-1 210或事務管理器220)發(fā)生故障情況。
在事務成功地完成之前事務中的任何組件發(fā)生故障將導致回滾。在本發(fā)明的優(yōu)選實施例中,使用心跳功能來判斷組件是否發(fā)生故障。
在本發(fā)明的優(yōu)選實施例中,事務管理器220可以是駐留在客戶端系統(tǒng)上的功能,或者事務管理器220也可以同鎖定管理服務器A240或B 260相結合。
鎖定設計是可擴展的,以支持“服務器到服務器”通信,以便進行鎖定協(xié)調(diào),盡管服務器鎖定是它們的鎖定管理組230,250內(nèi)進行的。在本發(fā)明的優(yōu)選實施例中,協(xié)調(diào)支持鎖定管理故障轉移和協(xié)調(diào)死鎖檢測。死鎖檢測是指發(fā)現(xiàn)在兩個或更多客戶端之間存在死鎖的操作。然而,利用鎖隊列超時(即,鎖定請求可以停留在鎖隊列中的時間段),不需要服務器到服務器的通信。對于鎖排隊,如果鎖定請求導致鎖定沖突并且代理或鎖定管理器將請求排隊,直到?jīng)_突的鎖被釋放,就說鎖在排隊。鎖隊列允許操作完成,即使在操作期間遇到了鎖定沖突。如果沖突的鎖決不被釋放,這種情況就叫做死鎖。當一個客戶端請求已經(jīng)被另一個客戶端鎖定(顯式或者隱式)的資源上的鎖時,就說發(fā)生了鎖定沖突。隱式鎖定是指由于由代理執(zhí)行的動作而隱式獲取的鎖定。
沒有事務管理器的鎖定參考模型圖2B顯示了根據(jù)本發(fā)明的優(yōu)選實施例的沒有事務管理器的鎖定環(huán)境。沒有事務管理器的環(huán)境中的鎖定可以在“隔離”級別,也可以在“客戶端控制的”級別。
在圖2B中顯示的鎖定環(huán)境中,識別鎖定的客戶端210、鎖定管理服務器A 240、B 260和鎖定代理W 242、X 244、Y 262、Z 264是能夠支持鎖定的。鎖定代理W 242、X 244、Y 262、Z 264被分配給分別由鎖定管理服務器A 240、B 260進行管理的鎖定管理組A230、B 250。
在此鎖定環(huán)境中,客戶端通過從鎖定管理服務器A 240或B260請求操作id并聲明其在隔離級別或客戶端控制的級別(例如,識別鎖定的客戶端-1210)操作的意圖來開始操作。打算使用鎖定管理組A 230、B 250中的代理的客戶端可以從鎖定管理服務器A 240或B 260請求操作id。假設識別鎖定的客戶端-1 210從鎖定管理服務器A 240請求操作id,那么,鎖定管理服務器A 240變成操作的控制服務器,但是,當訪問鎖定管理服務器B 260時,也可以使用該操作id。操作id對于操作只獲取一次。
對于鎖定的隔離和客戶端控制的級別,識別鎖定的客戶端210在識別鎖定的客戶端210對鎖定代理W 242、X 244、Y 262、Z 264執(zhí)行動作之前鎖定識別鎖定的客戶端210希望使用的資源(例如,對象)。識別鎖定的客戶端210使用分配給識別鎖定的客戶端210的操作id向適當?shù)逆i定管理組的(A 230或B 250)鎖定管理服務器(A 240或B 260)發(fā)出鎖定請求。鎖定管理服務器A 240、B 250接收鎖定請求,并將它們傳遞到鎖定代理W 242、X 244、Y 262、Z 264,并將它們記錄為由操作id持有。鎖定代理W 242、X 244、Y 262、Z 264要么允許鎖定要么拒絕鎖定。如果需要的話,在鎖定管理服務器A 240、B 260中進行排隊。在本發(fā)明的優(yōu)選實施例中,如果鎖定代理W 242、X 244、Y 262、Z 264拒絕鎖定,那么,鎖定代理W 242、X 244、Y 262、Z 264傳回”排隊時間”值,該值確定鎖定代理W 242、X 244、Y 262、Z 264將允許鎖定請求在隊列上停留多長時間。
如果排隊的請求到達隊列的頂端,則向鎖定代理W 242、X 244、Y 262、Z 264重新發(fā)出鎖定請求,如果獲取了鎖定,則通知識別鎖定的客戶端-1 210,鎖定請求已經(jīng)被允許。
如果在到達隊列頂端之前排隊請求“超時”,則通知識別鎖定的客戶端-1 210,鎖定請求被拒絕。由于鎖定管理服務器A 240、B 260不是事務管理器,因此,在本發(fā)明的優(yōu)選實施例中,鎖定管理服務器A240、B 260不會單方面地釋放鎖定。具體來說,為使識別鎖定的客戶端-1 210動作影響任何“回滾”或操作恢復處理,可能需要鎖定。
鎖定設計是可擴展的,以支持“服務器到服務器”通信,以便進行鎖定協(xié)調(diào),盡管鎖定管理服務器A 240、B 260鎖定是它們的鎖定管理組A 230,B 250內(nèi)進行的。在本發(fā)明的優(yōu)選實施例中,鎖定協(xié)調(diào)支持鎖定管理故障轉移和協(xié)調(diào)死鎖檢測。然而,對于鎖隊列超時,不需要服務器到服務器的通信。
不能識別鎖定的客戶端支持圖2C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的具有不能識別鎖定的客戶端-2 270的鎖定環(huán)境。具體來說,圖2顯示了“隔離”或“客戶端控制的”級別的鎖定環(huán)境。在圖2C中,鎖定代理X 244連接到設備X 280,而設備X 280還連接到元件管理器客戶端290。元件管理器客戶端是一種特殊類型的不能識別鎖定的客戶端。“事務”級別的鎖定的注意事項是相同的,因此,在圖2C的插圖中沒有顯示事務管理器。
在本發(fā)明的優(yōu)選實施例中,不能識別鎖定的客戶端-2 270是不能識別鎖定的CIM客戶端。在本發(fā)明的優(yōu)選實施例中,不能識別鎖定的客戶端(是不能識別鎖定的CIM客戶端)經(jīng)過CIM代理(包括識別鎖定的代理)。不能識別鎖定的客戶端270向鎖定代理W242、X 244作出管理請求,而不請求鎖定。在這樣的情況下,如果請求的動作涉及對用CIM代表的對象模型,則鎖定代理W 242、X244在請求的持續(xù)時間內(nèi)試圖獲取“臨時鎖定”(或“閂鎖”)。具體來說,如果通過CIM對象路徑到達對象,則在訪問之前,將對象鎖定。
閂鎖是在為單個請求服務的過程中由代理獲取的臨時“鎖”。在本發(fā)明的優(yōu)選實施例中,閂鎖釋放不遲于請求完成,閂鎖不是從外部建立的(即,與鎖不同,閂鎖不在任何CIM接口中引用)。然而,閂鎖可以在代理執(zhí)行動作時被代理用來臨時持有資源。如果客戶端請求是讀取動作,則不需要鎖定(例如,請求被當作無鎖定讀取)。更新請求可能被阻止(由于鎖被識別鎖定的客戶端持有)。然而,讀取動作不會被阻止。
需要考慮的一個特殊情況是元件管理器290的情況。在許多元件管理器將不會被重寫的前提下,理解元件管理器如何與識別鎖定的客戶端進行交互特別重要。元件管理器用于在識別鎖定的環(huán)境的“外部”執(zhí)行。盡管元件管理器被編碼為在存在鎖定管理的情況下利用鎖定管理是人們所希望的,但是,這不是必需的。
當不能識別鎖定的元件管理器客戶端290訪問設備X 280時,不能識別鎖定的元件管理器客戶端290可以在不經(jīng)過任何CIM代理結構的情況下達到這一目的。如此,不能識別鎖定的元件管理器客戶端290變成設備X 280的職責,以實際管轄元件管理器客戶端280和識別鎖定的客戶端-1 210之間的交互。設備X 280遵循下列規(guī)則(1)元件管理器客戶端290發(fā)出的讀取動作可以當做“無鎖”(臟)讀取,(2)獲取被元件管理器客戶端290的動作涵蓋的資源的“閂鎖”,該“閂鎖”將阻止來自識別鎖定的客戶端-1 210的鎖定動作。將與識別鎖定的客戶端-1 210持有的鎖定沖突的元件管理器客戶端290寫入動作將被拒絕。實際上,來自元件管理器客戶端290的寫入動作暗示在寫入操作期間的更改鎖定。
可鎖定的資源鎖將預留將是客戶端(即,客戶端應用程序)請求的主體的資源。例如,如果客戶端希望對一個卷進行修改,客戶端會將卷鎖定。鎖定設計的重要部分是理解是交互操作的基礎的功能(即,請求)以及什么需要鎖定,以確保預留資源,從而允許請求執(zhí)行。另一個相關的問題是,如果客戶端請求將是“創(chuàng)建”,則將什么鎖定。即,問題是,客戶端如何鎖定還不存在的某種東西。在創(chuàng)建卷的情況下,客戶端鎖定從中創(chuàng)建卷的存儲池可能是合理的。但是,是否鎖定創(chuàng)建的卷的問題仍沒有解決。最后,有如何標識鎖定的問題。需要一個方案來唯一地表示被鎖定資源。在下面幾部分將講述這些主題。
鎖定的粒度鎖定設計考慮了鎖定的粒度。然而,鎖定不要求對象模型的每個元素都被顯式鎖定??蛻舳藢㈡i定直接被它們打算發(fā)出的請求影響的所有資源。例如,創(chuàng)建卷將需要從中創(chuàng)建卷的存儲池上的鎖定。執(zhí)行邏輯單元號(LUN)映射和屏蔽請求將要求將被引用的卷、端口和主機啟動器鎖定。這是鎖定的客戶端視圖。
除了客戶端視圖之外,還有代理視圖。從代理的觀點來看,鎖定的目的是預留允許客戶端執(zhí)行請求的資源。因此,代理鎖定足夠的資源,以確??蛻舳苏埱髮⒉粫捎阪i定沖突而被拒絕。在本發(fā)明的優(yōu)選實施例,代理將鎖定支持客戶端的請求所需要的所有資源,并維護代理模型的完整性,這暗示了級聯(lián)鎖定。
每當在對需要鎖定什么存在歧義時,代理可以將鎖定提高到更高的鎖定。具體來說,代理可以提高到“代理鎖定”。同樣,客戶端可以請求“代理鎖定”。代理鎖定受到對于管理的設備鎖定計算機系統(tǒng)實例的影響。
識別鎖定的代理所需要的最小支持是“代理鎖定”。即,任何鎖定請求都可以被提高到代理鎖定。
級聯(lián)鎖定代理需要在它們的鎖定實現(xiàn)方式中考慮級聯(lián)效應。鎖定設計如此定義此級聯(lián)效應,對象的鎖定可以有效地鎖定該對象所基于的多個對象(即,CIM環(huán)境中的實例)。圖3顯示了根據(jù)本發(fā)明的某些實現(xiàn)方式的級聯(lián)鎖定。虛擬化代理300包括存儲池310和盤區(qū)320。陣列代理330包括存儲卷340和盤區(qū)350。鎖定存儲池310可能暗示對存儲池310所基于的盤區(qū)320的鎖定。存儲池310上的鎖定可以暗示向不由虛擬化代理300進行管理的資源(例如,由從擁有存儲池310的虛擬化代理300級聯(lián)的代理進行管理的資源)。為了維護虛擬化代理300的對象模型的完整性,虛擬化代理300可能需要鎖定較低級別的代理中的資源。例如,虛擬化代理300可以鎖定由陣列代理330擁有的存儲卷340和盤區(qū)350。
在CIM環(huán)境中,可以定義配置文件,每一個配置文件都定義配置文件所支持的鎖定所暗示的鎖定級聯(lián)。Storage NetworkingIndustry Association(SNIA)正在開發(fā)一些對象模型的配置文件。配置文件描述了存儲區(qū)域網(wǎng)絡(SAN)實體的特定類。SAN實體的類可以描述SAN內(nèi)的設備,如獨立磁盤冗余陣列(RAID)設備。RAID設備允許在多個硬盤上存儲同一數(shù)據(jù),如此允許同時訪問數(shù)據(jù)的副本。
鎖定標識實例鎖定受到引用實例的CIMObjectPath的影響。這是由“枚舉”實例獲取的不透明的令牌,這在CIM規(guī)范的2.3.2.11部分進行了定義,并用于枚舉實例CIM類。實際鎖定實例是客戶端的操作id和鎖定的實例的CIMObjectPath的組合。實際上,鎖可以視為操作id和CIMObjectPath之間的關聯(lián)。關聯(lián)具有鎖定類型的屬性(讀取或更改)。
暗示的鎖定還有某些情況,鎖定不是顯式請求,但是也獲取。具體來說,當創(chuàng)建資源(例如,存儲卷或存儲池)時,直到創(chuàng)建資源,資源將不會已經(jīng)CIMObjectPath。一旦創(chuàng)建了資源,就代表客戶端操作id獲取鎖定,而無需客戶端發(fā)出鎖定請求。
同樣,代理可以選擇鎖定比客戶端請求的數(shù)量更多的資源。在本發(fā)明的優(yōu)選實施例中,代理不假設客戶端已經(jīng)鎖定了客戶端鎖定的資源“下面”的一切。例如,代理知道支持“刪除實例”操作將需要什么,并可以選擇鎖定由客戶端可以作出的“最壞情況”請求所暗示的所有資源。
可鎖定的資源和鎖定的級別被鎖定的資源對于所有鎖定級別(即,事務、隔離和客戶端控制的)都一樣。粒度和如何標識鎖定也相同。級聯(lián)和暗示的鎖定可以變化,但是,通常不會。一般而言,事務鎖定將傾向于要求嚴格的遵守級聯(lián)和暗示鎖定,以支持潛在的回滾請求。隔離和客戶端控制的鎖定級別不要求嚴格的遵守,因為它們不需要支持回滾操作。
鎖定類型鎖定類型是指請求的鎖定的“強度”。鎖定類型確定被鎖定阻止的動作。在LTM系統(tǒng)鎖定的上下文中,有“更改”鎖定和“讀取”鎖定。“更改”鎖定比“讀取”鎖定更強。
鎖定設計中的鎖定管理器和鎖定代理支持“讀取”鎖定和“更改”鎖定。“讀取”鎖定保證了隔離(例如,數(shù)據(jù)讀取在操作期間不會更改),而不會阻止其他讀者。鎖定設計還支持“無鎖”(臟)讀取,而不暗示“讀取”鎖定。
在本發(fā)明的優(yōu)選實施例中,“無鎖”寫入不受支持。即,在“OperationId”下發(fā)生的寫入操作將導致鎖定被獲取(如在“創(chuàng)建”操作中那樣)。沒有“OperationId”而發(fā)生的寫入操作暗示客戶端是不能識別鎖定的客戶端,適用不能識別鎖定的客戶端規(guī)則。即,在請求期間,獲取“更改”鎖定(或閂鎖)。
讀取和更改鎖定在鎖定的所有三個級別(即、事務、隔離和客戶端控制的)中都受支持。
鎖定兼容性語義表3概述了本發(fā)明的優(yōu)選實施例中的LTM系統(tǒng)鎖定的鎖定兼容性語義。
表3

表3顯示了兩個不同的客戶端之間的交互。第一客戶端是資源A上的“鎖定持有者”,第二客戶端是資源A上的鎖定的“鎖定請求者”。如果鎖定持有者具有更改鎖定,則拒絕所有鎖定請求。然而,臟讀(無鎖讀取)不會被阻止,因為沒有鎖定請求。如果鎖定持有者具有資源上的“讀取”鎖定,“更改”鎖定請求被拒絕,“無鎖”寫入被拒絕。鎖定請求者可以獲取“讀取”鎖定,也可以進行無鎖讀取。如果鎖定持有者不持有鎖定(無鎖讀取),則什么也不會被阻止。如果寫入者不持有鎖定,則除了無鎖讀者之外,所有請求者都被阻止。
被保護的動作被保護的動作是可以被鎖定阻止的動作。對什么被“讀取”或“更改”鎖定阻止的討論提供了基本原則,但是,這里所提供的規(guī)則不是囊括一切的清單。EWeb Based Enterprise Management(WBEM)(基于Web的企業(yè)管理)是一組由Distributed Management TaskForce(DMTF)Inc.開發(fā)的管理和因特網(wǎng)標準技術,以統(tǒng)一企業(yè)計算環(huán)境的管理。DMTF開發(fā)了構成WBEM的核心標準集,包括一般信息模型(CIM)。
CIM是用于管理信息的面向?qū)ο蟮哪P偷臉藴?。CIM標準是Distributed Management TaskForce(DMTF),Inc.所提供的。有關CIM標準的更多信息,請參見2002年5月發(fā)表的“Specificationfor CIM Operations over HTTP”,1.1版本,以下簡稱為“CIM規(guī)范”,這里原文引用了該規(guī)范作為參考。
要鎖定的資源由CIMObjectPaths標識。含義是,具有CIMObjectPath的一切都可以被鎖定。然而,這里建議的鎖定設計詳細講述了什么對于鎖定有意義,并基于級聯(lián)鎖定。一般而言,代理將支持整個設備的鎖定(即,“鎖定代理”),或?qū)С龅馁Y源的單個實例的鎖定。如果代理不支持由CIMObjectPath標識的資源的鎖定,代理可以將鎖定提高到代理鎖定。
對于不能識別鎖定的客戶端和識別鎖定的客戶端之間的交互,還有一些規(guī)則。
讀取保護的動作是被“讀取”鎖定阻止的那些動作?!白x取”鎖定會阻止“更改”鎖定,但不會阻止其他“讀取”鎖定?!白x取”鎖定阻止“級聯(lián)對象”和位于鎖層次結構中較低的對象上的“更改”鎖定。例如,一個代理上的“讀取”鎖定暗示由該代理進行管理的所有對象上的“讀取”鎖定。一個卷上的“讀取”鎖定級聯(lián)到可以影響對被鎖定的卷的更改的任何較低級別的對象上的“讀取”鎖定。如此,鎖定一個卷可以通過其他代理防止對該卷所基于的池、盤區(qū)或陣列的更改。
更改(寫入)保護的動作是被“更改”鎖定阻止的那些動作。更改鎖定阻止來自其他客戶端的其他讀取或更改鎖定。更改鎖定阻止“級聯(lián)對象”上的其他鎖定。例如,一個代理上的“更改”鎖定暗示由該對象進行管理的所有對象上的“更改”鎖定。一個卷上的“更改”鎖定級聯(lián)到可以影響對被鎖定的卷的更改的任何較低級別的對象上的“讀取”鎖定。如此,鎖定一個卷可以防止對該卷所基于的池、盤區(qū)或陣列的讀取或?qū)懭搿?br> 無保護的動作是對對象執(zhí)行的沒有被鎖定阻止的那些動作。無保護的讀取動作是沒有被“讀取”鎖定阻止的那些動作?!白x取”鎖定不會阻止其他讀者,但是,“讀取”鎖定卻會阻止寫入者(和更改鎖定)。無保護的寫入動作是沒有被“更改”鎖定阻止的那些動作。更改鎖定不會阻止其他不相關的對象上的鎖定。更改鎖定不會阻止對被鎖定的對象的臟讀。臟讀是在沒有獲取鎖(讀取或更改)的情況下從代理那里檢索信息的任何客戶端請求。這叫做臟讀,是因為讀取沒有被保護。對相同信息的隨后的讀取可能會產(chǎn)生不同的結果。此外,LTM系統(tǒng)中的寫入動作還要求識別鎖定的代理暗示被更改的每一個對象上的更改鎖定。
與不能識別鎖定的客戶端的交互當有LTM系統(tǒng)鎖定存在時,無論是“鎖定持有者”還是“鎖定請求者”正在鎖定,而其他客戶端沒有鎖定,都會發(fā)生與不能識別鎖定的客戶端的交互。不能識別鎖定的客戶端根本不會發(fā)出任何鎖定。然而,當不能識別鎖定的客戶端嘗試執(zhí)行寫入動作時,在執(zhí)行動作期間,獲取隱式更改鎖定。如此,“更改”或“讀取”鎖定阻止被鎖定資源上的任何不能識別鎖定的客戶端的動作。然而,如果不能識別鎖定的客戶端嘗試執(zhí)行讀取動作(無鎖讀取),則讀取動作不會被任何鎖定阻止。如果不能識別鎖定的客戶端更新了資源,那么,這會臨時阻止鎖定客戶端的更改鎖定。然而,臟讀(無鎖讀取)不會被阻止。
死鎖管理鎖定設計通過在鎖定管理器中放置死鎖檢測機制來處理死鎖的情況。鎖定支持“隨意進行鎖定”語義,對于鎖定不立即可用的情況,還支持鎖排隊。當兩個或更多客戶端試圖鎖定兩個或更多資源并且都在等待對方時,發(fā)生死鎖(這有時被稱為“僵局”)。在本發(fā)明的優(yōu)選實施例中,為解決這樣的情況,鎖定管理器可以試圖檢測這樣的周期,挑選其中一個死鎖的客戶端,并拒絕該客戶端的鎖定請求。
在本發(fā)明的優(yōu)選實施例中,LTM系統(tǒng)支持鎖隊列超時,這是比較簡單的方法。如果鎖定請求停留在鎖隊列上已達到預先確定的時間量,而沒有獲取鎖定,則拒絕鎖定請求。每一個資源都具有關聯(lián)的鎖隊列。
鎖可以排隊的時間長度是由將給予鎖的代理確定的。鎖隊列在鎖定管理器中保留和維護。代理允許或拒絕鎖定。當鎖被代理拒絕時,代理可以提供“隊列時間”(在被鎖定管理器拒絕之前鎖可以排隊的時間)。如果代理不提供隊列時間,則鎖定管理器將應用默認時間長度(例如,由鎖定管理管理員預定義或定義的)。鎖定請求最終可能被拒絕。接下來將發(fā)生什么情況取決于所使用的鎖定級別。
對于事務鎖定級別,在隊列中超時的鎖將導致操作(由操作id標識)中止。具體來說,檢測到超時的鎖定管理器通知事務管理器,鎖定請求被拒絕。事務管理器將驅(qū)動回滾操作?;貪L的最后一部分是釋放事務持有的鎖,這將打破僵局(即,結束死鎖)。
對于隔離鎖定級別,鎖定管理器將向始發(fā)客戶端返回鎖被拒絕的響應。客戶端可以選擇重新發(fā)出鎖定請求,但是,客戶端的優(yōu)選動作將是試圖從迄今為止客戶端所進行的操作中恢復。因此,鎖定管理器不會在鎖被拒絕的情況下自動釋放鎖定??蛻舳藢⒈唤o予試圖“撤消”到發(fā)生鎖失敗的時間點為止客戶端所完成的工作的機會。當客戶端已經(jīng)完成其恢復動作時,客戶端釋放鎖定。
對于客戶端控制的鎖定級別,鎖定管理器將向始發(fā)客戶端返回鎖被拒絕的響應。與隔離級別相同,客戶端控制的情況下的客戶端將被給予恢復它所完成的工作的機會。然而,在客戶端控制的情況下,這可能意味著重新獲取客戶端以前持有的但已經(jīng)釋放的鎖定。當然,這可能導致“循環(huán)拒絕”的情況。因此,鎖定管理器將跟蹤鎖定管理器已經(jīng)給予一個操作id的拒絕的數(shù)量,并在預先確定的拒絕數(shù)量(例如,3)之后單方面地釋放所有鎖定。
鎖定操作在下面幾部分說明了識別鎖定的客戶端和鎖定管理器(服務器)之間的請求/響應協(xié)議。其他消息可以添加到協(xié)議中,或者一些消息可以刪除或替換。
鎖定請求/響應參數(shù)AgentRequest包含下列參數(shù)中的每一個中的一個CIMObjectPath(即,將被鎖定的每一個實例的對象路徑)和類型(即,請求的鎖定的類型(讀取或更改))。AgentResults包含下列參數(shù)中的每一個中的一個CIMObjectPath(即,已經(jīng)被鎖定的每一個實例的對象路徑)和類型(即,允許的鎖定的類型(讀取或更改))。
應所有鎖定請求,提交操作id。操作id標識正在請求鎖定的客戶端操作。操作id是應GetOperationId請求或BeginTransaction請求。
QueueTime是應鎖定請求向被拒絕的代理返回的時間段。QueueTime標識代理愿意讓鎖定請求停留在隊列中的時間長度。
下面的表4概述了鎖定請求,發(fā)出它們的組件(即,客戶端、鎖定管理服務器、事務管理器或鎖定代理)和接收組件(即,客戶端、鎖定管理服務器、事務管理器或鎖定代理)。下面將進一步詳細地描述每一個鎖定請求。
表4

帶有星號(*)標記的請求只能用于客戶端控制的鎖定級別中。
客戶端事務管理器請求/響應本節(jié)將描述客戶端和事務管理器之間的請求/響應協(xié)議。
在本發(fā)明的優(yōu)選實施例中,客戶端請求包括BeginTransaction、LogUpdate、CommitTransaction和RollbackTransaction。
BeginTransaction()請求是從客戶端發(fā)出的請求將在事務控制(和事務鎖定級別)下執(zhí)行的客戶端操作的操作id的消息??蛻舳藦钠渲幸粋€事務管理服務器要求操作id。在本發(fā)明的優(yōu)選實施例中,這將是客戶端的系統(tǒng)上的事務管理服務器。該事務管理器生成的操作id在發(fā)往事務管理器和鎖定管理(LM)組服務器的請求中使用。
LogUpdate(OperationId,Request,ReverseRequest)LogUpdate(OperationId,Request,ReverseRequest)請求從客戶端發(fā)往事務管理器,以記錄更新動作和使更新顛倒應采取的操作。
CommitTransaction(OperationId)請求是從客戶端到事務管理器的啟動事務的提交處理的消息。
RollbackTransaction(OperationId)請求是從客戶端到事務管理器的啟動事務的回滾處理的消息。
在本發(fā)明的優(yōu)選實施例中,事務管理服務器支持下列響應消息GrantTransactionID、LogUpdated、CommitDone和RollbackDone。
GrantTransactionID(OperationId)響應是為了響應BeginTransaction請求而發(fā)出的。事務管理器生成唯一的操作id并向客戶端返回操作id。OperationId的前綴(即,操作id的第一部分)表示操作id是由事務管理器為事務生成的。
LogUpdated(Operationid,Request)響應是從事務管理器發(fā)往客戶端的,說明事務管理器已經(jīng)完成了記錄更新動作(由請求標識)。
CommitDone(OperationId)響應是從事務管理器發(fā)往客戶端的消息,表示由OperationId標識的事務的提交處理已經(jīng)成功地完成。此消息是響應CommitTransaction請求發(fā)送的。
RollbackDone(OperationId)響應到從事務管理器發(fā)往客戶端的消息,表示由OperationId標識的事務的回滾已經(jīng)完成。這可以響應CommitTransaction或RollbackTransaction請求發(fā)送。
客戶端鎖定管理服務器請求/響應本節(jié)將描述客戶端和鎖定管理服務器之間的請求/響應協(xié)議。
在本發(fā)明的優(yōu)選實施例中,客戶端請求包括GetOperationId、LockRequest、ReleaseOperationId和LockRelease。
GetOperationId( )請求是從識別鎖定的客戶端發(fā)出的請求客戶端將執(zhí)行的操作的操作id的消息。客戶端從其中一個鎖定管理組服務器要求操作id。該鎖定管理服務器生成的相同操作id在發(fā)往其他鎖定管理組服務器的請求中使用。在啟用事務的環(huán)境中,OperationId可以使用BeginTransaction請求獲取,將不會向鎖定管理服務器發(fā)出此請求。如果在發(fā)出BeginTransaction請求之后發(fā)出GetOperationId請求,則生成第二個OperationId。
LockRequest(AgentRequest[],Type[],OperationId)請求是是從識別鎖定的客戶端發(fā)出的請求由“Type”參數(shù)指定的類型(讀取或更改)的一個或多個鎖定的消息。鎖將代表指定的操作id來獲取。
ReleaseOperationId(OperationId)請求是從識別鎖定的客戶端發(fā)出的請求釋放操作id所持有的所有鎖定的消息。此請求被發(fā)送到參與操作的每一個鎖定管理組服務器,雖然操作id是從一個鎖定管理組服務器獲取的。在啟用事務的環(huán)境中,ReleaseOperationId請求受到結束事務的影響(例如,在提交或回滾之后完成),客戶端不需要發(fā)出ReleaseOperationId命令。
LockRelease(AgentRequest[],OperationId)請求是從識別鎖定的客戶端發(fā)出的請求釋放特定鎖定的消息。此命令對客戶端控制的鎖定級別有效。在本發(fā)明的優(yōu)選實施例中,在最初允許的鎖定和正在被釋放的鎖定之間沒有1對1的關系。即,客戶端不一定同時釋放所有鎖定。
在本發(fā)明的優(yōu)選實施例中,響應客戶端請求,鎖定管理服務器支持下列響應消息GrantOperationId、LockGrant、LockRefused、LockQueued、OperationReleased和LockReleased。
GrantOperationId(OperationId)響應是為了響應GetOperationId請求而發(fā)出的。鎖定管理服務器生成唯一的操作id并將它返回給客戶端。
LockGrant(AgentResults[],OperationId)響應是為了響應來自客戶端的LockRequest請求而發(fā)出的。AgentResults標識在請求的資源上允許的鎖定和允許的鎖定的類型。AgentResults可以不同于AgentRequest。即,鎖定可能已經(jīng)被提高到更高的鎖定(例如,“讀取”鎖定提高“更改”鎖定)。在客戶端啟動了多個操作的情況下,LockGrant還返回操作id。AgentResults返回請求的鎖定或被提高的鎖定。AgentResults不包括暗示的鎖定(通過級聯(lián)鎖定)。如此,客戶端了解客戶端請求了其鎖定的對象??蛻舳丝赡懿涣私獗绘i定的對象“下面”的對象。然而,鎖定提高被報告。鎖定提高是指將持有的鎖定“升級”以增大鎖定的范圍或升級鎖定的類型。提高可以是從讀取到更改鎖定或從實例鎖定到代理鎖定。由于客戶端可以基于提高合理地進行優(yōu)化(例如,停止向其中操作已經(jīng)持有代理鎖定的代理發(fā)出鎖定請求),提高將被報告。
LockRefused(AgentResults[],OperationId)響應是為了響應來自客戶端的LockRequest請求而發(fā)出的。如果鎖定不被允許,并且鎖定請求在隊列上超時,那么,客戶端將獲得此響應。在客戶端啟動了多個操作的情況下,LockRefused還返回操作id。
LockQueued(AgentResults[],OperationId)響應是在鎖定請求被排隊的情況下由服務器發(fā)送的。此響應消息不一定要求客戶端方面采取動作,然而,LockQueued消息通知客戶端,操作處于排隊狀態(tài)。返回的OperationId標識遇到鎖排隊的情況的操作。
OperationReleased(OperationId)響應是為了響應來自客戶端的ReleaseOperationId請求而發(fā)出的。在客戶端啟動了多個操作的情況下,OperationReleased還返回操作id。
LockReleased(AgentResult[],OperationId)響應是為了響應來自客戶端的LockRelease請求而發(fā)出的。AgentResult可以不同于LockRelease請求中的AgentRequest。例如,如果代理將實例鎖定提高到了代理鎖定,則鎖定可能不會被釋放。事實上,AgentResult可以是空陣列。LockReleased響應適用于客戶端控制的鎖定級別。對于事務鎖定級別,LockRelease請求被拒絕。對于隔離鎖定級別,LockRelease請求將導致鎖定的級別下降到客戶端控制的級別。
鎖定管理服務器/代理請求/響應本節(jié)描述了鎖定管理服務器和識別鎖定的代理之間的一組特定請求/響應。
在本發(fā)明的優(yōu)選實施例中,鎖定管理服務器請求包括AgentRequest、AgentReleaseAll和AgentRelease。
AgentRequest(AgentRequest[],OperationId)請求是發(fā)送給鎖定管理器的鎖定請求,然后,鎖定管理器將鎖定請求發(fā)送給單個代理。此請求將鎖定請求傳遞由代理進行管理的那些對象的代理。發(fā)往代理的鎖定請求傳遞操作id,以標識正在請求鎖定的客戶端操作。允許的鎖定一直保持,直到被顯式釋放(通過AgentRelease請求)。
AgentReleaseAll(OperationId)請求是釋放操作(客戶端)所持有的所有(代理)鎖定的請求。服務器不必顯式列出將要釋放的鎖定,因為鎖定是由操作id暗示的。即,預計鎖定代理為操作保留鎖定,操作所持有的所有鎖定都被AgentReleaseAll請求釋放。
AgentRelease(AgentRequest[]OperationId)是釋放操作(客戶端)所持有的選定的鎖定的請求。如果客戶端操作在客戶端控制的鎖定級別下執(zhí)行,則應該發(fā)出此請求。
在本發(fā)明的優(yōu)選實施例中,對于事務環(huán)境,另外還有三個發(fā)出的請求。第一個是來自鎖定管理服務器的“Prepare to Commit”請求。Prepare to Commit請求是告訴代理要準備提交的事務管理器功能。即,Prepare to Commit請求告訴代理,事務即將結束,代理應該準備提交或回滾。來自代理的確認意味著,代理可以進行任意操作。代理可以從.事務管理器獲得的第二個請求是“Rollback Agent”或“Commit Agent”請求。在本發(fā)明的優(yōu)選實施例中,事務管理器可以通過發(fā)出“反向”動作來驅(qū)動回滾,而不是依賴代理智能來執(zhí)行回滾。
在本發(fā)明的優(yōu)選實施例中,代理響應包括AgentGrant、AgentRefuse、AgentAvail、AgentAllReleased和AgentReleased。
AgentGrant(AgentResult[],OperationId)響應是為了響應AgentRequest請求而發(fā)出的。AgentResult列表可以比AgentRequest列表短。這意味著,某些請求的鎖定將被拒絕(見下文)。允許的鎖定將顯示CIMObjectPath和允許的鎖定的類型(例如,讀取或更改)。在本發(fā)明的優(yōu)選實施例中,AgentResults包括鎖定提高(例如,提高到“更改”鎖定的“讀取”鎖定,或提高到代理鎖定的實例鎖定),但是,AgentResults不包括暗示的或級聯(lián)鎖定。
AgentRefuse(AgentResult[],OperationId,QueueTime)響應是在代理拒絕任何鎖定請求的情況下由該代理發(fā)出的。被拒絕的鎖定在AgentResult中標識,并提供Queuetime。這是代理愿意允許任何被拒絕的鎖定保留在隊列中的時間長度。
AgentAvail(AgentResult[])響應告訴鎖定管理服務器,以前請求的(和排隊的)資源現(xiàn)在可用。實際排隊是在鎖定管理服務器中進行的。然而,需要此消息,才能讓鎖定管理服務器知道,不能識別鎖定的客戶端所持有的資源現(xiàn)在可用于鎖定。
AgentAllReleased(OperationId)響應是代理為響應AgentReleaseAll請求而向鎖定管理服務器發(fā)送的。
AgentReleased(AgentResult[],OperationId)響應是代理為響應AgentRelease請求發(fā)送給鎖定管理服務器的響應。此請求與AgentRelease請求一樣,適用于客戶端控制的鎖定級別。
發(fā)現(xiàn)在本發(fā)明的優(yōu)選實施例中,管理員設置鎖定管理服務器,并給它們每一個都提供一個唯一的鎖定管理組值。然后,管理員將鎖定管理組值分配給代理。每一個代理要么屬于無鎖管理組,要么屬于一個鎖定管理組。代理的默認鎖定管理組值是“DefaultUnconfigured”。
在發(fā)現(xiàn)服務代理的過程中,鎖定管理客戶端確定鎖定管理組、它們的鎖定管理服務器,以及鎖定管理代理。此發(fā)現(xiàn)過程告訴客戶端,要使用哪個鎖定管理服務器來將鎖定管理代理中的資源鎖定。在本發(fā)明的優(yōu)選實施例中,有一個以上的鎖定管理服務器向發(fā)現(xiàn)機制(即,在目錄中維護有關網(wǎng)絡的資源的信息的機制)將其本身廣告為支持一個鎖定管理組值是錯誤的。如果鎖定管理服務器上來并發(fā)現(xiàn)另一個具有相同鎖定管理組值的鎖定管理服務器,則它不應該廣告其本身。
如果代理上來,而對于鎖定管理組沒有鎖定管理服務器,那么該代理將其狀態(tài)記錄為啟用“未鎖定”。
鎖定管理實現(xiàn)方式在本發(fā)明的優(yōu)選實施例中,鎖定管理是由實現(xiàn)這里所描述的鎖定設計的所有適當?shù)慕M件實現(xiàn)的,然而,鎖定與環(huán)境中的非鎖定組件共存。在本發(fā)明的優(yōu)選實施例中,鎖定管理是在鎖定管理服務器和鎖定管理代理中實現(xiàn)的,以實現(xiàn)鎖定環(huán)境,而客戶端中的鎖定則由客戶端自行決定。鎖定管理服務器或鎖定代理能夠?qū)Ω恫贿M行鎖定的客戶端或不能識別鎖定的代理。下面將進一步地討論每一種情況。
不能識別鎖定的客戶端不能識別鎖定的客戶端是對于操作不實現(xiàn)鎖定管理的客戶端或者根本不實現(xiàn)鎖定的客戶端(例如,舊式客戶端)。當識別鎖定的代理從不能識別鎖定的客戶端接收到更新請求時,識別鎖定的代理在該操作進行過程中將該操作當作被鎖定(即,用更改鎖定),以保護代理的識別鎖定的客戶端。即,如果動作將更新模型,那么,暗示的鎖定是對受請求影響的資源的更改鎖定。如果操作是讀取,那么,代理可以將動作當作“無鎖”讀取。本質(zhì)上,如果不能識別鎖定的客戶端試圖更新用CIM代表的對象模型的任何部分,那么,不能識別鎖定的客戶端可以被阻止(即,請求被拒絕)。
如果沒有識別鎖定的客戶端持有正在被不能識別鎖定的客戶端修改的資源上的鎖定,則請求被允許執(zhí)行。然而,暗示了更改鎖定(或等效物),以便來自識別鎖定的客戶端的任何鎖定請求都被阻止。在來自識別鎖定的客戶端的鎖定請求的情況下,鎖定請求可以排隊。代理返回在將鎖定請求排隊時要使用的隊列時間值。由于不能識別鎖定的客戶端不經(jīng)過鎖定管理器,當不能識別鎖定的客戶端完成時,代理向鎖定管理器發(fā)出AgentAvail消息。
不能識別鎖定的代理/對象管理器不能識別鎖定的代理或?qū)ο蠊芾砥魇遣粚崿F(xiàn)鎖定管理的代理或?qū)ο蠊芾砥鳌?br> 在本發(fā)明的優(yōu)選實施例中,不能識別鎖定的一般信息模型-可擴展標記語言(CIMXML)服務器(即,具有CIM對象管理器和代理的CIM服務器)不支持更多的用于允許和釋放鎖定的內(nèi)在方法。發(fā)現(xiàn)這些舊式角色的客戶端將它們當作是不能識別鎖定的客戶端那樣來處理不變操作。
鎖定管理客戶端客戶端識別它們進行操作所在的鎖定環(huán)境。首先,客戶端識別是否存在鎖定管理器。然后,客戶端識別是否存在事務管理器。如果所有代理都是識別鎖定的,并且有事務管理器存在,那么,代理可以使用事務鎖定級別。如果事務管理器不存在,那么,代理使用隔離級別或客戶端控制的級別或根本不進行鎖定。
如果配置中的有不能識別鎖定的代理,則客戶端認識到,在那些代理上的任何動作都將不會受到保護。另外,客戶端理解,正在進行事務或隔離鎖定級別的操作對于不能識別鎖定的代理將不會具有該功能。
客戶端判斷在任何給定的操作中要使用哪個級別的鎖定。為了實現(xiàn)并行性和可縮放性,客戶端最好使用“最低”級別的鎖定,以支持操作。例如,如果客戶端正在調(diào)查SAN上是否有可用的存儲空間,(即,為了純粹的讀取操作),客戶端最好不進行鎖定。如果客戶端正在調(diào)查可用的存儲空間以創(chuàng)建卷,那么,隔離級別足以保證發(fā)現(xiàn)的存儲空間事實上可以用于創(chuàng)建卷。
事務鎖定級別是為涉及需要協(xié)調(diào)的多個更新的復雜操作預留的,也許跨SAN中的多個代理。
選擇在其中一個鎖定級別下執(zhí)行操作的客戶端通過從事務管理器或客戶端將使用的其中一個鎖定管理器請求操作id來開始操作。操作id可以從任何鎖定管理器請求,然而,如果客戶端從客戶端將使用的其中一個鎖定管理器請求操作id,則更有效。
鎖定管理客戶端的規(guī)則概括如下2(1)客戶端統(tǒng)計在操作中客戶端必須對付的代理、鎖定管理服務器和事務管理器,以判斷所有代理是否都被鎖定涵蓋并且鎖定環(huán)境是否為啟用事務的。操作是否可以編碼為鎖定操作,所使用的鎖定級別是否可以根據(jù)操作不同而不同。即,客戶端將基于客戶端關于操作將要求什么的的理解,選擇客戶端將使用的鎖定級別。
鎖定管理客戶端在客戶端嘗試對資源采取動作之前,獲取資源上的鎖定。然而,這可以在執(zhí)行動作的緊前面完成。在本發(fā)明的優(yōu)選實施例中,在執(zhí)行任何動作之前不必獲取所有鎖定,對于“創(chuàng)建”請求,是個例外。更改鎖定將在創(chuàng)建請求上暗示。
單個鎖定管理請求包括對同一個鎖定管理組中的代理的引用。
當操作完成時,鎖定管理客戶端釋放鎖定。如果客戶端使用事務管理器(即,釋放鎖定由提交或回滾暗示),則將會為客戶端自動完成。
在任何鎖定請求都被拒絕的情況下,鎖定管理客戶端進行“恢復”并釋放鎖定。即,如果鎖定請求被拒絕,則保留操作所持有的現(xiàn)有的鎖定,以允許應用程序嘗試其自己的“撤消”或調(diào)用事務管理器回滾功能。一旦任何操作完成,鎖定就被釋放。
(a)在隔離或客戶端控制的鎖定級別運行的鎖定管理客戶端負責“撤消”在遇到任何失敗情況之前完成的操作的任何部分。
(b)如果鎖定管理客戶端試圖獲取鎖定而嘗試失敗,則鎖定管理客戶端可以重試鎖定嘗試。在本發(fā)明的優(yōu)選實施例中,不建議這樣做,鎖定管理服務器可以通過拒絕重試中的操作id的鎖定而強制實施此規(guī)則。
鎖定管理服務器鎖定過程涉及維護鎖定的狀態(tài)信息的鎖定管理器(例如,鎖定管理服務器)。這意味著,鎖定請求由鎖定管理服務器進行管理,沖突是在鎖定管理服務器級別處理的。鎖定管理服務器可以檢測明顯的沖突,并將請求排隊,而不必與代理商量。例如,鎖定管理器維護可以維護下列狀態(tài)信息客戶端(操作id)持有的鎖定具有客戶端(操作id)的鎖定的代理鎖隊列(排在其他鎖定請求后面的客戶端鎖定請求)鎖隊列超時在鎖定設計中,一個鎖定管理服務器對于任何給定鎖定管理組是活動的。一個代理屬于一個鎖定管理組。在本發(fā)明的優(yōu)選實施例中,鎖定設計支持不屬于任何鎖定管理組的代理的概念,然而,由這樣的代理進行管理的資源不在鎖定控制之下。
如果一個鎖定管理服務器在其發(fā)現(xiàn)鎖定管理器代理期間發(fā)現(xiàn)另一個活動的具有相同鎖定管理組值的鎖定管理服務器,則該鎖定管理服務器不激活其本身。然而,該鎖定管理服務器可以啟動與具有相同鎖定管理組值的其他鎖定管理服務器的通信,并將其本身作為該鎖定管理組值的備份鎖定管理組服務器。
鎖定管理服務器識別它運行所在的環(huán)境。具體來說,鎖定管理服務器發(fā)現(xiàn)其他鎖定管理組服務器,驗證鎖定管理服務器是其鎖定管理組值的唯一的鎖定管理服務器。此外,鎖定管理服務器還發(fā)現(xiàn)具有相同鎖定管理組值的所有代理。
鎖定管理服務器能夠執(zhí)行下列功能支持和實施鎖定級別(事務、隔離或客戶端控制的級別)。具體來說,如果OperationId是事務Id(即,前綴是on),那么鎖定管理器將在事務結束之前不會支持鎖定釋放。在隔離對客戶端控制的級別的情況下,鎖定管理器將假設隔離級別,直到客戶端釋放單個鎖定。然后,鎖定管理器將操作標記為客戶端控制的。
3(2)生成OperationIds。服務器能夠生成操作id,以標識隔離和客戶端控制的鎖定級別的客戶端操作。在本發(fā)明的優(yōu)選實施例中,OperationId是一個復合值。該值的第一部分表示操作不是事務,第二部分是鎖定管理組值,該值的第三部分是在鎖定管理組內(nèi)唯一的標識符。標識符是在0到2221范圍內(nèi)的整數(shù)。這允許有足夠的距離,以避免在在同一時間幀內(nèi)重復使用。
4通過記錄哪些資源(例如,CIMObjectPaths)被哪些持有者(OperationId)持有,保留一個持有了哪些鎖定的記錄,還維護一個正在排隊的鎖定請求的記錄。
在鎖定管理器或鎖定代理發(fā)生失敗之后恢復鎖定。此外,還恢復鎖隊列。
將阻止的鎖定請求排隊。允許的排隊時間是由鎖定了資源的代理提供的。鎖定管理服務器監(jiān)視隊列上的時間,以遵守代理指定的隊列時間。如果在操作獲取鎖定之前隊列時間結束,那么,向客戶端返回一個鎖定被拒絕的消息。
當客戶端要求釋放鎖定時,釋放鎖定。鎖定管理服務器對代理和客戶端使用心跳功能,以在失敗的情況下(例如,客戶端、代理或通信失效)釋放鎖定。心跳功能可以是,從服務器發(fā)送到客戶端和代理的信號,對該信號的響應表示,作出響應的客戶端或代理功能正常。
在本發(fā)明的優(yōu)選實施例中,鎖定管理服務器還與其他鎖定管理器進行通信,以實現(xiàn)鎖定管理故障轉移。
鎖定管理服務器特點在本發(fā)明的優(yōu)選實施例中,最小的鎖定管理服務器具有下列特征接受鎖定管理服務器請求并提供規(guī)定的響應。
驅(qū)動鎖定管理代理請求并處理它們的響應。
在支持識別鎖定的客戶端操作時,有狀態(tài)。
存在單故障點,但也可以被設計為支持鎖定管理服務器故障轉移。
執(zhí)行自己的鎖定管理組范圍內(nèi)的功能。
鎖定管理器可選增強功能在本發(fā)明的優(yōu)選實施例中,鎖定管理器可以被設計為支持下列特點高度可用的鎖定管理服務器。
事務鎖定管理服務器。
鎖定管理代理注意事項識別鎖定的代理可以在鎖定模式或無鎖模式下操作。將要求識別鎖定的代理執(zhí)行什么根據(jù)操作不同而不同。
在初始發(fā)現(xiàn)過程中,識別鎖定的代理尋找它們的鎖定管理組服務器。如果發(fā)現(xiàn)了鎖定管理組服務器,則啟用代理的鎖定功能。如果沒有發(fā)現(xiàn)鎖定管理組服務器,則代理將在無鎖模式下操作。
在某些實現(xiàn)方式中,在處理鎖定請求時鎖定管理代理需要遵循的規(guī)則有持有所有允許的鎖定,直到顯式釋放。
阻止來自不能識別鎖定的客戶端的將與識別鎖定的客戶端持有的鎖定沖突的動作。
由于不能識別鎖定的客戶端使用而拒絕鎖定請求之后,當資源可用時,通知(通過AgentAvail)其鎖定管理服務器。
鎖定管理使用情況為說明鎖定設計,將描述客戶端操作的一組情況。將描述下列每一種情況的鎖定邏輯在存儲空間不足的虛擬化系統(tǒng)上創(chuàng)建卷從一個虛擬化系統(tǒng)向另一個虛擬化系統(tǒng)移動存儲空間。
從虛擬化系統(tǒng)向基于主機的虛擬化移動存儲空間。
在邏輯卷管理器上創(chuàng)建邏輯卷,并從虛擬化子系統(tǒng)和磁盤陣列提供它。
在虛擬化系統(tǒng)上創(chuàng)建卷圖4A顯示了在根據(jù)本發(fā)明的優(yōu)選實施例的存儲空間不足的虛擬化系統(tǒng)上創(chuàng)建卷的過程。客戶端(C1)400正在試圖在虛擬化子系統(tǒng)(V1)410上創(chuàng)建卷,但虛擬化子系統(tǒng)410沒有足夠的存儲空間用于創(chuàng)建卷。因此,客戶端400首先從磁盤陣列SS1420獲取存儲空間。向V1410分配存儲空間,然后,在V1410上可以使用該存儲空間。動作與操作id1(Op1)關聯(lián)。此操作的具體步驟有2(1)在SS1 420上創(chuàng)建卷(例如,通過CIM中的StorageConfigurationService語句)-這涉及在SS1 420中鎖定存儲池并發(fā)出創(chuàng)建卷服務。此情況下的前提是,虛擬化子系統(tǒng)410不自動提供存儲空間。在SS1 420上創(chuàng)建卷是由客戶端400進行的。
3(2)將卷分配給V1 410-將剛剛創(chuàng)建的卷分配(即,邏輯單元號(LUN)映射)到V1 410。前提是,卷不由V1 410進行控制,直到客戶端400將卷映射到V1 410。
4(3)通過將卷添加到池來擴展V1410上的存儲池-分配給V1 410的卷在V1 410對象模型中顯示為盤區(qū)??蛻舳?00將盤區(qū)添加到將包含新V1 410卷的V1 410存儲池。
5(4)在V1 410上創(chuàng)建LUN-客戶端400實際在V1 410上創(chuàng)建卷。
圖4B顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在存儲空間不足的虛擬化系統(tǒng)上創(chuàng)建卷的動作序列中鎖定步驟和主要客戶端動作請求的表460。
從一個虛擬化系統(tǒng)向另一個虛擬化系統(tǒng)移動存儲空間圖5A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的從一個虛擬化系統(tǒng)向另一個虛擬化系統(tǒng)移動存儲空間的過程??蛻舳?C1)510試圖從鎖定管理組A 500中的一個虛擬化系統(tǒng)(V1)520向另一個虛擬化系統(tǒng)(V2)530移動存儲空間。為此,客戶端510釋放V1 520上的存儲空間,然后,將釋放的存儲空間分配給V2 530。從V1 520釋放的存儲空間被鎖定管理組B 540中的陣列SS1 550持有。動作與操作id1(Op1)關聯(lián)。此操作的具體步驟有刪除V1 520上的盤區(qū)(StorageConfigurationService)-這涉及鎖定V1 520中的存儲池,并發(fā)出刪除盤區(qū)服務。此情況下的前提是,鎖定存儲池也將鎖定存儲池的盤區(qū)。
從V1520取消映射SS1 550-這涉及鎖定SS1 550卷和卷所映射到的端口/啟動器。這里的前提是,映射中所涉及的對象是需要鎖定的對象(映射請求所看到的)。
將SS1 550卷映射到V2 530-操作已經(jīng)持有卷上的鎖定,但,操作還鎖定V2 530的新端口/啟動器。
將盤區(qū)(SS1 550卷)添加到V2 530存儲池。(StorageConfigijrationService)-這涉及鎖定V2 530上的存儲池。
圖5B和5C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在從一個虛擬化系統(tǒng)向另一個虛擬化系統(tǒng)移動存儲空間的隔離鎖定級別下采取的動作序列中的鎖定步驟和主要客戶端動作請求的表560。
從虛擬化系統(tǒng)向邏輯卷移動存儲空間圖6A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的從虛擬化系統(tǒng)向邏輯卷管理器移動存儲空間的過程??蛻舳?C1)610從鎖定管理組A600中的一個虛擬化系統(tǒng)(V1)620向邏輯卷管理器(LVM1)630移動存儲空間。為此,客戶端610釋放V1 620上的存儲空間,然后,將釋放的存儲空間分配給LVM1 630。從V1 620釋放的存儲空間被鎖定管理組B 640中的陣列SS1 650持有。動作與操作id1(Op1)關聯(lián)。此操作的具體步驟有刪除V1 620上的盤區(qū)(StorageConfigurationService)-這涉及鎖定V1 620中的存儲池,并發(fā)出刪除盤區(qū)服務。此情況下的前提是,鎖定存儲池也將鎖定存儲池的盤區(qū)。
從V1取消映射SS1 650卷。這涉及鎖定SS1 650卷和卷所映射到的端口/啟動器。這里的前提是,映射中所涉及的對象是需要鎖定的對象(映射請求所看到的)。
將SS1 650卷映射到LVM1 630-操作已經(jīng)持有卷上的鎖定,但,操作還鎖定LVM1 630的新端口/啟動器。
將盤區(qū)(SS1 640卷)添加到LVM1 630邏輯卷組(存儲池)(StorageConfigurationService)-這涉及鎖定LVM1 630上的邏輯卷組。
圖6B和6C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在從虛擬化系統(tǒng)向邏輯卷管理器虛移動存儲空間的隔離鎖定級別下采取的動作序列中的鎖定步驟和主要客戶端動作請求的表660。
創(chuàng)建邏輯卷和從多個源提供邏輯卷圖7A顯示了根據(jù)本發(fā)明的優(yōu)選實施例的創(chuàng)建邏輯卷和從多個源提供邏輯卷的過程??蛻舳?C1)700正在試圖創(chuàng)建邏輯卷并從多個源提供邏輯卷。具體來說,客戶端700希望從虛擬化系統(tǒng)(V1)720和存儲陣列(SS1)730獲取存儲空間。動作與操作id1(Op1)關聯(lián)。此操作的具體步驟有在V1 720上創(chuàng)建卷(StorageConfigurationService)-這涉及鎖定V1 720中的存儲池,并發(fā)出創(chuàng)建卷服務。
向主機(即,邏輯卷管理器1(LVM1)710)暴露(即,映射)V1 720卷-這涉及鎖定V1 720卷和卷所映射到的端口/啟動器。這里的前提是,映射中所涉及的對象是需要鎖定的對象(映射請求所看到的)。
在SS1 730上創(chuàng)建卷(StorageConfigurationService)-這涉及鎖定SS1 730中的存儲池,并發(fā)出創(chuàng)建卷服務。
向主機(即,LVM1)暴露(即,映射)SS1 730卷-這涉及鎖定SS1 730卷和卷所映射到的端口/啟動器。這里的前提是,映射中所涉及的對象是需要鎖定的對象(映射請求所看到的)。
將邏輯盤(即,盤區(qū))添加到LVM1 710邏輯卷組(存儲池)(StorageConfigurationService)-這涉及鎖定LVM1 710上的邏輯卷組。
圖7B和7C顯示了根據(jù)本發(fā)明的優(yōu)選實施例的在創(chuàng)建邏輯卷和從多個源提供邏輯卷的隔離鎖定級別下采取的動作序列中的鎖定步驟和主要客戶端動作請求的表760。
鎖定和事務管理圖8顯示了根據(jù)本發(fā)明的優(yōu)選實施例的LTM系統(tǒng)中為處理鎖定而實現(xiàn)的邏輯。控制從方框800開始,客戶端識別要被鎖定的資源??蛻舳诉€知道哪個代理控制對資源的訪問(即,“控制資源”),客戶端通過鎖定管理器向控制對資源的訪問的鎖定代理發(fā)送鎖定請求(方框810)。代理允許或拒絕鎖定請求(820),代理向鎖定管理器發(fā)送對鎖定請求的響應(830)。鎖定管理器判斷鎖定請求是否被允許(方框840)。如果鎖定請求被允許,則鎖定管理器將允許通知轉發(fā)到客戶端(方框850),否則,鎖定管理器將鎖定請求排隊(方框850)。
圖9顯示了根據(jù)本發(fā)明的優(yōu)選實施例的鎖定管理器實現(xiàn)的邏輯。控制從方框900開始,鎖定管理器管理從多供應商客戶端接收到的并發(fā)往多供應商代理的鎖定請求,并管理從多供應商代理到多供應商客戶端的響應。在多供應商環(huán)境中,多個供應商中的每一個供應商都試圖實現(xiàn)所有供應商開發(fā)的角色(例如,代理或客戶端)中的相同的邏輯。典型的SAN環(huán)境包括多供應商環(huán)境。如此,術語“多供應商客戶端”用于表示每一個客戶端或客戶端子集可以由不同的供應商開發(fā)。術語“多供應商代理”用于表示每一個代理或代理子集可以由不同的供應商開發(fā)。
鎖定管理器維護了有關每一個多供應商客戶端和多供應商代理的狀態(tài)信息(方框910)。鎖定管理器管理被多供應商代理拒絕的鎖定請求的隊列(方框920)。鎖定管理器執(zhí)行心跳功能,以確保多供應商客戶端和多供應商代理功能正常(方框930)。
圖10顯示了根據(jù)本發(fā)明的優(yōu)選實施例的事務管理器實現(xiàn)的邏輯??刂茝姆娇?000開始,事務管理器接收事務在異構分布式環(huán)境中開始的指示。異構分布式環(huán)境是其中客戶端、事務管理器、鎖定管理器、和代理或這些角色的子集可以來自相同或不同的供應商的環(huán)境。在方框1010中,事務管理器為事務生成操作標識符。在方框1020中,事務管理器記錄由操作標識符標識的事務的動作,動作包括請求、對應的反向請求(用于回滾),以及鎖定授權。
例如,請求可以是“創(chuàng)建卷X”,在這樣的情況下,對應的反向請求將是“刪除卷X”。在方框1030中,事務管理器執(zhí)行事務的提交處理。在方框1040中,在必要時,事務管理器執(zhí)行事務的回滾處理。
圖11A和11B顯示了根據(jù)本發(fā)明的優(yōu)選實施例由級聯(lián)代理在判斷鎖定資源要使用哪個操作標識符時所執(zhí)行的邏輯。在圖11A中,控制從方框1100開始,第一代理接收客戶端的用關聯(lián)的操作標識符鎖定由第一代理控制的資源的鎖定請求。第一代理用與客戶端關聯(lián)的操作標識符鎖定由第一代理控制的資源(方框1102)。即,操作標識符與客戶端關聯(lián),鎖定與該操作標識符關聯(lián)。如果接收到另一個用同一個操作標識符鎖定資源的請求,則鎖定請求被允許。
第一代理基于要在第二代理上執(zhí)行的操作是否必須在客戶端的請求完成之前完成,判斷由第二代理控制的更多的資源是否應該用同一個操作標識符來進行鎖定,以處理客戶端的請求(方框1104)。即,如果要在第二代理上執(zhí)行的操作必須在客戶端的請求完成之前完成,那么,由第二代理控制的更多的資源用同一個操作標識符來進行鎖定。在方框1106中,如果判斷更多的資源應該用同一個操作標識符來進行鎖定,則處理轉到方框1108,否則,處理轉到方框1118。
在方框1108中,第一代理向第二代理的鎖定管理器發(fā)送鎖定請求,以用同一個操作標識符鎖定更多的資源。在方框1110中,第二代理的鎖定管理器判斷是否存在鎖定沖突。如果存在鎖定沖突,則處理轉到方框1114,否則,處理轉到方框1112。在方框1114中,第二代理的鎖定管理器將鎖定請求排隊。在方框1112中,第二代理的鎖定管理器將鎖定請求傳遞到第二代理。第二代理用同一個操作標識符鎖定由第二代理控制的資源(方框1116)。
在方框1118中,第一代理從其鎖定管理器中獲取新操作標識符。第一代理向第二代理的鎖定管理器發(fā)送用新操作標識符鎖定更多的資源的通知(方框1120)。在方框1122中,第二代理的鎖定管理器判斷是否存在鎖定沖突。如果存在鎖定沖突,則處理轉到方框1126,否則,處理轉到方框1124。在方框1126中,第二代理的鎖定管理器將鎖定請求排隊。在方框1124中,第二代理的鎖定管理器將鎖定請求傳遞到第二代理。第二代理用新操作標識符鎖定由第二代理控制的資源(方框1128)。
圖11C和11D顯示了根據(jù)本發(fā)明的優(yōu)選實施例當?shù)谝淮礞i定由第二代理控制的資源并且第二代理接收到另一個鎖定該資源的請求時由級聯(lián)代理執(zhí)行的邏輯。在圖11C中,控制從方框1150開始,第一代理接收客戶端的用關聯(lián)的操作標識符鎖定由第二代理控制的資源的請求。第一代理用與客戶端關聯(lián)的操作標識符鎖定由第二代理控制的資源(方框1152)。在圖11D中,控制從方框1154開始,第二代理接收客戶端的用一個操作標識符鎖定由第二代理控制的資源的請求(方框1154)。第二代理判斷資源是否已經(jīng)用同一個操作標識符鎖定(方框1156)。在本發(fā)明的優(yōu)選實施例中,第二代理通過將第一操作標識符與用于鎖定資源的操作標識符進行匹配,判斷資源是否被同一個操作標識符進行了鎖定。在方框1158中,如果資源已經(jīng)用同一個操作標識符進行了鎖定,則處理轉到方框1160,否則,處理轉到方框1162。在方框1160中,第二代理通知客戶端,資源已經(jīng)用同一個操作標識符進行了鎖定。在方框1162中,第二代理向其鎖定管理器發(fā)送鎖定請求被拒絕的信息。在方框1164中,第二代理的鎖定管理器將鎖定請求排隊。
圖12顯示了根據(jù)本發(fā)明的優(yōu)選實施例鎖定管理器為允許客戶端的不同級別的鎖定而實現(xiàn)的邏輯。控制從方框1200開始,鎖定管理器從客戶端接收命令。在方框1210中,鎖定管理器判斷操作標識符是否具有其前綴表示事務管理器生成了操作標識符的命令。在方框1220中,如果判斷事務管理器生成了操作標識符,則處理轉到方框1230,否則,處理轉到方框1240。在方框1230中,鎖定管理器在事務鎖定級別下進行操作。在方框1240中,鎖定管理器在隔離鎖定級別下進行操作,直到客戶端釋放鎖定(即,任何鎖定)。一旦客戶端釋放了鎖定,鎖定管理器就在客戶端控制的鎖定級別下操作。
圖13顯示了根據(jù)本發(fā)明的優(yōu)選實施例由代理實現(xiàn)的邏輯??刂茝姆娇?300開始,代理接收包括一個或多個動作的操作??缍鄠€代理地保護來自多個同時的非協(xié)作性客戶端的操作,其中,一個操作包括一個或多個動作。具體來說,對于每一個讀取保護的動作,在資源上保持“讀取”鎖定,并阻止寫入動作寫入到用“讀取”鎖定保護的資源中(方框1310)。對于每一個寫保護的動作,在資源上保持“更改”鎖定,寫入動作和讀取和更改鎖定在用“更改”鎖定保護的資源中被阻止(方框1320)。
圖14顯示了根據(jù)本發(fā)明的優(yōu)選實施例由鎖定管理器為解決死鎖而實現(xiàn)的邏輯??刂茝姆娇?400開始,鎖定管理器接收對于已經(jīng)用第二操作標識符鎖定的資源(例如,對象)的用第一操作標識符進行鎖定的請求被拒絕的信息。鎖定請求由客戶端發(fā)送,而被代理拒絕。鎖定管理器將鎖定請求放在具有鎖隊列超時時段的隊列中(方框1410)。在方框1412中,鎖定管理器判斷鎖定請求是否在鎖隊列超時時段內(nèi)移到隊列的頂端。如果是,則處理轉到方框1420,否則,處理轉到方框1414。為便于參考,這里使用隊列的“頂端”來指鎖定管理器可以處理其中的鎖定請求的隊列的位置。在方框1414中,鎖定管理器判斷鎖隊列超時時段是否結束。如果是,則處理轉到方框1450,否則,處理轉到方框1412。
在方框1420中,鎖定管理器重新發(fā)出鎖定請求。具體來說,在方框1420中,鎖定管理器重新發(fā)出鎖定請求,因為鎖定已經(jīng)被擁有該鎖定的前任釋放,排隊的鎖定請求在其鎖隊列超時時段內(nèi)移到隊列的頂端。請注意,一旦排隊的鎖定請求處于隊列的頂端,鎖定管理器就對該排隊的鎖定請求進行處理。在方框1430中,如果鎖定請求在鎖隊列超時時段內(nèi)被允許,則處理轉到方框1440,否則,處理轉到方框1412。在方框1440中,鎖定管理器從隊列中刪除鎖定請求。如果鎖定不被允許,則將鎖定請求重新排隊。如此,對已經(jīng)被鎖定的資源的鎖定請求要么稍后被允許,要么被終止,從而避免死鎖的情況。在其他實現(xiàn)方式中,在方框1410中,可以基于一個或多個因素,如鎖定請求以前被放在隊列中的次數(shù),將鎖定請求放回隊列中。
具體來說,當鎖定請求到達隊列的頂端并重新發(fā)出之后,鎖定請求通常會在稍后的時間被允許。然而,也可能有不能識別鎖定的客戶端獲取所希望的鎖定的情況。因此,有可能重新發(fā)出的鎖定請求將被代理拒絕。在此情況下,鎖定請求被放回隊列中,并等待“不能識別鎖定的客戶端鎖定”清除。從代理發(fā)往鎖定管理器的AgentAvail消息提供了鎖定被不能識別鎖定的客戶端釋放的指示。當鎖定管理器獲取AgentAvail消息時,鎖定管理器知道將重新發(fā)出鎖定請求,或者,如果隊列上的鎖定請求已經(jīng)超時,那么鎖定管理器只是丟棄該消息。
另外的實現(xiàn)方式細節(jié)所描述的用于管理鎖定和事務的技術可以使用標準編程和/或工程技術作為方法、設備或者產(chǎn)品來實現(xiàn),以生產(chǎn)軟件、固件、硬件或它們的任何組合。這里所使用的術語“產(chǎn)品”是指以硬件邏輯(例如,集成電路芯片、可編程門陣列(PGA)、專用集成電路(ASIC)等等)或者計算機可讀的介質(zhì),如磁存儲介質(zhì)(例如,硬盤驅(qū)動器、軟盤、磁帶等等)、光存儲器(CDROM、光盤等等)、易失性和非易失性存儲設備(例如,EEPROM、ROM、PROM、RAM、DRAM、SRAM、固件、可編程邏輯等等)來實現(xiàn)的代碼或邏輯。計算機可讀的介質(zhì)中的代碼由處理器訪問和執(zhí)行。其中實現(xiàn)了優(yōu)選的實施例的代碼可以進一步通過傳輸介質(zhì)或者通過網(wǎng)絡從文件服務器進行訪問。在這樣的情況下,實現(xiàn)了代碼的產(chǎn)品可以包括傳輸介質(zhì),如網(wǎng)絡傳輸線、無線傳輸介質(zhì)、通過空中、無線電波、紅外信號等等傳播的信號。因此,“產(chǎn)品”可以包括其中包含了代碼的介質(zhì)。此外,“產(chǎn)品”可以包括其中包含、處理和執(zhí)行代碼的硬件和軟件組件的組合。當然,那些精通本技術的人將認識到,可以對此配置進行許多修改,產(chǎn)品可以包括當前技術中已知的任何信息攜帶介質(zhì)。
圖8-14的邏輯描述了按特定順序發(fā)生的特定的操作。在備選實現(xiàn)方式中,可以按不同的順序執(zhí)行某些邏輯操作、對它們進行修改或刪除。此外,可以向上文描述的邏輯中添加步驟,這些步驟仍會符合所描述的實現(xiàn)方式。此外,這里所描述的操作可以連續(xù)地發(fā)生或者某些操作可以并行地處理,或者描述為由單一進程執(zhí)行的操作可以由分布式進程來執(zhí)行。
圖8-14的邏輯是以軟件方式來實現(xiàn)的。此邏輯也可以是主機系統(tǒng)的操作系統(tǒng)或應用程序的一部分。在其他實施例中,此邏輯可以保留在存儲區(qū)域或在只讀存儲器或其他硬連接類型的設備中。優(yōu)選的邏輯可以以硬盤驅(qū)動器或以可編程和非可編程門陣列邏輯來實現(xiàn)。
圖15顯示了根據(jù)本發(fā)明的優(yōu)選實施例的角色110、120、130、140A...N的體系結構。識別鎖定的客戶端110、事務管理服務器120、鎖定管理服務器130,以及鎖定管理代理140A...N中的每一個都可以實現(xiàn)計算機體系結構1500,該計算機體系結構1500具有處理器1502(例如,微處理器)、存儲器1504(例如,易失性存儲設備),以及存儲器1506(例如,非易失性存儲器,如磁盤驅(qū)動器、光盤驅(qū)動器、磁帶驅(qū)動器等等)。存儲器1506可以包括內(nèi)置的存儲設備或者外置的或者可通過網(wǎng)絡進行訪問的存儲器。存儲器1506中的程序被加載到存儲器1504中,并由處理器1502以當前技術已知的方式執(zhí)行。該體系結構進一步包括網(wǎng)卡1508,以便與網(wǎng)絡進行通信。輸入設備1510用于向處理器1502提供用戶輸入,并可以包括鍵盤、鼠標、筆尖、麥克風、對觸摸敏感的顯示屏幕,或者當前技術已知的任何其他激活或輸入機制。輸出設備1512能夠呈現(xiàn)從處理器1502、或諸如顯示監(jiān)視器、打印機、存儲器等等其他組件中傳輸過來的信息。
本發(fā)明的優(yōu)選的實施例的上述描述只是為了說明和描述。它沒有窮盡一切,也不將本發(fā)明限制到所述準確的形式。
權利要求
1.一種用于鎖定的方法,包括接收用第一操作標識符鎖定第一資源的請求;用第一操作標識符鎖定第一資源;以及基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
2.一種用于鎖定的系統(tǒng),包括處理器;處理器可以訪問的計算機可讀的介質(zhì);以及包括能夠使處理器執(zhí)行如下操作的代碼的程序邏輯(i)接收用第一操作標識符鎖定第一資源的請求;(ii)用第一操作標識符鎖定第一資源;以及(iii)基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
3.一種包括用于進行鎖定的程序邏輯的產(chǎn)品,其中,程序邏輯使操作被執(zhí)行,操作包括接收用第一操作標識符鎖定第一資源的請求;用第一操作標識符鎖定第一資源;以及基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
4.一種用于鎖定的系統(tǒng),包括代理;被代理控制的第一資源;不被代理控制的第二資源;用于接收用第一操作標識符鎖定第一資源的請求的裝置;用于用第一操作標識符鎖定第一資源的裝置;以及基于要為請求執(zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定的裝置。
5.一種用于鎖定的方法,包括接收用第一操作標識符鎖定資源的請求;判斷資源是否用第一操作標識符進行鎖定;如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求;以及如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
6.一種用于鎖定的系統(tǒng),包括處理器;處理器可以訪問的計算機可讀的介質(zhì);以及包括能夠使處理器執(zhí)行如下操作的代碼的程序邏輯(i)接收用第一操作標識符鎖定資源的請求;(ii)判斷資源是否用第一操作標識符進行鎖定;(iii)如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求;以及(iv)如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
7.一種包括用于進行鎖定的程序邏輯的產(chǎn)品,其中,程序邏輯使操作被執(zhí)行,操作包括接收用第一操作標識符鎖定資源的請求;判斷資源是否用第一操作標識符進行鎖定;如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求;以及如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求。
8.一種用于鎖定的系統(tǒng),包括用于接收用第一操作標識符鎖定資源的請求的裝置;用于通過將第一操作標識符與用于鎖定資源的操作標識符進行匹配,判斷資源是否被用第一操作標識符進行了鎖定的裝置;用于,如果判斷資源被用第一操作標識符進行了鎖定,則用指出資源被用第一操作標識符進行了鎖定的指示響應請求的裝置;以及如果判斷資源被用第二操作標識符進行了鎖定,則拒絕鎖定請求的裝置。
9.一種用于進行死鎖管理的方法,包括對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示;將鎖定請求放置在具有鎖隊列超時時段的隊列中;以及如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求。
10.一種用于進行死鎖管理的系統(tǒng),包括處理器;處理器可以訪問的計算機可讀的介質(zhì);以及包括能夠使處理器執(zhí)行如下操作的代碼的程序邏輯(i)對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示;(ii)將鎖定請求放置在具有鎖隊列超時時段的隊列中;以及(iii)如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求。
11.一種包括用于進行死鎖管理的程序邏輯的產(chǎn)品,其中,程序邏輯使操作被執(zhí)行,所述操作包括對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示;將鎖定請求放置在具有鎖隊列超時時段的隊列中;以及如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求。
12.一種用于進行死鎖管理的系統(tǒng),包括用于,對于用第二操作標識符鎖定的資源,接收拒絕用第一操作標識符進行鎖定的請求的指示的裝置;用于將鎖定請求放置在具有鎖隊列超時時段的隊列中的裝置;用于,如果鎖定請求到達隊列的這樣一個位置,即從該位置可以在鎖隊列超時時段內(nèi)處理該鎖定請求,則重新發(fā)出鎖定請求的裝置。
全文摘要
說明了用于進行鎖定的方法、系統(tǒng)和程序。接收用第一操作標識符鎖定第一資源的請求。第一資源用第一操作標識符進行鎖定?;谝獮檎埱髨?zhí)行的操作是否可以在處理請求之后完成,判斷第二資源是應該用第一操作標識符還是用第二操作標識符來進行鎖定。
文檔編號G06F9/46GK1809815SQ200480000933
公開日2006年7月26日 申請日期2004年5月4日 優(yōu)先權日2003年5月1日
發(fā)明者邁克爾·列奧·沃克 申請人:國際商業(yè)機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宾川县| 双城市| 长寿区| 慈利县| 安阳县| 长海县| 陇南市| 望谟县| 攀枝花市| 瓮安县| 东乡族自治县| 康保县| 郎溪县| 高唐县| 偃师市| 南漳县| 宜君县| 营山县| 玉林市| 吉林市| 沐川县| 朝阳区| 班戈县| 三门峡市| 安徽省| 天柱县| 洪江市| 高陵县| 静宁县| 汉沽区| 高台县| 随州市| 凉山| 稻城县| 汉中市| 济宁市| 伊宁县| 花垣县| 阿克陶县| 海阳市| 荔波县|