Events added to in-memory queue are not being raised after ContinueAsNew called. #676
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 45/100
調査の方向性
まず issue 内の orchestrator_function と HttpStarter の例から始め、続けて 2 つのリクエストをすぐに連続して送信して動作を再現します。wait_for_external_event、raise_event、continue_as_new がインメモリのイベントキューをどのように処理するかを追跡します。最初のリクエストの処理後に発生したイベントが、再起動されたオーケストレーターによって受信され、処理されれば完了です。
索引モデルが issue の本文から書いたものです。
説明
🐛 Describe the bug
I had the exact same problem as described in the c# library (https://github.com/Azure/azure-functions-durable-extension/issues/676): only the first event is processed when raising event in a quick succession.
🤔 Expected behavior
I was expecting continue_as_new to resume the orchestrator_function and to pick the next event in the queue.
☕ Steps to reproduce
What Durable Functions patterns are you using, if any?
I was testing the singleton orchestrator patterns. Instead of directly invoking the orchestrator, I use raise_event to communicate with the orchestrator. The orchestrator listens to the incoming event with wait_for_external_event and triggers the processing.
Any minimal reproducer we can use?
The orchestrator function
def orchestrator_function(context: df.DurableOrchestrationContext):
logging.warning("orchestrator starts")
result = yield context.wait_for_external_event('wait_for_request')
req = json.loads(result)
yield context.call_activity('Hello1', json.dumps(req))
yield context.call_activity('Hello1', json.dumps(req))
yield context.call_activity('Hello1', json.dumps(req))
logging.warning("orchestrator ends", req)
context.continue_as_new(None)
The Hello1 activity function uses time.sleep(5) to simulate extended processing.
The HttpStarter
async def main(req: func.HttpRequest, starter: str) -> func.HttpResponse:
client = df.DurableOrchestrationClient(starter)
req_body = req.get_json()
function_name = "orchestrator_function"
h = hashlib.sha256()
h.update(str.encode(req_body['endpoint']))
instance_id = h.hexdigest()
existing_instance = await client.get_status(instance_id)
logging.warning(req_body)
logging.warning(f"Start orchestration with ID = '{instance_id}'.")
if existing_instance.runtime_status in [
df.OrchestrationRuntimeStatus.Completed,
df.OrchestrationRuntimeStatus.Failed,
df.OrchestrationRuntimeStatus.Terminated,
None]:
instance_id = await client.start_new(function_name, instance_id, None)
logging.warning(f"Started orchestration with ID = '{instance_id}'.")
await client.raise_event(instance_id, 'wait_for_request', req_body)
return client.create_check_status_response(req, instance_id)
When sending two HTTP requests to the HttpStarter consecutively (not simultaneously but with a bit gap), the orchestrator gets the first message and finishes the processing, but never picks up the second message.
Are you running this locally or on Azure?
I have tested both locally and on Azure. I currently work on a prototype that uses the singleton durable function to control the traffic to endpoints. Some endpoints may allow concurrent traffic and some may not.
⚡If deployed to Azure
We have access to a lot of telemetry that can help with investigations. Please provide as much of the following information as you can to help us investigate!
- Timeframe issue observed: 2021-11-02
- Function App name: tao-func-test1
- Function name(s): adapter_controller (orchestrator), http_trigger (HttpStarter)
- Azure region: US east
- Orchestration instance ID(s): 5e0c90d2d434f24b1ec3df57316653d00de3cc27b2001902cd0983c18e381b78
- Azure storage account name: taofunctest1
If you don't want to share your Function App or storage account name GitHub, please at least share the orchestration instance ID. Otherwise it's extremely difficult to look up information.
- 主要言語
- Python
- スター
- 157
- フォーク
- 70
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Azure/azure-functions-durable-python のほかの issue
-
Enhancement fixed-in-v2 P3
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Azure/azure-functions-durable-python#617 · コメント 1 件 ·
-
bug Debuggability fixed-in-v2 P2
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Azure/azure-functions-durable-python#587 · コメント 2 件 · リアクション 1 件 ·
-
Custom object serialization broken for orchestrator return values対応中かも @andystaples が 69 日前に担当しました。 オープンbug fixed-in-v2 P2
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
Azure/azure-functions-durable-python#568 · コメント 1 件 ·
-
bug fixed-in-v2 P3
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Azure/azure-functions-durable-python#475 · コメント 1 件 ·
-
Enhancement fixed-in-v2 P3
難易度 4/5 3〜5日 初心者へのやさしさ 62/100
Azure/azure-functions-durable-python#618 · コメント 1 件 ·
Azure/azure-functions-durable-python の issue をすべて見る
似ている issue
-
first
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
AcademySoftwareFoundation/rmtc#54 · コメント 1 件 ·
-
feature/cohorts feature/feature-flags team/feature-flags
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
License examples/ as MIT対応中かも @PGrayCS が今日担当しました。 オープンdocumentation enhancement example good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
speedyk-005/yasbd-lib#383 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
interactions-py/interactions.py#1827 ·
-
Managed start can fail when OpenVMM reads its control capability before NVX writes it対応中かも @ppenna が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信