2017-11-30 15 views
0

私はクラッシュするようには見えないが、最初の呼び出し後も同じ機能を実行し続ける耐久性のある機能を持っています。この最初の呼び出しの後にブレークポイントを設定しようとしても効果はありません。耐久性機能実行中

 
[30/11/2017 16:16:21] Function started (Id=972ee93c-ab61-4834-937c-207e8953821d) 
[30/11/2017 16:16:21] Executing 'CompileFeatureObservations' (Reason='', Id=972ee93c-ab61-4834-937c-207e8953821d) 
[30/11/2017 16:16:21] Starting Feature Compilation. 
[30/11/2017 16:16:21] Function completed (Success, Id=972ee93c-ab61-4834-937c-207e8953821d, Duration=58ms) 
[30/11/2017 16:16:21] Executed 'CompileFeatureObservations' (Succeeded, Id=972ee93c-ab61-4834-937c-207e8953821d) 
[30/11/2017 16:16:21] b540b650019244719a7f3a61e45735f4: Function 'CompileFeatureObservations (Activity)', version '' completed. ContinuedAsNew: False. IsReplay: False. Output: (62123 bytes). State: Completed. HubName: DurableFunctionsHub. AppName: . SlotName: . ExtensionVersion: 1.0.0.0.

私が見ることができる唯一の要因は、65kbの制限を下回っていますが、要求ペイロードのサイズです。

マニュアルに記載されているファンアウト/ファンインパターンを使用しています。私のタスク配列のサイズが〜100になると、動作を停止してから無限のサイクルに入るようです。

おそらく、ファンアウトの制限を超えましたか?関数 "インスタンス"の数を制御する方法はありますか?

私は消費計画を使用しています。

私が動作を停止するために見つけることができる唯一の方法は、ローカルストレージエミュレータを停止し、元のlocaldbを削除して再初期化することです。

さらに詳しいトラブルシューティングの提案はありますか?

+0

コードを共有する必要があります – Mikhail

+0

私には許可がありません。それは計算のようにマップ/削減を実行しています。デバッグ中にエラーやtry/catchブロックは例外をキャッチしません。私は間違いなくファンアウトの数にリンクしていると思う。 – user1200984

答えて

2

この問題は、関数の大きな出力であると確信しています。これは、ここに記載されている既知の問題です:https://github.com/Azure/azure-functions-durable-extension/issues/79

ここで誤解される事がこのログ文です:

[30/11/2017 16:16:21] b540b650019244719a7f3a61e45735f4: Function 'CompileFeatureObservations (Activity)', version '' completed. ContinuedAsNew: False. IsReplay: False. Output: (62123 bytes). State: Completed. 

それは出力が約60 KBです主張し、それはUTF-8エンコーディングを想定しているので、ここで報告数が、実際には正しくありません。実際にAzure StorageはUTF-32エンコーディングを使用しているため、実際のサイズはおそらくこれよりもはるかに大きくなります。これを修正する必要があることに注意します。 beta2アップデートでは、これを正しく報告し、例外をスローします。それ以降は、任意に大きな戻り値をサポートします。

質問の他の部分に答えるだけで、ファンアウトの程度は問題ではありません。これは単純に戻り値のサイズです。これを縮小することができれば、それはあなたの問題を解決するはずです。

+0

ああ、私の入力ペイロードが60KB未満であっても大きすぎると報告された理由を説明しています。 – user1200984

+0

私はここに行く方法は、 'CompileFeatureObservations'関数の結果をdocumentdbに保存してオーケストレーターで取得することだと思っていましたが、オーケストレーターでそれを行うことはできません。そのため、ファンアウトを計算してオーケストレーターから開始する方法が不明です。一言で言えば、大規模なペイロードを回避する方法。 – user1200984

+0

大規模なメッセージのサポート(https://github.com/Azure/azure-functions-durable-extension/issues/26)に取り組んでいます。それが起こるまで、オーケストレーションをリファクタリングする必要があります。 1つの選択肢は、サブオーケストレーションを使用して、より小さいおよび/または入れ子になったファンアウト/ファンインを行うことです。大規模ペイロードを渡す必要がある場合は、BLOBストレージバインディングを使用してデータをBLOBストレージに保存し、URLを渡すこともできます。 –

関連する問題