持久资源管理器(IEnlistmentNotification)恢复

时间:2011-11-08 20:24:48

标签: c# .net resourcemanager

我正在通过实施IEnlistmentNotification创建资源管理器。我正在尝试创建一个耐用的RM,它为我提出了一些问题。

  1. 每个事务是否应该有IEnlistmentNotification个对象,还是单个IEnlistmentNotification对象应该处理所有事务?

    我认为每个交易都需要它自己,所以它可以为每笔交易做一个准备/提交/回滚。

  2. 如何处理恢复文件?

    我的假设是,在准备期间,事务中发生的所有事情都将写入恢复文件。

    每笔交易的信息如何分开?我认为每个事务都有一个单独的文件,或者每个恢复操作单个文件都有某种事务ID。

    当发生恢复时,Transaction.Current.TransactionInformation.DistributedIdentifier/LocalIdentifier是否与崩溃前相同?因此,可以使用其中一个ID在恢复期间识别事务。

  3. 恢复如何发生?

    如果我的资源管理器内部使用了TransactionScope,并且系统在示波器中间崩溃(插拔或其他什么),那么系统启动时如何进行恢复?吗?我假设某个进程正在运行其中包含范围的代码知道系统崩溃或其他什么的代码?在这种情况下,设置哪些系统/程序/服务来实际处理恢复?

1 个答案:

答案 0 :(得分:1)

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

  1. 是的,每笔交易都应该拥有自己的IEnlistmentNotification。
  2. 是的,您使用`Transaction.TransactionInformation.DistributedIdentifier / LocalIdentifier'跟踪恢复文件或文件中的事务。
  3. 运行代码的应用程序将检查是否需要恢复,并重新登记拔出插头时未完成的事务。