2011-11-08 95 views
2

我正在通過執行IEnlistmentNotification來創建資源管理器。我正在嘗試創建一個持久的RM,爲我提出了一些問題。耐用資源管理器(IEnlistmentNotification)恢復

  1. 如果有每筆交易的IEnlistmentNotification對象或應一個IEnlistmentNotification對象處理所有的事務嗎?

    我認爲每筆交易都希望自己擁有這筆交易,因此可以爲每筆交易進行準備/提交/回滾。

  2. 恢復文件是如何處理的?

    我的假設是,事務中發生的一切都將在Prepare期間寫入恢復文件。

    每筆交易的信息如何分開?我認爲每個事務都有一個單獨的文件,或者每個恢復操作的單個文件都有一個事務ID。

    當恢復發生時,Transaction.Current.TransactionInformation.DistributedIdentifier/LocalIdentifier與崩潰前相同嗎?因此,可以使用這些ID中的一個在恢復期間識別事務。

  3. 恢復是如何發生的?

    如果我的TransactionScope在我的資源管理器內部被使用,並且系統崩潰(插入被拉或任何其他內容),系統恢復時如何恢復?我假設一些運行代碼的進程知道系統崩潰或其他什麼東西?在那種情況下,設置了哪些系統/程序/服務來實際處理恢復?

回答

1

我相信我找到了我在RavenDB Source Code的所有答案。

  1. 是的,每筆交易都應該有它自己的IEnlistmentNotification。
  2. 是的,您使用`Transaction.TransactionInformation.DistributedIdentifier/LocalIdentifier'來跟蹤恢復文件中的事務。
  3. 正在運行代碼的應用程序將執行檢查,以確定是否需要恢復,並重新徵用拔出插頭時未完成的事務。