2016-08-03 18 views
7

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 

本の原因である可能性がありますどのような任意のアイデア?

+0

これは約1年たっているので、このメソッドは約365回実行されていたはずです;) これまでにこれまでになったことはありますか?あなたが見つけたものに基づいて共有するものは何ですか? – ckittel

+0

残念ながら、私たちはこのシナリオをあきらめて、これらのチェックポイントをBlobストレージに保存します。再テストする時間を見つけようとします。 –

答えて

0

GetCheckpointKeyはデバイスと通信していますか?これはスレッドとブロックを占めている可能性があります。これは、スレッドプールが使い尽くされていることを意味します。

おそらくわらではがいているかもしれませんが、GetCheckpointKeyを待っていないと少し疑わしいです。

+0

デバイスとのすべての通信は、上記のコードがヒットした時点で行われます。 GetCheckpointKeyには、2つの文字列を連結して辞書キーを取得するstring.Format呼び出しのみが含まれています。次の呼び出し(SetAsync)はまだ正常に実行され、すばやく完了します。 CommitAsync呼び出しがハングします。 –

関連する問題