2017-10-24 3 views
0

レプリカがプライマリステータスを失いつつあるときに、メモリ内のデータを信頼性の高い辞書にダンプするシナリオがあります。プライマリレプリカが閉じる直前に信頼性の高いコレクションにデータを書き込む方法

キャンセルトークンを見て、RunAsyncメソッドで正しい方法を実行することはできますか?例:

protected override async Task RunAsync(CancellationToken cancellationToken) 
    { 
     while (true) 
     { 
      // exit only after data is dumped to reliable dictionary 
      if (cancellationToken.IsCancellationRequested) 
      { 
       await DumpDataToDictionaryAsync(data); 
       cancellationToken.ThrowIfCancellationRequested(); 
      } 
     ... 
+1

プライマリの切り替え時に通知されます。こちらを参照してください。https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-advanced-usage#stateful-サービスレプリカライフサイクル。情報を他の場所に保存することができます。 – Robert

+0

これは実際にまともな考えです。私はリモーティングを介してデータを受け取る別のサービスを持つことができます。 –

答えて

2

情報を保持する必要がある場合は、変更する必要があります。サービスがクラッシュした場合、何かを保存する能力はありません。プライマリからセカンダリに切り替える場合でも、信頼できるコレクションを保存する方法はありません。ライフサイクル状態に関するdocumentation:プライマリが降格されたサービスファブリック、で

、たまたま最初のものの一つは、基礎となる状態への書き込みアクセスが取り消されていることです。

レプリカがプライマリステータスを失うことを知らせる方法がないため、信頼性の高いコレクションにデータを保存することは不可能です。

+0

ここでのユースケースは、収集された重要でない統計情報をダンプすることです。クラッシュの際にデータが失われたり、予期せぬことが起こったりすると、実際には問題になりません。 サービスファブリックは、ローリングアップグレードを実行するときなど、プライマリを降格させる前にシグナリングを提供しません。 –

+0

キャンセルトークンがトリガーされた後、別のサービスまたは外部ストレージに送信できます。しかし、取り消しトークンが取り消される前に、シグナリングはありません。 –

関連する問題