專利名稱:針對(duì)分布式持久實(shí)例的鎖定解決的制作方法
針對(duì)分布式持久實(shí)例的鎖定解決背景計(jì)算機(jī)系統(tǒng)和相關(guān)技術(shù)影響社會(huì)的許多方面。的確,計(jì)算機(jī)系統(tǒng)處理信息的能力已轉(zhuǎn)變了人們生活和工作的方式。計(jì)算機(jī)系統(tǒng)現(xiàn)在通常執(zhí)行在計(jì)算機(jī)系統(tǒng)出現(xiàn)以前手動(dòng)執(zhí)行的許多任務(wù)(例如,文字處理、日程安排和會(huì)計(jì)等)。最近,計(jì)算機(jī)系統(tǒng)彼此耦合并耦合到其他電子設(shè)備以形成計(jì)算機(jī)系統(tǒng)和其他電子設(shè)備可以在其上傳輸電子數(shù)據(jù)的有線和無線計(jì)算機(jī)網(wǎng)絡(luò)。因此,許多計(jì)算任務(wù)的執(zhí)行分布在多個(gè)不同的計(jì)算機(jī)系統(tǒng)和/或多個(gè)不同的計(jì)算環(huán)境中長(zhǎng)期運(yùn)行的應(yīng)用(如例如工作流應(yīng)用)通常得益于周期性地持久保存其工作以允許應(yīng)用在錯(cuò)誤、崩潰或機(jī)器故障之后恢復(fù)。持久保存工作允許應(yīng)用臨時(shí)地變?yōu)榭臻e并且使它們的資源得到重新分配。為了持久保存工作,應(yīng)用主機(jī)使持久保存的狀態(tài)與運(yùn)行時(shí)狀態(tài)相協(xié)調(diào)以保證創(chuàng)建了一致的檢查點(diǎn)。例如,持久保存的狀態(tài)可能需要與應(yīng)用事務(wù)、消息通知、鎖定、本地狀態(tài)聞速緩存等進(jìn)行協(xié)調(diào)。計(jì)算機(jī)系統(tǒng)還基本上并行化地將工作在多個(gè)計(jì)算線程、核和處理器間劃分,包括執(zhí)行許多同時(shí)的長(zhǎng)期運(yùn)行的應(yīng)用。因此,應(yīng)用主機(jī)必須采用謹(jǐn)慎的薄記來允許多個(gè)同時(shí)執(zhí)行線程與持久保存的狀態(tài)和運(yùn)行時(shí)狀態(tài)交互。由于應(yīng)用主機(jī)和狀態(tài)持久保存系統(tǒng)可能位于不同的機(jī)器上,因此該協(xié)調(diào)可以進(jìn)一步嵌入在分布式系統(tǒng)內(nèi)。由此,即使在應(yīng)用主機(jī)處對(duì)執(zhí)行線程施加了絕對(duì)順序,應(yīng)用主機(jī)與狀態(tài)持久保存系統(tǒng)之間的交互仍然可能經(jīng)歷重排序。此外,持久保存的狀態(tài)可以由多種別名來標(biāo)識(shí),從而使得兩個(gè)執(zhí)行線程正在引用同一狀態(tài)是不明顯的。這些條件(以及其他條件的組合)可共同造成創(chuàng)建了在順序系統(tǒng)中不大可能的復(fù)雜度。例如,應(yīng)用主機(jī)可以是如下若干功能類似的程序之一所述程序競(jìng)爭(zhēng)以在共享的狀態(tài)持久保存系統(tǒng)中將修改應(yīng)用于持久保存的狀態(tài)。由于在這樣的系統(tǒng)中可能存在固有的競(jìng)爭(zhēng),因此這些修改的一部分可能是沖突的。另外,由于這些復(fù)雜度以及無論是否使用謹(jǐn)慎和正確的薄記,應(yīng)用主機(jī)都可以確定該應(yīng)用主機(jī)與其自身沖突。
發(fā)明內(nèi)容
本發(fā)明延及用于解決鎖定沖突的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。本發(fā)明的實(shí)施例包括用于解決在兩個(gè)或更多個(gè)嘗試對(duì)存儲(chǔ)在實(shí)例存儲(chǔ)中的實(shí)例進(jìn)行鎖定的執(zhí)行線程之間鎖定沖突的方法。在一些實(shí)施例中,持久保存提供者從包括在應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令。第一命令被配置為在一個(gè)或多個(gè)條件被滿足時(shí)請(qǐng)求為第一實(shí)例獲取鎖定。持久保存提供者將第一命令記錄在命令日志中。持久保存提供者將第一命令提交到實(shí)例存儲(chǔ)。持久保存提供者從包括在應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令。第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供第二命令來處理。持久保存提供者將第二命令記錄在命令日志中。持久保存提供者將第二命令提交到實(shí)例存儲(chǔ)。持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第二命令的鎖定響應(yīng)。該鎖定響應(yīng)指示應(yīng)用主機(jī)是第二實(shí)例的鎖定的持有者。該鎖定響應(yīng)是在提交第一命令以后并在第一命令完成以前接收到的。持久保存提供者引用命令日志以確定第一命令的當(dāng)前解析提供的信息不足以確定(a)第一命令是否獲取了對(duì)第一實(shí)例的鎖定;以及(b)第一實(shí)例和第二實(shí)例是否是同一實(shí)例。不足的信息導(dǎo)致不清楚第二命令所請(qǐng)求的鎖定是否是之前由第一命令獲取的鎖定。持久保存提供者暫停第二 命令的處理直到達(dá)到對(duì)第一命令的進(jìn)一步解析。對(duì)第一命令的進(jìn)一步解析至少提供關(guān)于一個(gè)或多個(gè)所滿足的條件的附加信息。持久保存提供者基于所述附加信息來確定第一命令獲取了第二命令所請(qǐng)求的鎖定。持久保存提供者響應(yīng)于第一命令已經(jīng)獲取該鎖定的確定而舍棄第二命令。在一些實(shí)施例中,持久保存提供者從包括在應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令。第一命令被配置為請(qǐng)求獲取第一實(shí)例的鎖定。持久保存提供者將第一命令提交到實(shí)例存儲(chǔ)。持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第一命令的鎖定響應(yīng)。該鎖定響應(yīng)指示應(yīng)用主機(jī)已經(jīng)獲取了第一實(shí)例的鎖定。第一實(shí)例的鎖定是針對(duì)第一實(shí)例版本的。持久保存提供者從包括在應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令。第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供第二命令來處理。持久保存提供者將第二命令提交到實(shí)例存儲(chǔ)。持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第二命令的鎖定響應(yīng)。該鎖定響應(yīng)指示應(yīng)用主機(jī)已經(jīng)獲取了第二實(shí)例的鎖定。第二實(shí)例的鎖定是針對(duì)第二實(shí)例版本的。持久保存提供者確定第一實(shí)例和第二實(shí)例是同一實(shí)例。持久保存提供者確定第二實(shí)例版本是比第一實(shí)例版本更新的實(shí)例版本。持久保存提供者響應(yīng)于確定第一命令正持有針對(duì)陳舊的實(shí)例版本的鎖定而舍棄第一命令。提供本發(fā)明內(nèi)容以便以簡(jiǎn)化的形式介紹將在以下的詳細(xì)描述中進(jìn)一步描述的一些概念。本概述并非旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。本發(fā)明的附加特征和優(yōu)點(diǎn)將在以下描述中敘述,且其一部分根據(jù)本描述將是顯而易見的,或可通過對(duì)本發(fā)明的實(shí)踐來獲知。本發(fā)明的特征和優(yōu)點(diǎn)可通過在所附權(quán)利要求書中特別指出的工具和組合來實(shí)現(xiàn)和獲得。本發(fā)明的這些和其他特征將通過以下描述和所附權(quán)利要求書變得更加顯而易見,或可通過對(duì)下文中所述的本發(fā)明的實(shí)踐來領(lǐng)會(huì)。附圖簡(jiǎn)述為了描述可獲得本發(fā)明的上述和其他優(yōu)點(diǎn)和特征的方式,將通過參考附圖中示出的本發(fā)明的具體實(shí)施例來呈現(xiàn)以上簡(jiǎn)要描述的本發(fā)明的更具體描述??梢岳斫?,這些附圖僅描述本發(fā)明的典型實(shí)施例,從而不被認(rèn)為是對(duì)其范圍的限制,本發(fā)明將通過使用附圖用附加特征和細(xì)節(jié)來描述和說明,在附圖中圖I示出了促進(jìn)解決鎖定沖突的示例性計(jì)算機(jī)架構(gòu)。圖2示出了促進(jìn)解決鎖定沖突的另一示例性計(jì)算機(jī)架構(gòu)。圖3示出了用于解決鎖定沖突的示例性方法的流程圖。圖4示出了用于解決鎖定沖突的另一示例性方法的流程圖。詳細(xì)描述本發(fā)明延及用于解決鎖定沖突的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。本發(fā)明的實(shí)施例包括用于解決在兩個(gè)或更多個(gè)嘗試對(duì)存儲(chǔ)在實(shí)例存儲(chǔ)中的實(shí)例進(jìn)行鎖定的執(zhí)行線程之間鎖定沖突的方法。在一些實(shí)施例中, 持久保存提供者從包括在應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令。第一命令被配置為在一個(gè)或多個(gè)條件被滿足時(shí)請(qǐng)求為第一實(shí)例獲取鎖定。持久保存提供者將第一命令記錄在命令日志中。持久保存提供者將第一命令提交到實(shí)例存儲(chǔ)。持久保存提供者從包括在應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令。第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供第二命令來處理。持久保存提供者將第二命令記錄在命令日志中。持久保存提供者將第二命令提交到實(shí)例存儲(chǔ)。持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第二命令的鎖定響應(yīng)。該鎖定響應(yīng)指示應(yīng)用主機(jī)是第二實(shí)例的鎖定的持有者。該鎖定響應(yīng)是在提交第一命令以后并在第一命令完成以前接收到的。持久保存提供者引用命令日志以確定第一命令的當(dāng)前解析所提供的信息不足以確定(a)第一命令是否獲取了對(duì)第一實(shí)例的鎖定;以及(b)第一實(shí)例和第二實(shí)例是否是同一實(shí)例。不足的信息導(dǎo)致不清楚第二命令所請(qǐng)求的鎖定是否是之前由第一命令獲取的鎖定。持久保存提供者暫停第二命令的處理直到達(dá)到對(duì)第一命令的進(jìn)一步解析。對(duì)第一命令的進(jìn)一步解析至少提供關(guān)于所述一個(gè)或多個(gè)所滿足條件的附加信息。持久保存提供者基于所述附加信息來確定第一命令獲取了第二命令所請(qǐng)求的鎖定。持久保存提供者響應(yīng)于確定第一命令已經(jīng)獲取該鎖定而舍棄第二命令。在一些實(shí)施例中,持久保存提供者從包括在應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令。第一命令被配置為請(qǐng)求獲取第一實(shí)例的鎖定。持久保存提供者將第一命令提交到實(shí)例存儲(chǔ)。持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第一命令的鎖定響應(yīng)。該鎖定響應(yīng)指示應(yīng)用主機(jī)已經(jīng)獲取了第一實(shí)例的鎖定。第一實(shí)例的鎖定是針對(duì)第一實(shí)例版本的。持久保存提供者從包括在應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令。第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供第二命令來處理。持久保存提供者將第二命令提交到實(shí)例存儲(chǔ)。持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第二命令的鎖定響應(yīng)。該鎖定響應(yīng)指示應(yīng)用主機(jī)已經(jīng)獲取了第二實(shí)例的鎖定。第二實(shí)例的鎖定是針對(duì)第二實(shí)例版本的。持久保存提供者確定第一實(shí)例和第二實(shí)例是同一實(shí)例。持久保存提供者確定第二實(shí)例版本是比第一實(shí)例版本更新的實(shí)例版本。持久保存提供者響應(yīng)于確定第一命令正持有針對(duì)陳舊的實(shí)例版本的鎖定而舍棄第一命令。本發(fā)明的各實(shí)施例可包括或利用專用或通用計(jì)算機(jī),該專用或通用計(jì)算機(jī)包括諸如例如一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器等計(jì)算機(jī)硬件,如以下更詳細(xì)討論的。本發(fā)明范圍內(nèi)的各實(shí)施例還包括用于承載或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計(jì)算機(jī)可讀介質(zhì)。這樣的計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問的任何可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是物理存儲(chǔ)介質(zhì)。承載計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實(shí)施例可包括至少兩種顯著不同的計(jì)算機(jī)可讀介質(zhì)計(jì)算機(jī)存儲(chǔ)介質(zhì)和傳輸介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲(chǔ)、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備、或可用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的任何其他介質(zhì)?!熬W(wǎng)絡(luò)”被定義為允許在計(jì)算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息通過網(wǎng)絡(luò)或另一個(gè)通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計(jì)算機(jī)時(shí),該計(jì)算機(jī)將該連接適當(dāng)?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于攜帶計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。此外,在到達(dá)各種計(jì)算機(jī)系統(tǒng)組件之后,計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動(dòng)傳輸?shù)接?jì)算機(jī)存儲(chǔ)介質(zhì)(或反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳輸?shù)接?jì)算機(jī)系統(tǒng)RAM和/或計(jì)算機(jī)系統(tǒng)處的較不易失性的計(jì)算機(jī)存儲(chǔ)介質(zhì)。因而,應(yīng)當(dāng)理解,計(jì)算機(jī)存儲(chǔ)介質(zhì)可被包括在還利用(或甚至主要利用)傳輸介質(zhì)的計(jì)算機(jī)系統(tǒng)組件中。計(jì)算機(jī)可執(zhí)行指令例如包括,當(dāng)在處理器處執(zhí)行時(shí)使通用計(jì)算機(jī)、專用計(jì)算機(jī)、或 專用處理設(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如二進(jìn)制代碼、諸如匯編語言之類的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或動(dòng)作。相反,上述特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,這些計(jì)算機(jī)系統(tǒng)配置包括個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、尋呼機(jī)、路由器、交換機(jī)等等。本發(fā)明也可在其中通過網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)施。在分布式系統(tǒng)環(huán)境中,程序模塊可位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。圖I示出了促進(jìn)解決鎖定沖突的示例性計(jì)算機(jī)架構(gòu)100。參考
圖1,計(jì)算機(jī)架構(gòu)100包括應(yīng)用主機(jī)101、持久保存提供者103以及實(shí)例存儲(chǔ)107。所描繪的計(jì)算機(jī)系統(tǒng)中的每一個(gè)通過諸如例如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)或甚至因特網(wǎng)等網(wǎng)絡(luò)(或作為網(wǎng)絡(luò)的一部分)彼此連接。因此,所描繪的計(jì)算機(jī)系統(tǒng)中的每一個(gè)以及任何其他連接的計(jì)算機(jī)系統(tǒng)及其組件都可以創(chuàng)建消息相關(guān)數(shù)據(jù)并通過網(wǎng)絡(luò)交換消息相關(guān)數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報(bào)和利用IP數(shù)據(jù)報(bào)的其他更高層協(xié)議,諸如傳輸控制協(xié)議(“TCP”)、超文本傳輸協(xié)議(“HTTP”)、簡(jiǎn)單郵件傳輸協(xié)議(“SMTP”)等)。應(yīng)用主機(jī)101包括多個(gè)執(zhí)行線程,包括執(zhí)行線程102A和102B。一般而言,執(zhí)行線程被配置為發(fā)出用于與實(shí)例存儲(chǔ)107中的實(shí)例進(jìn)行交互的(例如持久保存)命令。應(yīng)用主機(jī)101可以為諸如例如程序或管理工具之類的實(shí)體,并且執(zhí)行線程可以是應(yīng)用主機(jī)101內(nèi)的操縱存儲(chǔ)在實(shí)例存儲(chǔ)107中的實(shí)例的模塊。在應(yīng)用主機(jī)101內(nèi),執(zhí)行線程102AU02B等等可以對(duì)應(yīng)于長(zhǎng)期運(yùn)行的應(yīng)用的程序序列。然而,執(zhí)行線程可能不直接對(duì)應(yīng)于由操作系統(tǒng)所提供的計(jì)算線程。例如,在支持異步執(zhí)行或從繼續(xù)點(diǎn)恢復(fù)的應(yīng)用主機(jī)運(yùn)行時(shí)中,執(zhí)行線程到計(jì)算線程的綁定可以是動(dòng)態(tài)和瞬時(shí)的。因此,應(yīng)用主機(jī)執(zhí)行線程中的一些或全部可以同時(shí)在一個(gè)或多個(gè)計(jì)算線程上執(zhí)行。應(yīng)用主機(jī)101的包括執(zhí)行線程102A和102B在內(nèi)的每個(gè)執(zhí)行線程都被配置為執(zhí)行應(yīng)用主機(jī)101的函數(shù)中的多個(gè)。例如,執(zhí)行線程可以被配置為向持久保存提供者請(qǐng)求實(shí)例存儲(chǔ)的實(shí)例句柄;將命令提交給實(shí)例持久保存命令處理器;以及接收響應(yīng)于所提交的命令的持久保存的應(yīng)用狀態(tài)。因此,一般而言,對(duì)應(yīng)用主機(jī)所執(zhí)行的函數(shù)的引用可以包括應(yīng)用主機(jī)的執(zhí)行線程所執(zhí)行的函數(shù)。實(shí)例存儲(chǔ)107為諸如例如實(shí)例108A和108B之類的實(shí)例提供了持久的存儲(chǔ)。實(shí)例存儲(chǔ)107被配置為接收和處理用于與實(shí)例交互的(例如持久保存)命令。實(shí)例存儲(chǔ)107可以持久保存應(yīng)用狀態(tài)以及響應(yīng)于持久保存命令將持久保存的狀態(tài)返回給請(qǐng)求實(shí)體(例如執(zhí)行線程)。一般而言,持久保存提供者103被配置為把從執(zhí)行線程 接收到的持久保存命令翻譯成與實(shí)例存儲(chǔ)107兼容的命令。例如,持久保存提供者103可以將來自執(zhí)行線程102A或102B的持久保存命令翻譯成與實(shí)例存儲(chǔ)107兼容的持久保存命令。如所描繪的那樣,持久保存提供者103包括實(shí)例持久保存命令處理器104、實(shí)例存儲(chǔ)驅(qū)動(dòng)程序106、命令時(shí)鐘108以及命令日志109。實(shí)例持久保存命令處理器104定義了應(yīng)用主機(jī)101與實(shí)例存儲(chǔ)107之間的合同。因此,實(shí)例持久保存命令處理器104是應(yīng)用主機(jī)101與實(shí)例存儲(chǔ)107之間的接口,所述接口允許應(yīng)用主機(jī)101提供修改或檢查實(shí)例存儲(chǔ)107的命令。例如,實(shí)例持久保存命令處理器104和使用SQL服務(wù)器實(shí)現(xiàn)的實(shí)例存儲(chǔ)107的組合可以稱為SQL持久保存提供者。持久保存提供者根據(jù)主機(jī)的命令使用一組由實(shí)例持久保存命令處理器104定義的可許可的狀態(tài)修改來修改實(shí)例存儲(chǔ)的狀態(tài)。一般而言,命令日志109被配置為跟蹤由應(yīng)用主機(jī)所提交的如下命令針對(duì)所述命令的命令結(jié)果和/或效果還未對(duì)應(yīng)用主機(jī)可見。在命令日志109中所跟蹤的命令被稱為“飛行中”命令。命令時(shí)鐘108是單調(diào)增加的計(jì)數(shù)器,所述計(jì)數(shù)器用于在應(yīng)用主機(jī)的執(zhí)行線程對(duì)命令的提交和/或?qū)γ罱Y(jié)果的接收中創(chuàng)建部分因果關(guān)系順序。因此,命令時(shí)鐘108被配置為為持久保存提供者103維護(hù)邏輯時(shí)間。在合適時(shí),在持久保存提供者103處接收的命令可以使用來自命令時(shí)鐘108的時(shí)間被加時(shí)間戳,并且被記錄到命令日志109中。因此,命令時(shí)鐘108促進(jìn)在時(shí)間上理解命令被接收的順序。實(shí)例持久保存命令處理器103可以在解決鎖定沖突(例如應(yīng)用主機(jī)101的競(jìng)爭(zhēng)性執(zhí)行線程之間)時(shí)(與其他信息一起)使用該時(shí)間上的理解。可能的是,一些但不是全部命令都被記錄到命令日志109中。當(dāng)確定是否在命令日志109中記錄命令時(shí),持久保存提供者103可以區(qū)分有可能導(dǎo)致鎖定沖突的命令和不可能導(dǎo)致鎖定沖突的命令??赡軐?dǎo)致鎖定沖突的命令被記錄在命令日志109中。另一方面,不可能導(dǎo)致鎖定沖突的命令可以被允許執(zhí)行而無需記錄。—些命令可以由于是如下類型的命令而被確定為不可能導(dǎo)致鎖定沖突所述命令一定不請(qǐng)求獲取任何鎖定。例如,請(qǐng)求對(duì)實(shí)例進(jìn)行未經(jīng)協(xié)調(diào)的讀取訪問的命令具有(如果有的話)與其他命令沖突的極少可能性,并且因此可以被允許執(zhí)行而無需記錄(因?yàn)檫@些命令不請(qǐng)求獲取鎖定)。另一方面,被確定為可能導(dǎo)致鎖定沖突的命令可以被記錄在命令日志109中。當(dāng)命令被接收到時(shí),實(shí)例持久保存命令處理器104可以具有不充足的信息以至于不能確定該命令是請(qǐng)求獲取已經(jīng)被鎖定的實(shí)例的鎖定。例如可能的是實(shí)例可以使用多種不同的別名來標(biāo)識(shí)。因此,在接收到包括實(shí)例別名的命令以后,所述實(shí)例別名指代什么實(shí)例可能不是顯而易見的。因此,實(shí)例持久保存命令處理器104不能將所述命令歸類為不可能導(dǎo)致鎖定沖突的命令,直到獲得另外的信息(將所述別名解析成實(shí)例句柄)。命令是否請(qǐng)求獲取鎖定可以取決于與所述命令相關(guān)聯(lián)的各個(gè)條件被滿足。持久保存提供者103內(nèi)部和外部(例如時(shí)間、日期等等)的信息二者都可以用于確定相關(guān)聯(lián)的條件是否被滿足。另外,持久保存提供者103可能在不同時(shí)間得知與不同的相關(guān)聯(lián)的條件相關(guān)的信息,所述不同時(shí)間包括命令在實(shí)例持久保存命令處理器104處被接收以前或以后。因此,所檢測(cè)到的導(dǎo)致鎖定沖突的可能性可以在附加信息變得可用時(shí)被除去。例如,請(qǐng)求在星期三時(shí)獲取鎖定的命令可最初被記錄在命令日志109中。然而,在持久保存提供者103得知今天是星期四時(shí),可以將該命令從命令日志109中移除。在一些實(shí)施例中,命令本身可能包含指示請(qǐng)求獲取鎖定的可能性的信息。因此,實(shí)例持久保存命令處理器104可以向該命令詢問是否存在該命令請(qǐng)求獲取鎖定的某種可能性。在其他實(shí)施例中,維護(hù)一定不請(qǐng)求獲取鎖定的命令的列表。當(dāng)命令被接收到時(shí),實(shí)例持 久保存命令處理器104可以引用該列表。一般而言,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序106被配置為在必要時(shí)分解命令以獲得與實(shí)例存儲(chǔ)107兼容的通信。例如,應(yīng)用主機(jī)命令集可能缺少來自實(shí)例存儲(chǔ)命令集的特定命令。然而可能的是,使用來自實(shí)例存儲(chǔ)命令集的兩個(gè)或更多個(gè)命令的組合,可以實(shí)現(xiàn)來自應(yīng)用主機(jī)命令集的命令。因此,當(dāng)持久保存提供者103檢測(cè)到所接收的持久保存命令未被包括在實(shí)例存儲(chǔ)命令集中時(shí),持久保存提供者103可以引用實(shí)例存儲(chǔ)驅(qū)動(dòng)程序106以將該命令分解成其他兼容的命令。有時(shí),執(zhí)行線程102AU02B等等可以將命令提交給持久保存提供者103。在合適時(shí),所接收的命令可以被命令時(shí)鐘108加時(shí)間戳并存儲(chǔ)在命令日志109中。圖3示出用于解決一個(gè)或更多執(zhí)行線程之間的鎖定沖突的示例性方法300的流程圖。方法300將參考計(jì)算機(jī)架構(gòu)100的組件和數(shù)據(jù)來描述。方法300包括持久保存提供者(例如持久保存提供者103)從包括在應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令的動(dòng)作,第一命令被配置為請(qǐng)求在一個(gè)或多個(gè)條件被滿足時(shí)獲取第一實(shí)例的鎖定(動(dòng)作301)。例如,實(shí)例持久保存命令處理器104可以從執(zhí)行線程102A接收命令111,包括條件133。命令111被配置為請(qǐng)求在條件133被滿足時(shí)獲取實(shí)例108A的鎖定。條件133可以表示條件語句,比如例如“如果今天是星期三則進(jìn)行鎖定”。方法300包括持久保存提供者將第一命令記錄在命令日志中的動(dòng)作(動(dòng)作302)。例如,在接收命令111以后,實(shí)例持久保存命令處理器104可能具有不充足的信息以至于不能肯定地確定命令111不可能導(dǎo)致鎖定沖突(例如實(shí)例持久保存命令處理器104可能不知道今天是否是星期三)。因此,實(shí)例持久保存命令處理器104將命令111記錄在命令記錄109中。在一些實(shí)施例中,命令日志109中的條目包括命令和來自命令時(shí)鐘108的時(shí)間戳。例如,條目131包括命令111和時(shí)間121。方法300包括持久保存提供者將第一命令提交給實(shí)例存儲(chǔ)的動(dòng)作(動(dòng)作303)。例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序106可以將命令111提交給實(shí)例存儲(chǔ)107。方法300包括持久保存提供者從包括在應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令的動(dòng)作,第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供由第二命令進(jìn)行處理(動(dòng)作304)。例如,實(shí)例 持久保存命令處理器104從執(zhí)行線程102B接收命令112。命令112被配置為請(qǐng)求將第二實(shí)例鎖定到執(zhí)行線程102B以供由命令112進(jìn)行處理。方法300包括持久保存提供者將第二命令記錄在命令日志中的動(dòng)作(動(dòng)作305)。例如,在接收到命令112以后,實(shí)例持久保存命令提供者104可能具有不充足的信息以至于不能肯定地確定命令112不可能導(dǎo)致鎖定沖突。例如,實(shí)例持久保存命令處理器104可能缺少用于確定命令112中的別名是否指代已經(jīng)為之請(qǐng)求鎖定獲取的實(shí)例的信息。因此,實(shí)例持久保存命令處理器104在命令日志109中記錄包括命令112和時(shí)間122 (在時(shí)間121之后的時(shí)間)的條目132。方法300包括持久保存提供者將第二命令提交給實(shí)例存儲(chǔ)的動(dòng)作(動(dòng)作306)。例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序106可以將命令112提交給實(shí)例存儲(chǔ)107。方法300包括持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第二命令的鎖定響應(yīng)的動(dòng)作,所述鎖定響應(yīng)指示應(yīng)用主機(jī)是第二實(shí)例的鎖定的持有者,所述鎖定響應(yīng)是在提交第一命令以后并且在第一命令完成以前接收的(動(dòng)作307)。例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序106可以從實(shí)例存儲(chǔ)107接收鎖定響應(yīng)114。鎖定響應(yīng)114可以指示應(yīng)用主機(jī)101是實(shí)例108A的鎖定的持有者。鎖定響應(yīng)114可以在提交命令111之后且在命令111完成以前被接收(例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序106可能還未接收到鎖定響應(yīng)113)。方法300包括持久保存提供者引用命令日志以確定第一命令的當(dāng)前解析所提供的信息不足以確定以下各項(xiàng)的動(dòng)作(a)第一命令是否獲取了對(duì)第一實(shí)例的鎖定;以及(b)第一實(shí)例和第二實(shí)例是否是同一實(shí)例,所述不足的信息導(dǎo)致不清楚第二命令所請(qǐng)求的鎖定是否是之前由第一命令所獲取的鎖定(動(dòng)作308)。例如,持久保存提供者103可能具有不充足的信息以至于不能確定命令111是否獲取了鎖定和/或命令111和112是否引用同一實(shí)例。所述不充足的信息導(dǎo)致不清楚命令112所請(qǐng)求的鎖定是否之前已被命令111獲得。持久保存提供者可以在命令日志中排除如下的命令所述命令由于所述命令僅僅引用一定不是實(shí)例108A的實(shí)例而可以被確定不可能導(dǎo)致鎖定沖突。例如,實(shí)例持久保存命令處理器104可以確定命令日志109中的命令還未解析已知不是實(shí)例108A的任何別名的實(shí)例別名。方法300包括持久保存提供者暫停第二命令的處理直到達(dá)到對(duì)第一命令的進(jìn)一步解析的動(dòng)作,進(jìn)一步解析至少提供關(guān)于所述一個(gè)或多個(gè)所滿足的條件的附加信息(動(dòng)作309)。例如,持久保存提供者103可以暫停處理命令112,直到達(dá)到對(duì)命令111的進(jìn)一步解析。對(duì)命令111的進(jìn)一步解析可以提供關(guān)于所滿足的條件133的信息。例如,如果命令111請(qǐng)求未解析的實(shí)例別名的鎖定,則持久保存提供者130可以暫停處理命令112,直到實(shí)例別名被解析成特定實(shí)例。另外可能的是,持久保存提供者103接收指示命令111已經(jīng)獲取了對(duì)實(shí)例108A的鎖定(并且由此命令111中的任何別名都指代實(shí)例108A)的鎖定響應(yīng)113。方法300包括持久保存提供者基于關(guān)于第一命令的解析的附加信息來確定對(duì)第二命令如何繼續(xù)的動(dòng)作(動(dòng)作310)。在一些實(shí)施例中,持久保存提供者基于所述附加信息來確定第一命令獲取了第二命令所請(qǐng)求的鎖定。例如,實(shí)例持久保存命令處理器104可以確定命令111獲取了對(duì)實(shí)例108A的鎖定。實(shí)例持久保存命令處理器104還可以確定命令112接收了鎖定響應(yīng)114,因?yàn)槊?12也請(qǐng)求了實(shí)例108A的鎖定(但是是在實(shí)例108A的鎖定已經(jīng)被命令111獲取以后)。在合適時(shí),實(shí)例持久保存命令處理器104可以引用命令日志109以確定命令111是在命令112以前接收到的。在這些實(shí)施例中,持久保存提供者響應(yīng)于確定第一命令已經(jīng)獲取該鎖定而舍棄第二命令。例如,持久保存提供者103可以響應(yīng)于確定命令111已經(jīng)獲取了對(duì)實(shí)例108A的鎖定而舍棄命令112。在其他實(shí)施例中,持久保存提供者基于所述附加信息來確定第一命令未曾獲取第二命令所請(qǐng)求的鎖定。例如,實(shí)例持久保存命令處理器104可以確定命令111未曾獲取對(duì)實(shí)例108A的鎖定。在這些其他實(shí)施例中,可以引導(dǎo)應(yīng)用主機(jī)嘗試覆蓋由針對(duì)第二命令接收的鎖定響應(yīng)所指示的鎖定。例如,可以引導(dǎo)應(yīng)用主機(jī)101嘗試覆蓋針對(duì)命令112的鎖定響應(yīng)114中所指示的鎖定。覆蓋鎖定的一個(gè)原因是,可以確定該鎖定是虛假鎖定。例如,剩余的鎖定可能是從已被應(yīng)用主機(jī)遺忘的以前計(jì)算中剩下的。因此,該命令存在于第二命令被實(shí)例存儲(chǔ)接收到時(shí),但是應(yīng)用主機(jī)在第二命令響應(yīng)被接收時(shí)不具有該鎖定的記錄。當(dāng)可能與第二命令沖突的之前發(fā)出的所有命令最后都未獲取鎖定時(shí),可以檢測(cè)到虛假鎖定??商娲?,持久保存提供者103可以引導(dǎo)應(yīng)用主機(jī)101使用已經(jīng)鎖定到命令111 的實(shí)例108A的副本。本發(fā)明的實(shí)施例還包括解決鎖定沖突,包括附加的命令。例如,持久保存提供者可以從包括在應(yīng)用主機(jī)中的第三執(zhí)行線程接收第三命令。第三命令可以被配置為請(qǐng)求在一個(gè)或多個(gè)條件被滿足時(shí)獲取第三實(shí)例的鎖定。持久保存提供者將第三命令記錄在命令日志中。持久保存提供者將第三命令提交到實(shí)例存儲(chǔ)。持久保存提供者引用命令日志以確定第三命令的當(dāng)前解析所提供的信息不足以確定Ca)第三命令是否獲取了對(duì)第三實(shí)例的鎖定;以及(b)第三實(shí)例和第二實(shí)例是否是同一實(shí)例。不足的信息導(dǎo)致不清楚第二命令(例如命令112)所請(qǐng)求的鎖定是否是之如由第二命令獲取的鎖定。持久保存提供者暫停第二命令的處理直到達(dá)到對(duì)第三命令的進(jìn)一步解析。進(jìn)一步解析至少提供關(guān)于所述一個(gè)或多個(gè)所滿足的條件的附加信息。持久保存提供者基于關(guān)于第三命令的解析的附加信息來確定對(duì)第二命令如何繼續(xù)。圖2示出了促進(jìn)鎖定沖突的解決的示例性計(jì)算機(jī)架構(gòu)200。參考圖2,計(jì)算機(jī)架構(gòu)200包括應(yīng)用主機(jī)201、持久保存提供者203以及實(shí)例存儲(chǔ)207。類似于計(jì)算機(jī)架構(gòu)100,所描繪的計(jì)算機(jī)系統(tǒng)中的每個(gè)都通過諸如例如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)或甚至因特網(wǎng)等網(wǎng)絡(luò)(或作為網(wǎng)絡(luò)的一部分)彼此連接(或者是所述網(wǎng)絡(luò)的一部分)。因此,所描繪的計(jì)算機(jī)系統(tǒng)中的每一個(gè)以及任何其他連接的計(jì)算機(jī)系統(tǒng)及其組件都可以創(chuàng)建消息相關(guān)數(shù)據(jù)并通過網(wǎng)絡(luò)交換消息相關(guān)數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報(bào)和利用IP數(shù)據(jù)報(bào)的其他更高層協(xié)議,諸如傳輸控制協(xié)議(“ TCP ”)、超文本傳輸協(xié)議(“HTTP ”)、簡(jiǎn)單郵件傳輸協(xié)議(“SMTP”)等)。在圖2中,來自圖I的相似標(biāo)記的組件包括相似的功能。例如,應(yīng)用主機(jī)201包括多個(gè)執(zhí)行線程,包括執(zhí)行線程202A和202B。一般而言,執(zhí)行線程被配置為發(fā)出用于與實(shí)例存儲(chǔ)207中的實(shí)例交互的(例如持久保存)命令。應(yīng)用主機(jī)201可以為諸如例如程序或管理工具之類的實(shí)體,并且執(zhí)行線程可以是應(yīng)用主機(jī)201內(nèi)的操縱存儲(chǔ)在實(shí)例存儲(chǔ)207中的實(shí)例的模塊。實(shí)例存儲(chǔ)207為諸如例如實(shí)例208之類的實(shí)例提供了持久的存儲(chǔ)。實(shí)例存儲(chǔ)207被配置為接收和處理用于與實(shí)例交互的(例如持久保存)命令。實(shí)例存儲(chǔ)207可以持久保存應(yīng)用狀態(tài)以及響應(yīng)于持久保存命令將持久保存的狀態(tài)返回給請(qǐng)求實(shí)體(例如執(zhí)行線程)?!愣裕志帽4嫣峁┱?03被配置為把從執(zhí)行線程接收到的持久保存命令翻譯成與實(shí)例存儲(chǔ)207兼容的命令。例如,持久保存提供者203可以將來自執(zhí)行線程202A或202B的持久保存命令翻譯成與實(shí)例存儲(chǔ)207兼容的持久保存命令。如所描繪的那樣,持久保存提供者203包括實(shí)例持久保存命令處理器204、實(shí)例存儲(chǔ)驅(qū)動(dòng)程序206、以及命令日志209。實(shí)例持久保存命令處 理器204定義了應(yīng)用主機(jī)201與實(shí)例存儲(chǔ)207之間的合同。因此,實(shí)例持久保存命令處理器204是應(yīng)用主機(jī)201與實(shí)例存儲(chǔ)207之間的接口,所述接口允許應(yīng)用主機(jī)201提供修改或檢查應(yīng)用存儲(chǔ)207的命令。例如,實(shí)例持久保存命令處理器204和使用SQL服務(wù)器實(shí)現(xiàn)的實(shí)例存儲(chǔ)207的組合可以稱為SQL持久保存提供者。持久保存提供者根據(jù)主機(jī)的命令使用一組由實(shí)例持久保存命令處理器204定義的可許可的狀態(tài)修改來修改實(shí)例存儲(chǔ)。類似于持久保存提供者103處的功能,可能的是,一些但不是全部命令被記錄到命令日志209中。當(dāng)確定是否在命令日志209中記錄命令時(shí),持久保存提供者203可以區(qū)分有可能導(dǎo)致鎖定沖突的命令和不可能導(dǎo)致鎖定沖突的命令??赡軐?dǎo)致鎖定沖突的命令被記錄在命令日志209中。另一方面,不可能導(dǎo)致鎖定沖突的命令可以被允許執(zhí)行而無需記錄。實(shí)例持久保存命令處理器204可以與命令處理器104如何對(duì)將命令記錄在命令日志109中作出確定類似地作出這些確定。一般而言,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序206被配置為在必要時(shí)分解命令以獲得與實(shí)例存儲(chǔ)207兼容的通信。例如,應(yīng)用主機(jī)命令集可能缺少來自實(shí)例存儲(chǔ)命令集的特定命令。然而可能的是,使用來自實(shí)例存儲(chǔ)命令集的兩個(gè)或更多的組合,可以實(shí)現(xiàn)來自應(yīng)用主機(jī)命令集的命令。因此,當(dāng)持久保存提供者203檢測(cè)到所接收的持久保存命令未被包括在實(shí)例存儲(chǔ)命令集中時(shí),持久保存提供者203可以引用實(shí)例存儲(chǔ)驅(qū)動(dòng)程序206以將該命令分解成其他兼容的命令。如所描繪的那樣,實(shí)例存儲(chǔ)207包括實(shí)例時(shí)鐘281。實(shí)例時(shí)鐘281被配置為維護(hù)存儲(chǔ)在實(shí)例存儲(chǔ)207中的實(shí)例的版本。實(shí)例時(shí)鐘281可以根據(jù)定義版本要在何時(shí)被更新的版本更新規(guī)則來維護(hù)版本。例如,版本更新規(guī)則可以規(guī)定實(shí)例版本要在下列情況下被更新(遞增)當(dāng)為實(shí)例采取獨(dú)占性鎖定時(shí);每當(dāng)為實(shí)例釋放獨(dú)占性鎖定時(shí);當(dāng)與實(shí)例相關(guān)聯(lián)的持久保存的狀態(tài)被修改時(shí);等等。維護(hù)實(shí)例版本可以包括在版本要被更新時(shí)遞增計(jì)數(shù)器。例如,在修改來自當(dāng)前為版本3的實(shí)例的數(shù)據(jù)以后,該實(shí)例可以被遞增為版本4。持久保存提供者203可以在解決鎖定沖突時(shí)使用實(shí)例版本。有時(shí),執(zhí)行線程202A、202B等等可以將命令提交給持久保存提供者203。同樣如所描繪的那樣,其他命令/結(jié)果217可以被傳遞到實(shí)例存儲(chǔ)207和其他應(yīng)用主機(jī)/從實(shí)例存儲(chǔ)207和其他應(yīng)用主機(jī)傳遞(可能通過其他中間持久保存提供者)。因此,應(yīng)用主機(jī)201以及其他應(yīng)用主機(jī)可以與實(shí)例存儲(chǔ)207交互,從而可能導(dǎo)致實(shí)例版本改變。例如,響應(yīng)于(從應(yīng)用主機(jī)201和/或其他應(yīng)用主機(jī))所接收的命令,實(shí)例208可以從版本261 (更早的版本)轉(zhuǎn)變?yōu)榘姹?63 (更新的版本)。圖4示出用于解決一個(gè)或更多執(zhí)行線程之間的鎖定沖突的示例性方法200的流程圖。方法400將參考計(jì)算機(jī)架構(gòu)200的組件和數(shù)據(jù)來描述。
方法400包括持久保存提供者從包括在應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令的動(dòng)作,第一命令被配置為請(qǐng)求獲取第一實(shí)例的鎖定(動(dòng)作401)。例如,實(shí)例持久保存命令處理器204從執(zhí)行線程202A接收命令211。第一命令211可以被配置為請(qǐng)求獲取實(shí)例208的鎖定。方法400包 括持久保存提供者將第一命令提交給實(shí)例存儲(chǔ)的動(dòng)作(動(dòng)作402)。例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序206可以將命令211提交給實(shí)例存儲(chǔ)207。方法400包括持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第一命令的鎖定響應(yīng)的動(dòng)作,所述鎖定響應(yīng)指示應(yīng)用主機(jī)已經(jīng)獲取了第一實(shí)例的鎖定,第一實(shí)例的鎖定針對(duì)第一實(shí)例版本(動(dòng)作403)。例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序206可以從實(shí)例存儲(chǔ)207接收鎖定響應(yīng)213。鎖定響應(yīng)213指示命令211已經(jīng)鎖定了實(shí)例208的版本261。實(shí)例持久保存提供者204可以將條目231記錄到命令日志209中。如所描繪的那樣,條目231將命令211與鎖定響應(yīng)213相關(guān)聯(lián)。方法400包括持久保存提供者從包括在應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令的動(dòng)作,第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供由第二命令進(jìn)行處理(動(dòng)作404)。例如,實(shí)例持久保存命令處理器204從執(zhí)行線程202B接收命令212。第二命令212可以被配置為請(qǐng)求獲取實(shí)例208的鎖定。方法400包括持久保存提供者將第二命令提交給實(shí)例存儲(chǔ)的動(dòng)作(動(dòng)作405)。例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序206可以將命令212提交給實(shí)例存儲(chǔ)207。方法400包括持久保存提供者從實(shí)例存儲(chǔ)接收針對(duì)第二命令的鎖定響應(yīng)的動(dòng)作,所述鎖定響應(yīng)指示應(yīng)用主機(jī)已經(jīng)獲取了第二實(shí)例的鎖定,第二實(shí)例的鎖定針對(duì)第二實(shí)例版本(動(dòng)作406)。例如,實(shí)例存儲(chǔ)驅(qū)動(dòng)程序206可以從實(shí)例存儲(chǔ)207接收鎖定響應(yīng)214。鎖定響應(yīng)214指示命令212已經(jīng)鎖定了實(shí)例208的版本263。如之前所描述的那樣,其他應(yīng)用主機(jī)可以與實(shí)例存儲(chǔ)207交互(這由其他命令/結(jié)果217來指示)。因此可能的是,命令211和212與在實(shí)例存儲(chǔ)207接收的其他命令(其來自其他應(yīng)用主機(jī))散布在一起。由于多種因素中的任何因素,實(shí)例存儲(chǔ)207可釋放之前曾被應(yīng)用主機(jī)獲取的鎖定。例如,由于通信故障,實(shí)例存儲(chǔ)207可以檢測(cè)到其不再與執(zhí)行線程202A (和/或持久保存提供者203)通信。結(jié)果,實(shí)例存儲(chǔ)207可釋放之前曾被執(zhí)行線程202A獲取的鎖定。然而,同樣由于通信故障,應(yīng)用主機(jī)201和/或持久保存提供者203可能不能得知實(shí)例存儲(chǔ)207釋放了該鎖定。因此,例如執(zhí)行線程202A可以就好像其已經(jīng)獲取了鎖定響應(yīng)213中指示的鎖定那樣繼續(xù),即使該鎖定事實(shí)上已經(jīng)在實(shí)例存儲(chǔ)207處被釋放。在釋放鎖定以后,另一應(yīng)用主機(jī)可獲取對(duì)同一實(shí)例的鎖定并且致使版本被更新。例如,通過其他/命令結(jié)果217中的命令,實(shí)例208可以從版本261 (更早的版本)更新到版本263 (更新的版本)。另外,這可能在執(zhí)行線程202A基于鎖定響應(yīng)213繼續(xù)但實(shí)際上不具有對(duì)實(shí)例208的鎖定時(shí)發(fā)生。方法400包括持久保存提供者確定第一實(shí)例和第二實(shí)例是同一實(shí)例的動(dòng)作(動(dòng)作407)。例如,實(shí)例持久保存命令處理器204可以確定鎖定響應(yīng)213和214 二者都請(qǐng)求了對(duì)實(shí)例208的鎖定獲取。方法400包括持久保存提供者確定第二實(shí)例版本是比第一實(shí)例版本更新的實(shí)例版本的動(dòng)作(動(dòng)作408)。例如,實(shí)例持久提供者204可以將版本261和版本263相比較。通過該比較,實(shí)例持久保存命令處理器204可以確定實(shí)例208的版本263比實(shí)例208的版本261更新,并且由此版本261是陳舊的。
方法400包括持久保存提供者響應(yīng)于確定第一命令正持有陳舊的實(shí)例版本的鎖定而舍棄第一命令的動(dòng)作(動(dòng)作409)。例如,實(shí)例持久保存命令處理器204可以響應(yīng)于確定命令211正持有版本261的鎖定而舍棄命令211。舍棄命令可以包括向執(zhí)行線程或應(yīng)用主機(jī)通知命令之前是否被指示為已成功完成。例如,在檢測(cè)到鎖定沖突以前,實(shí)例持久保存命令處理器204可能已經(jīng)向執(zhí)行線程202A指示命令211已成功完成。在檢測(cè)到鎖定沖突以后,實(shí)例持久保存命令處理器204可能向執(zhí)行線程202A或應(yīng)用主機(jī)201指示命令211已經(jīng)舍棄。執(zhí)行線程202A或應(yīng)用主機(jī)201可以基于表示命令211已經(jīng)舍棄的通知來采取校正動(dòng)作(例如通過終止執(zhí)行線程202A正在對(duì)實(shí)例208執(zhí)行的計(jì)算)。如之前所述,應(yīng)用主機(jī)可以嘗試比如例如在鎖定被確定為虛假時(shí)覆蓋鎖定。覆蓋鎖定可以包括可能無論應(yīng)用主機(jī)所持有的現(xiàn)有鎖定如何都重復(fù)獲取該鎖定的嘗試,其中由鎖定沖突指示特定鎖定版本。由于鎖定可能在第二命令被實(shí)例存儲(chǔ)接收以后已被釋放,因此可能的是,另一應(yīng)用主機(jī)或者甚至同一應(yīng)用主機(jī)然后已經(jīng)在解決鎖定沖突期間鎖定了該實(shí)例。因此,鎖定版本化提供了一種機(jī)制來檢測(cè)第二鎖定沖突中的鎖定不同于之前在嘗試獲取鎖定時(shí)的第一鎖定沖突期間所指示的鎖定。因此,第二鎖定沖突可以是兩種鎖定沖突類型中任一(其參照方法300和400予以了描述)。另外,兩種鎖定沖突類型任一都可以在沒有對(duì)第一鎖定沖突的知識(shí)的情況下被處理。因此,連續(xù)的嘗試是獨(dú)立的。例如,甚至可能在重新嘗試第二命令以前接收針對(duì)再次鎖定該實(shí)例的新命令的響應(yīng)。因此,可以確定新版本的鎖定已經(jīng)被接收并且鎖定獲取將失敗而不必回到實(shí)例存儲(chǔ)。本發(fā)明的實(shí)施例還包括通過同時(shí)實(shí)現(xiàn)與方法300和400中所述的技術(shù)類似的技術(shù)來解決三個(gè)或更多命令之間的鎖定沖突。例如,三個(gè)命令之間的鎖定沖突可以使用鎖定版本與確定命令何時(shí)已被接收的組合來解決。因此,本發(fā)明的實(shí)施例可以采用由狀態(tài)持久保存系統(tǒng)為每個(gè)持久保存的狀態(tài)存儲(chǔ)位置維護(hù)的邏輯鎖定時(shí)鐘。鎖定時(shí)間可以被合并到由實(shí)例持久保存命令處理器執(zhí)行的薄記中,以區(qū)分實(shí)例在之前的邏輯時(shí)間被應(yīng)用主機(jī)鎖定的情況和實(shí)例通過不同名稱被應(yīng)用主機(jī)并發(fā)地鎖定的情況。實(shí)例持久保存命令處理器可以附加地為應(yīng)用主機(jī)向狀態(tài)持久保存系統(tǒng)發(fā)出的命令維護(hù)邏輯命令時(shí)鐘,其中自測(cè)地確定哪些所發(fā)出的命令可能取得鎖定。然后,實(shí)例持久保存命令處理器可以通過如下方式來解決沖突暫停命令執(zhí)行直到可能發(fā)生鎖定沖突的命令的效果變?yōu)榭梢姡灰约皺z查鎖定時(shí)間以區(qū)分持久保存的狀態(tài)存儲(chǔ)位置的多個(gè)副本。例如,本發(fā)明的實(shí)施例可以被用以解決由于并行請(qǐng)求的重排序?qū)е碌逆i定沖突。實(shí)例持久保存命令處理器可以從第一執(zhí)行線程接收第一應(yīng)用消息以供遞送給實(shí)例。然而,基于第一應(yīng)用消息的內(nèi)容,目的地實(shí)例可能是不清楚的。例如,第一應(yīng)用消息可以包含業(yè)務(wù)信息(比如訂單號(hào)),所述業(yè)務(wù)信息是實(shí)例的數(shù)據(jù)的一部分而不是實(shí)例本身的唯一標(biāo)識(shí)符。即使應(yīng)用主機(jī)也可能不能將第一應(yīng)用消息解析成正確的目的地實(shí)例。例如,即使通過在第一應(yīng)用消息中檢查唯一的實(shí)例標(biāo)識(shí)符以及在之前加載的實(shí)例中搜索與消息中的業(yè)務(wù)信息相對(duì)應(yīng)的數(shù)據(jù),應(yīng)用主機(jī)仍然可能不能找到合適的實(shí)例。應(yīng)用存儲(chǔ)可能能夠通過將消息中的信息與同一實(shí)例的數(shù)據(jù)相關(guān)來將第一應(yīng)用消息解析成特定實(shí)例。因此,應(yīng)用主機(jī)可以要求實(shí)例存儲(chǔ)加載合適的實(shí)例(或者在還沒有合適的實(shí)例存在的情況下創(chuàng)建新實(shí)例)。在基本上相同時(shí)間期間,第二應(yīng)用消息被第二并行執(zhí)行線程上的應(yīng)用主機(jī)接收。第二應(yīng)用消息可以類似地不唯一地標(biāo)識(shí)目的地實(shí)例。此外,第二應(yīng)用消息可以包含不同的業(yè)務(wù)信息。例如,第二應(yīng)用消息可以包含顧客的送貨地址,而不是訂單號(hào)。因此,盡管兩個(gè)應(yīng)用消息可能指代同一目的地實(shí)例,但是應(yīng)用主機(jī)可能不能檢測(cè)到該關(guān)系。因此,第二執(zhí)行線程行進(jìn)到要求實(shí)例存儲(chǔ)加載合適的實(shí)例(或者在還沒有合適的實(shí)例存在的情況下創(chuàng)建新實(shí)例)。由于重排序,針對(duì)第二執(zhí)行線程的響應(yīng)可能是應(yīng)用主機(jī)已經(jīng)鎖定了相關(guān)實(shí)例。然而,應(yīng)用主機(jī)可能仍須接收對(duì)該鎖定的通知。因此,實(shí)例持久保存命令處理器可以引用命令日志來解決該沖突。其他事件序列可能導(dǎo)致實(shí)例存儲(chǔ)的類似響應(yīng)。例如,應(yīng)用主機(jī)可能已經(jīng)終止執(zhí)行 線程或者之前已經(jīng)崩潰,由此丟失其關(guān)于已經(jīng)鎖定該實(shí)例的記錄,而實(shí)例存儲(chǔ)仍然認(rèn)為應(yīng)用主機(jī)具有副本。類似的競(jìng)爭(zhēng)可能發(fā)生在一個(gè)執(zhí)行線程上的應(yīng)用主機(jī)保存和卸載實(shí)例而另一執(zhí)行線程同時(shí)加載同一實(shí)例時(shí)。鎖定沖突的解決必須區(qū)分這些不同情況以便一致地調(diào)應(yīng)用主機(jī)和實(shí)例存儲(chǔ)的狀態(tài)。本發(fā)明的實(shí)施例可以用于解決由于這些以及個(gè)其他附加事件序列導(dǎo)致的鎖定沖突。本發(fā)明的實(shí)施例還包括具有一個(gè)或多個(gè)持久保存提供者的計(jì)算機(jī)架構(gòu)。每個(gè)持久保存提供者都提供多個(gè)應(yīng)用主機(jī),每個(gè)應(yīng)用主機(jī)都具有一個(gè)或多個(gè)執(zhí)行線程,具有對(duì)存儲(chǔ)在實(shí)例存儲(chǔ)處的實(shí)例的訪問。在這些實(shí)施例內(nèi),每個(gè)實(shí)例持久保存提供者都可以包括命令時(shí)鐘,并且實(shí)例存儲(chǔ)可以包括實(shí)例時(shí)鐘。從命令時(shí)鐘以及從實(shí)例時(shí)鐘獲得的信息可以被用于基于時(shí)間排序和版本化二者來解決應(yīng)用主機(jī)之間的鎖定沖突。因此,本發(fā)明的實(shí)施例可以解決多個(gè)應(yīng)用主機(jī)之間的鎖定沖突,其中命令在不同時(shí)間被接收并且指代實(shí)例的不同版本。本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所描述的實(shí)施例在所有方面都應(yīng)被認(rèn)為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的范圍所涵蓋。
權(quán)利要求
1.一種在包括一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器的計(jì)算機(jī)架構(gòu)中用于解決兩個(gè)或更多執(zhí)行線程之間的鎖定沖突的方法,所述計(jì)算機(jī)架構(gòu)還包括應(yīng)用主機(jī)、持久保存提供者以及實(shí)例存儲(chǔ),所述應(yīng)用主機(jī)包括多個(gè)執(zhí)行線程,所述執(zhí)行線程被配置為把用于持久保存實(shí)例的命令發(fā)出給所述實(shí)例存儲(chǔ)以及從所述實(shí)例存儲(chǔ)訪問實(shí)例,所述命令的至少子集導(dǎo)致執(zhí)行線程在執(zhí)行期間請(qǐng)求實(shí)例鎖定,該方法包括 所述持久保存提供者從包括在所述應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令的動(dòng)作,所述第一命令被配置為請(qǐng)求在一個(gè)或多個(gè)條件被滿足時(shí)獲取第一實(shí)例的鎖定; 所述持久保存提供者將所述第一命令記錄在命令日志中的動(dòng)作; 所述持久保存提供者將所述第一命令提交給所述實(shí)例存儲(chǔ)的動(dòng)作; 所述持久保存提供者從包括在所述應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令的動(dòng)作,所述第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供由所述第二命令進(jìn)行處理; 所述持久保存提供者將所述第二命令記錄在所述命令日志中的動(dòng)作; 所述持久保存提供者將所述第二命令提交給所述實(shí)例存儲(chǔ)的動(dòng)作; 所述持久保存提供者從所述實(shí)例存儲(chǔ)接收針對(duì)所述第二命令的鎖定響應(yīng)的動(dòng)作,所述鎖定響應(yīng)指示所述應(yīng)用主機(jī)是第二實(shí)例的鎖定的持有者,所述鎖定響應(yīng)是在提交第一命令以后并且在第一命令完成以前接收的; 持久保存提供者引用所述命令日志以確定第一命令的當(dāng)前解析所提供的信息不足以確定下列各項(xiàng)的動(dòng)作(a)第一命令是否獲取了對(duì)第一實(shí)例的鎖定;以及(b)第一實(shí)例和第二實(shí)例是否是同一實(shí)例,所述不足的信息導(dǎo)致不清楚第二命令所請(qǐng)求的鎖定是否是之前由第一命令所獲取的鎖定; 所述持久保存提供者暫停第二命令的處理直到達(dá)到對(duì)第一命令的進(jìn)一步解析的動(dòng)作,進(jìn)一步解析至少提供關(guān)于所述一個(gè)或多個(gè)被滿足的條件的附加信息;以及 所述持久保存提供者基于關(guān)于第一命令的解析的附加信息來確定對(duì)第二命令如何繼續(xù)的動(dòng)作。
2.如權(quán)利要求I所述的方法,其特征在于,還包括所述持久保存提供者基于所述附加信息來確定第一命令曾獲取第二命令所請(qǐng)求的鎖定的動(dòng)作。
3.如權(quán)利要求2所述的方法,其特征在于,所述持久保存提供者將第一命令記錄在命令日志中的動(dòng)作包括將第一命令與第一時(shí)間戳一起記錄在所述命令日志中的動(dòng)作,所述第一時(shí)間戳由所述持久保存提供者的命令時(shí)鐘來提供;以及 其中所述持久保存提供者將第二命令記錄在命令日志中的動(dòng)作包括將第二命令與第二時(shí)間戳一起記錄在所述命令日志中的動(dòng)作,所述第二時(shí)間戳由所述持久保存提供者的命令時(shí)鐘來提供。
4.如權(quán)利要求3所述的方法,其特征在于,所述持久保存提供者基于所述附加信息來確定第一命令曾獲取第二命令所請(qǐng)求的鎖定的動(dòng)作包括基于第一時(shí)間戳和第二時(shí)間戳來確定第一命令是在第二命令以前被接收的動(dòng)作。
5.如權(quán)利要求2所述的方法,其特征在于,所述持久保存提供者確定對(duì)第二命令如何繼續(xù)的動(dòng)作包括丟棄第二命令的動(dòng)作。
6.如權(quán)利要求2所述的方法,其特征在于,所述持久保存提供者確定對(duì)第二命令如何繼續(xù)的動(dòng)作包括將所述應(yīng)用主機(jī)引導(dǎo)到第一命令已獲得鎖定的實(shí)例的副本的動(dòng)作。
7.如權(quán)利要求2所述的方法,其特征在于,所述持久保存提供者確定第一命令曾獲取第二命令所請(qǐng)求的鎖定的動(dòng)作包括 確定第一命令曾獲取所述實(shí)例的一版本的鎖定的動(dòng)作;以及 確定針對(duì)第二命令的鎖定響應(yīng)是針對(duì)所述實(shí)例的同一版本的鎖定的動(dòng)作。
8.如權(quán)利要求I所述的方法,其特征在于,還包括所述持久保存提供者基于所述附加信息來確定第一命令未曾獲取第二命令所請(qǐng)求的鎖定的動(dòng)作。
9.如權(quán)利要求8所述的方法,其特征在于,還包括 所述持久保存提供者從包括在所述應(yīng)用主機(jī)中的第三執(zhí)行線程接收第三命令的動(dòng)作,所述第三命令被配置為請(qǐng)求在一個(gè)或多個(gè)條件被滿足時(shí)獲取第三實(shí)例的鎖定; 所述持久保存提供者將所述第三命令記錄在命令日志中的動(dòng)作; 所述持久保存提供者將所述第三命令提交給所述實(shí)例存儲(chǔ)的動(dòng)作; 所述持久保存提供者引用所述命令日志以確定所述第三命令的當(dāng)前解析所提供的信息不足以確定如下各項(xiàng)的動(dòng)作(a)第三命令是否獲取了對(duì)第三實(shí)例的鎖定;以及(b)第三實(shí)例和第二實(shí)例是否是同一實(shí)例,所述不足的信息導(dǎo)致不清楚第二命令所請(qǐng)求的鎖定是否是之前由第三命令所獲取的鎖定; 所述持久保存提供者暫停第二命令的處理直到達(dá)到對(duì)第三命令的進(jìn)一步解析的動(dòng)作,進(jìn)一步解析至少提供關(guān)于所述一個(gè)或多個(gè)被滿足的條件的附加信息;以及 所述持久保存提供者基于關(guān)于第三命令的解析的附加信息來確定對(duì)第二命令如何繼續(xù)的動(dòng)作。
10.如權(quán)利要求I所述的方法,其特征在于,所述持久保存提供者接收第二命令包括所述持久保存提供者在接收第一命令以后接收第二命令的動(dòng)作;以及 其中所述持久保存提供者從所述實(shí)例存儲(chǔ)接收針對(duì)第二命令的鎖定響應(yīng)的動(dòng)作包括在接收與第一命令相對(duì)應(yīng)的響應(yīng)以前接收針對(duì)第二命令的鎖定響應(yīng)的動(dòng)作。
11.如權(quán)利要求I所述的方法,其特征在于,所述持久保存提供者引用所述命令日志以確定第一命令的當(dāng)前解析所提供的信息不足的動(dòng)作包括確定第一命令中的別名還未被解析成實(shí)例的動(dòng)作。
12.—種在包括一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器的計(jì)算機(jī)架構(gòu)中用于解決兩個(gè)或更多執(zhí)行線程之間的鎖定沖突的方法,所述計(jì)算機(jī)架構(gòu)還包括應(yīng)用主機(jī)、持久保存提供者以及實(shí)例存儲(chǔ),所述一個(gè)或多個(gè)應(yīng)用主機(jī)中的每個(gè)包括至少一個(gè)執(zhí)行線程,所述執(zhí)行線程被配置為把用于持久保存實(shí)例的命令發(fā)出給所述實(shí)例存儲(chǔ)以及從所述實(shí)例存儲(chǔ)訪問實(shí)例,所述命令的至少子集導(dǎo)致執(zhí)行線程在執(zhí)行期間請(qǐng)求實(shí)例鎖定,該方法包括 所述持久保存提供者從包括在所述應(yīng)用主機(jī)中的第一執(zhí)行線程接收第一命令的動(dòng)作,所述第一命令被配置為請(qǐng)求獲取第一實(shí)例的鎖定; 所述持久保存提供者將所述第一命令提交給所述實(shí)例存儲(chǔ)的動(dòng)作; 所述持久保存提供者從所述實(shí)例存儲(chǔ)接收針對(duì)所述第一命令的鎖定響應(yīng)的動(dòng)作,所述鎖定響應(yīng)指示所述應(yīng)用主機(jī)已經(jīng)獲取了第一實(shí)例的鎖定,第一實(shí)例的鎖定針對(duì)第一實(shí)例版本; 所述持久保存提供者從包括在所述應(yīng)用主機(jī)中的第二執(zhí)行線程接收第二命令的動(dòng)作,所述第二命令被配置為請(qǐng)求將第二實(shí)例鎖定到第二執(zhí)行線程以供由所述第二命令進(jìn)行處理; 所述持久保存提供者將所述第二命令提交給所述實(shí)例存儲(chǔ)的動(dòng)作; 所述持久保存提供者從所述實(shí)例存儲(chǔ)接收針對(duì)所述第二命令的鎖定響應(yīng),所述鎖定響應(yīng)指示所述應(yīng)用主機(jī)已經(jīng)獲取了第二實(shí)例的鎖定,第二實(shí)例的鎖定針對(duì)第二實(shí)例版本; 所述持久保存提供者確定第一實(shí)例和第二實(shí)例是同一實(shí)例的動(dòng)作; 所述持久保存提供者確定第二實(shí)例版本是比第一實(shí)例版本更新的實(shí)例版本的動(dòng)作;以及 所述持久保存提供者響應(yīng)于確定第一命令正持有陳舊的實(shí)例版本的鎖定而舍棄第一命令的動(dòng)作。
13.如權(quán)利要求12所述的方法,其特征在于,所述持久保存提供者從所述實(shí)例存儲(chǔ)接收針對(duì)第一命令的鎖定響應(yīng)的動(dòng)作包括在接收針對(duì)第二命令的鎖定響應(yīng)以前接收針對(duì)第一命令的鎖定響應(yīng)的動(dòng)作。
14.如權(quán)利要求12所述的方法,其特征在于,還包括 所述實(shí)例存儲(chǔ)在所述實(shí)例存儲(chǔ)將第一鎖定響應(yīng)發(fā)送給所述持久保存提供者以后并且在所述實(shí)例存儲(chǔ)從所述持久保存提供者接收第二命令以前從一個(gè)或多個(gè)其他應(yīng)用主機(jī)接收一個(gè)或多個(gè)其他命令的動(dòng)作;以及 實(shí)例時(shí)鐘響應(yīng)于所述一個(gè)或多個(gè)其他命令根據(jù)版本更新規(guī)則將所述實(shí)例的所述版本從第一版本實(shí)例更新為第二版本實(shí)例的動(dòng)作。
15.一種用于解決持久實(shí)例的鎖定沖突的計(jì)算機(jī)系統(tǒng),該計(jì)算機(jī)系統(tǒng)包括 一個(gè)或多個(gè)處理器; 系統(tǒng)存儲(chǔ)器; 上面存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令表示一個(gè)或多個(gè)應(yīng)用主機(jī)、持久保存提供者和實(shí)例存儲(chǔ),所述一個(gè)或多個(gè)應(yīng)用主機(jī)中的每個(gè)都包括至少一個(gè)執(zhí)行線程,所述一個(gè)或多個(gè)應(yīng)用中的每個(gè)都被配置為 把用于持久保存實(shí)例的命令發(fā)送給所述實(shí)例存儲(chǔ)以及從所述實(shí)例存儲(chǔ)訪問實(shí)例,所述命令的至少子集導(dǎo)致執(zhí)行線程在執(zhí)行期間請(qǐng)求實(shí)例鎖定; 其中所述實(shí)例存儲(chǔ)被配置為 從所述持久保存提供者接收請(qǐng)求獲取存儲(chǔ)在所述實(shí)例存儲(chǔ)中的實(shí)例的鎖定的命令; 根據(jù)實(shí)例版本化策略使用實(shí)例時(shí)鐘來維護(hù)實(shí)例版本; 向所述持久保存提供者指示鎖定已經(jīng)在何時(shí)響應(yīng)于所接收的命令針對(duì)實(shí)例被獲取,包括指示已獲取鎖定的實(shí)例的版本;以及 向所述持久保存提供者指示針對(duì)所接收的命令的鎖定獲取的請(qǐng)求在何時(shí)針對(duì)已經(jīng)被鎖定的實(shí)例;以及 其中所述持久保存提供者被配置為 從包括在所述一個(gè)或多個(gè)應(yīng)用主機(jī)中的執(zhí)行線程接收命令,包括接收被配置為請(qǐng)求獲取實(shí)例的鎖定的命令; 確定命令被接收的邏輯時(shí)間; 將命令被接收的邏輯時(shí)間記錄在命令日志中;從 所述實(shí)例存儲(chǔ)接收指示,所述指示指示鎖定已經(jīng)在何時(shí)響應(yīng)于所接收的命令針對(duì)實(shí)例被獲??; 從所述實(shí)例存儲(chǔ)接收指示,所述指示指示針對(duì)所接收的命令的鎖定獲取的請(qǐng)求在何時(shí)針對(duì)已經(jīng)被鎖定的實(shí)例; 基于所接收的指示與記錄在所述命令日志中的信息一起來檢測(cè)應(yīng)用主機(jī)之間的鎖定沖突;以及 基于所接收的指示與記錄在所述命令日志中的信息一起來解決鎖定沖突。
全文摘要
本發(fā)明涉及用于解決鎖定沖突的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。對(duì)于狀態(tài)持久保存系統(tǒng),本發(fā)明的實(shí)施例可以為每個(gè)持久保存的狀態(tài)存儲(chǔ)位置采用邏輯鎖定時(shí)鐘。鎖定時(shí)間可以被合并到由命令處理器執(zhí)行的薄記中,以區(qū)分實(shí)例在之前的邏輯時(shí)間被應(yīng)用主機(jī)鎖定的情況和實(shí)例通過不同名稱被應(yīng)用主機(jī)并發(fā)地鎖定的情況。還為應(yīng)用主機(jī)向狀態(tài)持久保存系統(tǒng)發(fā)出的命令維護(hù)邏輯命令時(shí)鐘,其中自測(cè)地確定哪些所發(fā)出的命令可能取得鎖定。命令處理器可以通過如下方式來解決沖突暫停命令執(zhí)行直到可能發(fā)生鎖定沖突的命令的效果變?yōu)榭梢姡灰约皺z查鎖定時(shí)間以區(qū)分持久保存的狀態(tài)存儲(chǔ)位置的多個(gè)副本。
文檔編號(hào)G06F9/44GK102640113SQ201080054552
公開日2012年8月15日 申請(qǐng)日期2010年11月5日 優(yōu)先權(quán)日2009年12月4日
發(fā)明者J·D·布朗, N·A·艾倫 申請(qǐng)人:微軟公司