ITransaction.CommitAsyncで異常な動作が発生しています。場合によってはCommitAsyncの呼び出しに24時間かかることがあります。ITransaction.CommitAsync呼び出しに実際に長時間(24時間)かかる可能性がありますか?
このシナリオでは、ハードウェアデバイスからメーターデータを5分ごとに読み取り、チェックポイントを信頼できる辞書に格納します。したがって、5分ごとに次のコードが実行されます。
var profileCheckpoints = await StateManager.GetOrAddAsync<IReliableDictionary<string, DateTime>>(StateNameProfileCheckpoints);
using (var tx = StateManager.CreateTransaction())
{
// Dictionary key is a device guid + device register id,
// e.g.: 13cdaad8-9b8b-4fba-b336-e72e06c047ab-1.0.99.1.0.255
var key = GetCheckpointKey(context);
// checkpoint is a DateTime
await profileCheckpoints.SetAsync(tx, key, checkpoint);
// this call will sometimes take 24h to complete
await tx.CommitAsync();
}
ステートフルなサービスで複数のバックグラウンドタスクが実行されています。各バックグラウンドタスクは、単一のハードウェアデバイスと通信し、上記のコードを実行します。すべてのタスクは同じ信頼性の高い辞書を使用しますが、デバイス固有のキーのみを更新します。
一部のタスクは完全に正常に実行され、CommitAsync呼び出しはすぐに戻ります。他のタスクでは、CommitAsync呼び出しが完了するまでに24時間かかることがあります。例外はスローされず、コードは通常通り続きます。これが発生すると、このタスクの追加CommitAsync呼び出しはすべて、サービスを再起動しない限り完了するまでに24時間かかります。
クラスタおよびすべてのアプリケーションは、ポータルで正常と報告されます。私は別のノード上のイベントビューアで見たときしかし、私は次の警告がログに記録されている参照してください(1回程度5秒):
dropping message <some guid>, Actor = Transport, Action = ‘’, fault = FABRIC_E_CONNECTION_CLOSED_BY_REMOTE_END
本の原因である可能性がありますどのような任意のアイデア?
これは約1年たっているので、このメソッドは約365回実行されていたはずです;) これまでにこれまでになったことはありますか?あなたが見つけたものに基づいて共有するものは何ですか? – ckittel
残念ながら、私たちはこのシナリオをあきらめて、これらのチェックポイントをBlobストレージに保存します。再テストする時間を見つけようとします。 –