2011-11-08 10 views
2

IEnlistmentNotificationを実装してリソースマネージャを作成しています。私は私のためにいくつかの質問をもたらした耐久性のあるRMを作成しようとしています。 耐久性のあるリソースマネージャ(IEnlistmentNotification)リカバリ

  1. は、トランザクションごとIEnlistmentNotificationオブジェクトが存在するか、単一IEnlistmentNotificationのオブジェクトは、すべてのトランザクションを処理する必要がありますか?

    私は、それぞれのトランザクションがそれ自身を望むと思うので、トランザクションごとにPrepare/Commit/Rollbackを実行できます。

  2. リカバリファイルはどのように処理されますか?

    私が想定していることは、トランザクションで起こっていることは、準備中に回復ファイルに書き込まれるということです。

    各トランザクションの情報をどのように分離できますか?私は、各トランザクションが別々のファイルを持っていると思います、または、単一のファイルが各回復操作のためのある種のトランザクションIDを持っていると思います。

    リカバリが行われているときに、Transaction.Current.TransactionInformation.DistributedIdentifier/LocalIdentifierはクラッシュ前と同じですか?したがって、これらのIDの1つは、リカバリ中にトランザクションを識別するために使用できます。

  3. 復旧はどのように行われますか?

    私のリソースマネージャーがその内部で使用されていて、スコープの真ん中でシステムがクラッシュ(プラグが抜かれたものなど)されている場合は、システムのバックアップが開始されるとどのように復旧しますか?私は、システムクラッシュなどについて知っている範囲を持つコードを実行していたプロセスを想定していますか?その場合、どのシステム/プログラム/サービスが実際に復旧を処理するためにセットアップされていますか?

答えて

1

私は答えがすべてRavenDB Source Codeであると確信しています。

  1. はい、すべてのトランザクションには、独自のIEnlistmentNotificationが必要です。
  2. はい、 `Transaction.TransactionInformation.DistributedIdentifier/LocalIdentifier 'を使用して、リカバリファイル内のトランザクションを追跡します。
  3. コードを実行しているアプリケーションは、回復が必要な場合にチェックを行い、プラグが引っ張られたときに完了しなかったトランザクションを再登録します。
関連する問題