From 8b393cc0d7f6c052bde1368d434bc6fcb703445c Mon Sep 17 00:00:00 2001 From: Richard McDaniel <1130888+rmcdaniel@users.noreply.github.com> Date: Wed, 4 Nov 2026 00:32:59 -0600 Subject: [PATCH] Name Workflow 2.20.2 as the fix for stranded stream messages Workflow 2.20.2 moves pending inbound stream messages to the continued run at continue-as-new (workflow#1018) and to the successor at redrive (workflow#1013). Say so on the Message Streams and Continue As New pages, keep the 2.20.1-and-earlier behavior and workaround, and add the redrive behavior to the redrive section. The shared-cursor caveat (#1011) stays until 2.20.3. All eight languages. Co-Authored-By: Claude Opus 5.5 --- docs/failures-and-recovery.md | 1 + docs/features/continue-as-new.md | 10 +++++----- docs/features/message-streams.md | 15 ++++++++------- .../current/failures-and-recovery.md | 1 + .../current/features/continue-as-new.md | 13 ++++++------- .../current/features/message-streams.md | 18 ++++++++++-------- i18n/de/source-hashes.json | 6 +++--- .../current/failures-and-recovery.md | 1 + .../current/features/continue-as-new.md | 2 +- .../current/features/message-streams.md | 2 +- i18n/es/source-hashes.json | 6 +++--- .../current/failures-and-recovery.md | 1 + .../current/features/continue-as-new.md | 12 ++++++------ .../current/features/message-streams.md | 18 +++++++++--------- i18n/fr/source-hashes.json | 6 +++--- .../current/failures-and-recovery.md | 1 + .../current/features/continue-as-new.md | 2 +- .../current/features/message-streams.md | 2 +- i18n/ja/source-hashes.json | 6 +++--- .../current/failures-and-recovery.md | 1 + .../current/features/continue-as-new.md | 12 ++++++------ .../current/features/message-streams.md | 18 +++++++++--------- i18n/pt-BR/source-hashes.json | 6 +++--- .../current/failures-and-recovery.md | 1 + .../current/features/continue-as-new.md | 14 +++++++------- .../current/features/message-streams.md | 17 +++++++++-------- i18n/uk/source-hashes.json | 6 +++--- .../current/failures-and-recovery.md | 1 + .../current/features/continue-as-new.md | 2 +- .../current/features/message-streams.md | 2 +- i18n/zh-Hans/source-hashes.json | 6 +++--- 31 files changed, 110 insertions(+), 99 deletions(-) diff --git a/docs/failures-and-recovery.md b/docs/failures-and-recovery.md index a38a9615fc9..16d0c464b04 100644 --- a/docs/failures-and-recovery.md +++ b/docs/failures-and-recovery.md @@ -118,6 +118,7 @@ The successor replays workflow code from the start: - A signal wait (`await('name')`) that received and applied its signal is reused with the signal's value. The signal is not delivered again. - An update that was accepted, applied and completed before the failed step is recorded again at the same position. Replay runs the update handler from its recorded arguments, so the workflow's state matches. The update is not delivered again. A rejected update, and one the failure closed before it ran, are left out. - `outbox()->sendReference()` and `inbox()->receive()` in reused workflow code return the message the failed run sent or consumed. They don't send or consume it again. A replayed receive whose original call found nothing reads the stream again. +- In Workflow 2.20.2 and later, inbound stream messages still pending on the failed run move to the successor. Workflow 2.20.1 and earlier left them on the failed run, so the successor never received them ([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013)). - If an activity failure ended the run, the failed activity call is scheduled as a new activity execution, using the retry policy in the workflow code. Its attempts start again. - If the run failed in workflow code or on a structural limit, the successor resumes at the step the workflow code never reached. - Everything after the failed step runs as it would in a new run. diff --git a/docs/features/continue-as-new.md b/docs/features/continue-as-new.md index 1b4fa1b54b8..c8ba9d80cdb 100644 --- a/docs/features/continue-as-new.md +++ b/docs/features/continue-as-new.md @@ -165,8 +165,8 @@ class PollingWorkflow extends Workflow For long-lived human-input or assistant loops, prefer the first-class `$this->inbox()` / `$this->outbox()` [Message Streams](./message-streams.md) -facade. The cursor position moves to the continued run, while consumed messages -remain on the original run as history evidence. In Workflow releases through -2.20.1, stream messages still pending at continue-as-new stay on the closed run -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)); see -[Message Streams](./message-streams.md#continue-as-new). +facade. Pending stream messages and the cursor position move to the continued +run, while consumed messages remain on the original run as history evidence. +Workflow 2.20.1 and earlier left pending stream messages on the closed run +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +fixed in 2.20.2); see [Message Streams](./message-streams.md#continue-as-new). diff --git a/docs/features/message-streams.md b/docs/features/message-streams.md index 18e37e2a413..ca876846c81 100644 --- a/docs/features/message-streams.md +++ b/docs/features/message-streams.md @@ -129,13 +129,14 @@ store separately from durable message ordering. ## Continue-As-New -Message streams are instance-first. When a workflow continues as new, the -cursor position carries forward to the continued run, and consumed messages -remain attached to the original run as historical evidence. In Workflow -releases through 2.20.1, messages still pending when the run continues as new -stay on the closed run, and the continued run never receives them -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)). -Until a release fixes this, receive pending messages before you call +Message streams are instance-first. When a workflow continues as new, pending +inbound messages move to the continued run, the cursor position carries +forward, and consumed messages remain attached to the original run as +historical evidence. Workflow 2.20.1 and earlier moved only the cursor: +messages still pending when the run continued as new stayed on the closed run, +and the continued run never received them +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +fixed in 2.20.2). On those releases, receive pending messages before you call `continueAsNew()`, or send input that must survive the handoff as a [signal](./signals.md): accepted signals that the run has not applied move to the continued run. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/failures-and-recovery.md b/i18n/de/docusaurus-plugin-content-docs/current/failures-and-recovery.md index dc84aa89425..4a88a3e86df 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/failures-and-recovery.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/failures-and-recovery.md @@ -115,6 +115,7 @@ Der Nachfolger spielt den Workflow-Code von Anfang an erneut ab: - Eine Signalwarteoperation (`await('name')`), die ihr Signal empfangen und angewendet hat, wird mit dem Wert des Signals wiederverwendet. Das Signal wird nicht erneut zugestellt. - Ein Update, das vor dem fehlgeschlagenen Schritt angenommen, angewendet und abgeschlossen wurde, wird an derselben Stelle erneut aufgezeichnet. Das Replay führt den Update-Handler mit den aufgezeichneten Argumenten aus, sodass der Zustand des Workflows übereinstimmt. Das Update wird nicht erneut zugestellt. Ein abgelehntes Update und eines, das der Fehler vor seiner Ausführung geschlossen hat, werden ausgelassen. - `outbox()->sendReference()` und `inbox()->receive()` in wiederverwendetem Workflow-Code geben die Nachricht zurück, die der fehlgeschlagene Lauf gesendet oder konsumiert hat. Sie senden oder konsumieren sie nicht erneut. Ein Receive im Replay, dessen ursprünglicher Aufruf nichts gefunden hat, liest den Stream erneut. +- In Workflow 2.20.2 und später gehen eingehende Stream-Nachrichten, die auf dem fehlgeschlagenen Lauf noch ausstehen, auf den Nachfolger über. Workflow 2.20.1 und früher ließen sie auf dem fehlgeschlagenen Lauf, sodass der Nachfolger sie nie erhielt ([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013)). - Wenn ein Aktivitätsfehler den Lauf beendet hat, wird der fehlgeschlagene Aktivitätsaufruf als neue Aktivitätsausführung mit der Wiederholungsrichtlinie aus dem Workflow-Code eingeplant. Seine Versuche beginnen von vorn. - Wenn der Lauf im Workflow-Code oder an einem strukturellen Limit fehlgeschlagen ist, setzt der Nachfolger an dem Schritt fort, den der Workflow-Code nie erreicht hat. - Alles nach dem fehlgeschlagenen Schritt läuft wie in einem neuen Lauf. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/features/continue-as-new.md b/i18n/de/docusaurus-plugin-content-docs/current/features/continue-as-new.md index 9e661f3ca94..a0c13508fa6 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/features/continue-as-new.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/features/continue-as-new.md @@ -178,10 +178,9 @@ class PollingWorkflow extends Workflow Für langlebige Schleifen mit menschlichen Eingaben oder Assistenten bevorzugen Sie die vollwertige Fassade `$this->inbox()` / `$this->outbox()` für -[Nachrichtenströme](./message-streams.md). Die Cursor-Position geht auf den -fortgesetzten Lauf über, während verbrauchte Nachrichten als Historiennachweis -auf dem ursprünglichen Lauf bleiben. In Workflow-Releases bis einschließlich -2.20.1 bleiben Stromnachrichten, die beim Continue-as-new noch ausstehen, auf dem -geschlossenen Lauf -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)); siehe -[Nachrichtenströme](./message-streams.md#continue-as-new). +[Nachrichtenströme](./message-streams.md). Ausstehende Stromnachrichten und die +Cursor-Position gehen auf den fortgesetzten Lauf über, während verbrauchte +Nachrichten als Historiennachweis auf dem ursprünglichen Lauf bleiben. Workflow +2.20.1 und früher ließen ausstehende Stromnachrichten auf dem geschlossenen Lauf +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +behoben in 2.20.2); siehe [Nachrichtenströme](./message-streams.md#continue-as-new). diff --git a/i18n/de/docusaurus-plugin-content-docs/current/features/message-streams.md b/i18n/de/docusaurus-plugin-content-docs/current/features/message-streams.md index 7d708c1f6cf..13d1388f657 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/features/message-streams.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/features/message-streams.md @@ -137,14 +137,16 @@ Payload-Speicher getrennt von der dauerhaften Nachrichtenreihenfolge prüfen. ## Continue-as-new {#continue-as-new} -Nachrichtenströme orientieren sich an Instanzen. Bei Continue-as-new geht die -Cursor-Position auf den fortgesetzten Lauf über, und verbrauchte Nachrichten -bleiben als historische Nachweise am ursprünglichen Lauf. In Workflow-Releases -bis einschließlich 2.20.1 bleiben Nachrichten, die beim Continue-as-new noch -ausstehen, am geschlossenen Lauf, und der fortgesetzte Lauf erhält sie nie -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)). -Bis ein Release dies behebt, empfangen Sie ausstehende Nachrichten, bevor Sie -`continueAsNew()` aufrufen, oder senden Sie Eingaben, die die Übergabe +Nachrichtenströme orientieren sich an Instanzen. Bei Continue-as-new gehen +ausstehende eingehende Nachrichten auf den fortgesetzten Lauf über, die +Cursor-Position wird übernommen, und verbrauchte Nachrichten bleiben als +historische Nachweise am ursprünglichen Lauf. Workflow 2.20.1 und früher +übertrugen nur den Cursor: Nachrichten, die beim Continue-as-new noch +ausstanden, blieben am geschlossenen Lauf, und der fortgesetzte Lauf erhielt sie +nie +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +behoben in 2.20.2). Empfangen Sie in diesen Releases ausstehende Nachrichten, +bevor Sie `continueAsNew()` aufrufen, oder senden Sie Eingaben, die die Übergabe überstehen müssen, als [Signal](./signals.md): Angenommene Signale, die der Lauf noch nicht angewendet hat, gehen auf den fortgesetzten Lauf über. diff --git a/i18n/de/source-hashes.json b/i18n/de/source-hashes.json index 4ae37cf6b9f..54e620e42fb 100644 --- a/i18n/de/source-hashes.json +++ b/i18n/de/source-hashes.json @@ -29,19 +29,19 @@ "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", "deployment.md": "503230f8cc2378726d32557cc17bc4c44f527082c382c39a6b24ab1913476877", - "failures-and-recovery.md": "352aef2a7cdb60b84ba6d9fb265b5ab8e4d53d5d027ed2683a0fe1604da6895b", + "failures-and-recovery.md": "e92644a4808a0712f905ebdf649b2de51f6b65958107881e18427e5d1fa56ed2", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", "features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b", "features/concurrency.md": "a7a3eb2274f7b14faf722494569b7663c07ab48afdf2e9225e58914b84cacbb4", "features/condition-waits.md": "451261eda990c9591a0db69839d872184b5c64da6b537a582133095b8d4b599e", - "features/continue-as-new.md": "9757751fe96226bd4499c3548f446ef7eb4e0d61ef4001064aa4ee66738731d9", + "features/continue-as-new.md": "50c79f317155e052a3f2f37d198a71bdfc496a454905293f40cf09d73138f25b", "features/events.md": "c466df05908748489226a3d1410c9203cf6f2986a4bb7539db1c5f82715abc7b", "features/external-payload-storage.md": "acc312fa2f50a43c96e1d235439124d28a7048f0bf3abac34319467fcbf7e898", "features/heartbeats.md": "e3d84178788dff92954e08d08f006def0a991a481f99301facbda8c6ca21a7a0", "features/local-activities.md": "05fca8f2104d8f4e7bd8b48040f5615f18d0ee2795922fb65c56f8d3d70ed204", "features/memo.md": "621aa630e37fbef6f84d761c92f99dc3fe8756879008c659cbad0600eb14fd5d", - "features/message-streams.md": "b04de795e9856015438ecc0659001d386295e428c45b6ab79a2d7311fcfae924", + "features/message-streams.md": "b30c7629d3fb9d20f27c4bcf0551457d65ac44a541b119312a2cde31aba48354", "features/queries.md": "c66dd9542a062edd8158a46cebc9f1bf926aaf3599dca4a3122bd9860df6e2a2", "features/sagas.md": "8dae955491a54bcbf545ce6972928df59f3885e00f98bf3a57b14dad98f89161", "features/schedules.md": "717b9115ca62a69a3a1ea65f1bec68a0aebe0d5e6d2421df297bb129c597a523", diff --git a/i18n/es/docusaurus-plugin-content-docs/current/failures-and-recovery.md b/i18n/es/docusaurus-plugin-content-docs/current/failures-and-recovery.md index fad4c6a9066..31c43bca812 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/failures-and-recovery.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/failures-and-recovery.md @@ -119,6 +119,7 @@ La sucesora vuelve a reproducir el código del workflow desde el principio: - Una espera de señal (`await('name')`) que recibió y aplicó su señal se reutiliza con el valor de la señal. La señal no se vuelve a entregar. - Un update que se aceptó, se aplicó y se completó antes del paso fallido se vuelve a registrar en la misma posición. El replay ejecuta el handler del update con sus argumentos registrados, así que el estado del workflow coincide. El update no se vuelve a entregar. Un update rechazado, y uno que el fallo cerró antes de ejecutarse, se omiten. - `outbox()->sendReference()` e `inbox()->receive()` en el código de workflow reutilizado devuelven el mensaje que la ejecución fallida envió o consumió. No lo vuelven a enviar ni a consumir. Un receive en replay cuya llamada original no encontró nada vuelve a leer el stream. +- En Workflow 2.20.2 y versiones posteriores, los mensajes entrantes del stream que siguen pendientes en la ejecución fallida pasan a la sucesora. Workflow 2.20.1 y versiones anteriores los dejaban en la ejecución fallida, así que la sucesora nunca los recibía ([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013)). - Si un fallo de actividad terminó la ejecución, la llamada de actividad fallida se programa como una ejecución de actividad nueva, con la política de reintentos del código del workflow. Sus intentos empiezan de nuevo. - Si la ejecución falló en el código del workflow o por un límite estructural, la sucesora se reanuda en el paso que el código del workflow nunca alcanzó. - Todo lo que sigue al paso fallido se ejecuta como en una ejecución nueva. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/features/continue-as-new.md b/i18n/es/docusaurus-plugin-content-docs/current/features/continue-as-new.md index f55a984d152..08a4623ec51 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/features/continue-as-new.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/features/continue-as-new.md @@ -152,4 +152,4 @@ class PollingWorkflow extends Workflow } ``` -Para bucles prolongados de intervención humana o asistentes, prefiere la fachada de primera clase `$this->inbox()` / `$this->outbox()` de [Flujos de mensajes](./message-streams.md). El cursor pasa a la nueva ejecución; los mensajes consumidos permanecen en la original como evidencia histórica. En las versiones de Workflow hasta la 2.20.1, los mensajes del flujo aún pendientes al continuar como nueva ejecución permanecen en la ejecución cerrada ([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)); consulta [Flujos de mensajes](./message-streams.md#continue-as-new). +Para bucles prolongados de intervención humana o asistentes, prefiere la fachada de primera clase `$this->inbox()` / `$this->outbox()` de [Flujos de mensajes](./message-streams.md). Los mensajes pendientes del flujo y el cursor pasan a la nueva ejecución; los mensajes consumidos permanecen en la original como evidencia histórica. Workflow 2.20.1 y versiones anteriores dejaban los mensajes pendientes del flujo en la ejecución cerrada ([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), corregido en 2.20.2); consulta [Flujos de mensajes](./message-streams.md#continue-as-new). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/features/message-streams.md b/i18n/es/docusaurus-plugin-content-docs/current/features/message-streams.md index d500ac90d6f..9c3a4873d7e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/features/message-streams.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/features/message-streams.md @@ -112,7 +112,7 @@ Esto mantiene pequeño el historial y permite validar el almacén por separado d ## Continuar como nueva ejecución {#continue-as-new} -Los flujos se centran en la instancia. Al continuar como nueva ejecución, el cursor pasa a la sucesora y los mensajes consumidos siguen vinculados a la original como evidencia histórica. En las versiones de Workflow hasta la 2.20.1, los mensajes aún pendientes cuando la ejecución continúa como nueva permanecen en la ejecución cerrada y la sucesora nunca los recibe ([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)). Hasta que una versión lo corrija, recibe los mensajes pendientes antes de llamar a `continueAsNew()`, o envía como [señal](./signals.md) la entrada que deba sobrevivir al traspaso: las señales aceptadas que la ejecución aún no haya aplicado pasan a la sucesora. +Los flujos se centran en la instancia. Al continuar como nueva ejecución, los mensajes entrantes pendientes pasan a la sucesora, el cursor avanza con ella y los mensajes consumidos siguen vinculados a la original como evidencia histórica. Workflow 2.20.1 y versiones anteriores solo trasladaban el cursor: los mensajes aún pendientes cuando la ejecución continuaba como nueva permanecían en la ejecución cerrada y la sucesora nunca los recibía ([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), corregido en 2.20.2). En esas versiones, recibe los mensajes pendientes antes de llamar a `continueAsNew()`, o envía como [señal](./signals.md) la entrada que deba sobrevivir al traspaso: las señales aceptadas que la ejecución aún no haya aplicado pasan a la sucesora. Un workflow prolongado puede desprenderse del historial conservando la misma ruta pública de mensajes: diff --git a/i18n/es/source-hashes.json b/i18n/es/source-hashes.json index 4ae37cf6b9f..54e620e42fb 100644 --- a/i18n/es/source-hashes.json +++ b/i18n/es/source-hashes.json @@ -29,19 +29,19 @@ "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", "deployment.md": "503230f8cc2378726d32557cc17bc4c44f527082c382c39a6b24ab1913476877", - "failures-and-recovery.md": "352aef2a7cdb60b84ba6d9fb265b5ab8e4d53d5d027ed2683a0fe1604da6895b", + "failures-and-recovery.md": "e92644a4808a0712f905ebdf649b2de51f6b65958107881e18427e5d1fa56ed2", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", "features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b", "features/concurrency.md": "a7a3eb2274f7b14faf722494569b7663c07ab48afdf2e9225e58914b84cacbb4", "features/condition-waits.md": "451261eda990c9591a0db69839d872184b5c64da6b537a582133095b8d4b599e", - "features/continue-as-new.md": "9757751fe96226bd4499c3548f446ef7eb4e0d61ef4001064aa4ee66738731d9", + "features/continue-as-new.md": "50c79f317155e052a3f2f37d198a71bdfc496a454905293f40cf09d73138f25b", "features/events.md": "c466df05908748489226a3d1410c9203cf6f2986a4bb7539db1c5f82715abc7b", "features/external-payload-storage.md": "acc312fa2f50a43c96e1d235439124d28a7048f0bf3abac34319467fcbf7e898", "features/heartbeats.md": "e3d84178788dff92954e08d08f006def0a991a481f99301facbda8c6ca21a7a0", "features/local-activities.md": "05fca8f2104d8f4e7bd8b48040f5615f18d0ee2795922fb65c56f8d3d70ed204", "features/memo.md": "621aa630e37fbef6f84d761c92f99dc3fe8756879008c659cbad0600eb14fd5d", - "features/message-streams.md": "b04de795e9856015438ecc0659001d386295e428c45b6ab79a2d7311fcfae924", + "features/message-streams.md": "b30c7629d3fb9d20f27c4bcf0551457d65ac44a541b119312a2cde31aba48354", "features/queries.md": "c66dd9542a062edd8158a46cebc9f1bf926aaf3599dca4a3122bd9860df6e2a2", "features/sagas.md": "8dae955491a54bcbf545ce6972928df59f3885e00f98bf3a57b14dad98f89161", "features/schedules.md": "717b9115ca62a69a3a1ea65f1bec68a0aebe0d5e6d2421df297bb129c597a523", diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/failures-and-recovery.md b/i18n/fr/docusaurus-plugin-content-docs/current/failures-and-recovery.md index 245cfbadde8..046a8ef458f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/failures-and-recovery.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/failures-and-recovery.md @@ -123,6 +123,7 @@ Le successeur rejoue le code du workflow depuis le début : - Une attente de signal (`await('name')`) qui a reçu et appliqué son signal est réutilisée avec la valeur du signal. Le signal n’est pas remis à nouveau. - Un update accepté, appliqué et terminé avant l’étape échouée est enregistré de nouveau à la même position. Le replay exécute le handler de l’update avec ses arguments enregistrés, si bien que l’état du workflow correspond. L’update n’est pas livré de nouveau. Un update rejeté, et un update que l’échec a fermé avant son exécution, sont laissés de côté. - `outbox()->sendReference()` et `inbox()->receive()` dans le code de workflow réutilisé renvoient le message que l’exécution échouée a envoyé ou consommé. Ils ne l’envoient ni ne le consomment de nouveau. Un receive rejoué dont l’appel d’origine n’a rien trouvé relit le stream. +- Dans Workflow 2.20.2 et les versions ultérieures, les messages entrants du stream encore en attente sur l’exécution échouée passent au successeur. Workflow 2.20.1 et les versions antérieures les laissaient sur l’exécution échouée, si bien que le successeur ne les recevait jamais ([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013)). - Si un échec d’activité a mis fin à l’exécution, l’appel d’activité échoué est planifié comme une nouvelle exécution d’activité, avec la politique de nouvelles tentatives du code du workflow. Ses tentatives repartent de zéro. - Si l’exécution a échoué dans le code du workflow ou sur une limite structurelle, le successeur reprend à l’étape que le code du workflow n’a jamais atteinte. - Tout ce qui suit l’étape échouée s’exécute comme dans une nouvelle exécution. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/features/continue-as-new.md b/i18n/fr/docusaurus-plugin-content-docs/current/features/continue-as-new.md index b72bbff6175..8f8e9a84cb1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/features/continue-as-new.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/features/continue-as-new.md @@ -166,9 +166,9 @@ class PollingWorkflow extends Workflow Pour les boucles longues d’entrées humaines ou d’assistant, préférez la façade native `$this->inbox()` / `$this->outbox()` des [Flux de messages](./message-streams.md). -La position du curseur passe à la nouvelle exécution, tandis que les messages -consommés restent sur l’exécution d’origine comme preuves historiques. Dans les -versions de Workflow jusqu’à 2.20.1 incluse, les messages de flux encore en -attente lors de la continuation restent sur l’exécution fermée -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)) ; -voir [Flux de messages](./message-streams.md#continue-as-new). +Les messages de flux en attente et la position du curseur passent à la nouvelle +exécution, tandis que les messages consommés restent sur l’exécution d’origine +comme preuves historiques. Workflow 2.20.1 et les versions antérieures laissaient +les messages de flux en attente sur l’exécution fermée +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +corrigé dans 2.20.2) ; voir [Flux de messages](./message-streams.md#continue-as-new). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/features/message-streams.md b/i18n/fr/docusaurus-plugin-content-docs/current/features/message-streams.md index ebce7b4c438..83b0453adc4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/features/message-streams.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/features/message-streams.md @@ -135,15 +135,15 @@ des données indépendamment de l’ordre durable des messages. ## Continuation dans une nouvelle exécution {#continue-as-new} -Les flux privilégient l’instance. Lors d’une continuation, la position du -curseur est reportée sur la nouvelle exécution, et les messages consommés restent -attachés à l’ancienne comme preuves historiques. Dans les versions de Workflow -jusqu’à 2.20.1 incluse, les messages encore en attente au moment de la -continuation restent sur l’exécution fermée, et la nouvelle exécution ne les -reçoit jamais -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)). -En attendant une version qui corrige ce problème, recevez les messages en attente -avant d’appeler `continueAsNew()`, ou envoyez les entrées qui doivent survivre au +Les flux privilégient l’instance. Lors d’une continuation, les messages entrants +en attente passent à la nouvelle exécution, la position du curseur est reportée, +et les messages consommés restent attachés à l’ancienne comme preuves +historiques. Workflow 2.20.1 et les versions antérieures ne reportaient que le +curseur : les messages encore en attente au moment de la continuation restaient +sur l’exécution fermée, et la nouvelle exécution ne les recevait jamais +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +corrigé dans 2.20.2). Sur ces versions, recevez les messages en attente avant +d’appeler `continueAsNew()`, ou envoyez les entrées qui doivent survivre au passage de relais sous forme de [signal](./signals.md) : les signaux acceptés que l’exécution n’a pas encore appliqués passent à la nouvelle exécution. diff --git a/i18n/fr/source-hashes.json b/i18n/fr/source-hashes.json index 4ae37cf6b9f..54e620e42fb 100644 --- a/i18n/fr/source-hashes.json +++ b/i18n/fr/source-hashes.json @@ -29,19 +29,19 @@ "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", "deployment.md": "503230f8cc2378726d32557cc17bc4c44f527082c382c39a6b24ab1913476877", - "failures-and-recovery.md": "352aef2a7cdb60b84ba6d9fb265b5ab8e4d53d5d027ed2683a0fe1604da6895b", + "failures-and-recovery.md": "e92644a4808a0712f905ebdf649b2de51f6b65958107881e18427e5d1fa56ed2", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", "features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b", "features/concurrency.md": "a7a3eb2274f7b14faf722494569b7663c07ab48afdf2e9225e58914b84cacbb4", "features/condition-waits.md": "451261eda990c9591a0db69839d872184b5c64da6b537a582133095b8d4b599e", - "features/continue-as-new.md": "9757751fe96226bd4499c3548f446ef7eb4e0d61ef4001064aa4ee66738731d9", + "features/continue-as-new.md": "50c79f317155e052a3f2f37d198a71bdfc496a454905293f40cf09d73138f25b", "features/events.md": "c466df05908748489226a3d1410c9203cf6f2986a4bb7539db1c5f82715abc7b", "features/external-payload-storage.md": "acc312fa2f50a43c96e1d235439124d28a7048f0bf3abac34319467fcbf7e898", "features/heartbeats.md": "e3d84178788dff92954e08d08f006def0a991a481f99301facbda8c6ca21a7a0", "features/local-activities.md": "05fca8f2104d8f4e7bd8b48040f5615f18d0ee2795922fb65c56f8d3d70ed204", "features/memo.md": "621aa630e37fbef6f84d761c92f99dc3fe8756879008c659cbad0600eb14fd5d", - "features/message-streams.md": "b04de795e9856015438ecc0659001d386295e428c45b6ab79a2d7311fcfae924", + "features/message-streams.md": "b30c7629d3fb9d20f27c4bcf0551457d65ac44a541b119312a2cde31aba48354", "features/queries.md": "c66dd9542a062edd8158a46cebc9f1bf926aaf3599dca4a3122bd9860df6e2a2", "features/sagas.md": "8dae955491a54bcbf545ce6972928df59f3885e00f98bf3a57b14dad98f89161", "features/schedules.md": "717b9115ca62a69a3a1ea65f1bec68a0aebe0d5e6d2421df297bb129c597a523", diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/failures-and-recovery.md b/i18n/ja/docusaurus-plugin-content-docs/current/failures-and-recovery.md index eeb9d574de0..baef775f8d9 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/failures-and-recovery.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/failures-and-recovery.md @@ -115,6 +115,7 @@ redrive は、失敗した実行を同じワークフローインスタンスの - シグナルを受信して適用したシグナル待機(`await('name')`)は、そのシグナルの値とともに再利用されます。シグナルが再び配信されることはありません。 - 失敗したステップより前に受け付けられ、適用され、完了した更新は、同じ位置に改めて記録されます。リプレイは記録された引数で更新ハンドラーを実行するので、ワークフローの状態は一致します。更新が再び配信されることはありません。拒否された更新と、実行前に失敗で閉じられた更新は除外されます。 - 再利用されるワークフローコード内の `outbox()->sendReference()` と `inbox()->receive()` は、失敗した実行が送信または消費したメッセージを返します。再び送信や消費をすることはありません。元の呼び出しで何も見つからなかった receive は、リプレイ時にストリームを読み直します。 +- Workflow 2.20.2 以降では、失敗した実行でまだ保留中の受信ストリームメッセージは後継実行に移ります。Workflow 2.20.1 以前はそれらを失敗した実行に残していたため、後継実行はそれらを受信しませんでした([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013))。 - アクティビティ失敗で実行が終了した場合、失敗したアクティビティ呼び出しは、ワークフローコードの再試行ポリシーを使って新しいアクティビティ実行としてスケジュールされます。試行回数は最初からやり直しです。 - ワークフローコード内または構造上の上限で実行が失敗した場合、後継実行は、ワークフローコードが到達しなかったステップから再開します。 - 失敗したステップ以降は、新しい実行と同じように実行されます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/features/continue-as-new.md b/i18n/ja/docusaurus-plugin-content-docs/current/features/continue-as-new.md index 6dc1fe08ab7..047ea1cfc71 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/features/continue-as-new.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/features/continue-as-new.md @@ -152,4 +152,4 @@ class PollingWorkflow extends Workflow } ``` -人の入力やアシスタントの長期ループには、正式な `$this->inbox()` / `$this->outbox()` の[メッセージストリーム](./message-streams.md)ファサードを優先します。カーソル位置は新しい実行に移り、消費済みメッセージは証拠として元の実行の履歴に残ります。Workflow 2.20.1 までのリリースでは、continue-as-new の時点で保留中のストリームメッセージは終了した実行に残ります([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018))。[メッセージストリーム](./message-streams.md#continue-as-new)を参照してください。 +人の入力やアシスタントの長期ループには、正式な `$this->inbox()` / `$this->outbox()` の[メッセージストリーム](./message-streams.md)ファサードを優先します。保留中のストリームメッセージとカーソル位置は新しい実行に移り、消費済みメッセージは証拠として元の実行の履歴に残ります。Workflow 2.20.1 以前は、保留中のストリームメッセージを終了した実行に残していました([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)、2.20.2 で修正)。[メッセージストリーム](./message-streams.md#continue-as-new)を参照してください。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/features/message-streams.md b/i18n/ja/docusaurus-plugin-content-docs/current/features/message-streams.md index 20315af554b..f2ed4610692 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/features/message-streams.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/features/message-streams.md @@ -98,7 +98,7 @@ final class AssistantReplyWorkflow extends Workflow ## 新しい実行への継続 {#continue-as-new} -メッセージストリームはインスタンスを中心とします。continue-as-new 時、カーソル位置は次の実行に引き継がれ、消費済みメッセージは履歴の証拠として元の実行に残ります。Workflow 2.20.1 までのリリースでは、continue-as-new の時点で保留中のメッセージは終了した実行に残り、次の実行には届きません([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018))。修正リリースまでは、`continueAsNew()` を呼ぶ前に保留中のメッセージを受信するか、引き継ぎ後も残す必要がある入力を[シグナル](./signals.md)として送信してください。実行がまだ適用していない受理済みシグナルは次の実行に移ります。 +メッセージストリームはインスタンスを中心とします。continue-as-new 時、保留中の受信メッセージは次の実行に移り、カーソル位置は引き継がれ、消費済みメッセージは履歴の証拠として元の実行に残ります。Workflow 2.20.1 以前はカーソルだけを移していました。continue-as-new の時点で保留中だったメッセージは終了した実行に残り、次の実行には届きませんでした([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)、2.20.2 で修正)。これらのリリースでは、`continueAsNew()` を呼ぶ前に保留中のメッセージを受信するか、引き継ぎ後も残す必要がある入力を[シグナル](./signals.md)として送信してください。実行がまだ適用していない受理済みシグナルは次の実行に移ります。 そのため長期ワークフローは、公開メッセージルートを維持して履歴を減らせます。 diff --git a/i18n/ja/source-hashes.json b/i18n/ja/source-hashes.json index 4ae37cf6b9f..54e620e42fb 100644 --- a/i18n/ja/source-hashes.json +++ b/i18n/ja/source-hashes.json @@ -29,19 +29,19 @@ "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", "deployment.md": "503230f8cc2378726d32557cc17bc4c44f527082c382c39a6b24ab1913476877", - "failures-and-recovery.md": "352aef2a7cdb60b84ba6d9fb265b5ab8e4d53d5d027ed2683a0fe1604da6895b", + "failures-and-recovery.md": "e92644a4808a0712f905ebdf649b2de51f6b65958107881e18427e5d1fa56ed2", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", "features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b", "features/concurrency.md": "a7a3eb2274f7b14faf722494569b7663c07ab48afdf2e9225e58914b84cacbb4", "features/condition-waits.md": "451261eda990c9591a0db69839d872184b5c64da6b537a582133095b8d4b599e", - "features/continue-as-new.md": "9757751fe96226bd4499c3548f446ef7eb4e0d61ef4001064aa4ee66738731d9", + "features/continue-as-new.md": "50c79f317155e052a3f2f37d198a71bdfc496a454905293f40cf09d73138f25b", "features/events.md": "c466df05908748489226a3d1410c9203cf6f2986a4bb7539db1c5f82715abc7b", "features/external-payload-storage.md": "acc312fa2f50a43c96e1d235439124d28a7048f0bf3abac34319467fcbf7e898", "features/heartbeats.md": "e3d84178788dff92954e08d08f006def0a991a481f99301facbda8c6ca21a7a0", "features/local-activities.md": "05fca8f2104d8f4e7bd8b48040f5615f18d0ee2795922fb65c56f8d3d70ed204", "features/memo.md": "621aa630e37fbef6f84d761c92f99dc3fe8756879008c659cbad0600eb14fd5d", - "features/message-streams.md": "b04de795e9856015438ecc0659001d386295e428c45b6ab79a2d7311fcfae924", + "features/message-streams.md": "b30c7629d3fb9d20f27c4bcf0551457d65ac44a541b119312a2cde31aba48354", "features/queries.md": "c66dd9542a062edd8158a46cebc9f1bf926aaf3599dca4a3122bd9860df6e2a2", "features/sagas.md": "8dae955491a54bcbf545ce6972928df59f3885e00f98bf3a57b14dad98f89161", "features/schedules.md": "717b9115ca62a69a3a1ea65f1bec68a0aebe0d5e6d2421df297bb129c597a523", diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/failures-and-recovery.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/failures-and-recovery.md index 3533ba9319d..e8e16827f9b 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/failures-and-recovery.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/failures-and-recovery.md @@ -120,6 +120,7 @@ A sucessora reproduz o código do workflow desde o início: - Uma espera de sinal (`await('name')`) que recebeu e aplicou o sinal é reutilizada com o valor do sinal. O sinal não é entregue de novo. - Um update que foi aceito, aplicado e concluído antes do passo com falha é registrado de novo na mesma posição. O replay executa o handler do update com os argumentos registrados, então o estado do workflow confere. O update não é entregue de novo. Um update rejeitado, e um que a falha fechou antes de ser executado, ficam de fora. - `outbox()->sendReference()` e `inbox()->receive()` no código de workflow reutilizado retornam a mensagem que a execução com falha enviou ou consumiu. Eles não a enviam nem a consomem de novo. Um receive em replay cuja chamada original não encontrou nada lê o stream de novo. +- No Workflow 2.20.2 e posteriores, mensagens de entrada do stream ainda pendentes na execução com falha passam para a sucessora. O Workflow 2.20.1 e anteriores as deixavam na execução com falha, então a sucessora nunca as recebia ([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013)). - Se uma falha de atividade encerrou a execução, a chamada de atividade que falhou é agendada como uma nova execução de atividade, com a política de novas tentativas do código do workflow. As tentativas recomeçam. - Se a execução falhou no código do workflow ou em um limite estrutural, a sucessora é retomada no passo que o código do workflow nunca alcançou. - Tudo o que vem depois do passo com falha é executado como em uma nova execução. diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/continue-as-new.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/continue-as-new.md index 65431f9a9a8..bf3f24d9b88 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/continue-as-new.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/continue-as-new.md @@ -166,9 +166,9 @@ class PollingWorkflow extends Workflow Para loops de longa duração com entrada humana ou de assistentes, prefira a fachada própria `$this->inbox()` / `$this->outbox()` de -[Fluxos de mensagens](./message-streams.md). A posição do cursor passa à nova -execução, enquanto mensagens consumidas permanecem na execução original como -evidência histórica. Nas versões do Workflow até a 2.20.1, mensagens do fluxo -ainda pendentes ao continuar como novo ficam na execução encerrada -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)); veja -[Fluxos de mensagens](./message-streams.md#continue-as-new). +[Fluxos de mensagens](./message-streams.md). Mensagens do fluxo pendentes e a +posição do cursor passam à nova execução, enquanto mensagens consumidas +permanecem na execução original como evidência histórica. O Workflow 2.20.1 e +anteriores deixavam mensagens do fluxo pendentes na execução encerrada +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +corrigido no 2.20.2); veja [Fluxos de mensagens](./message-streams.md#continue-as-new). diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/message-streams.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/message-streams.md index 8767d6a2102..7c78b1cc521 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/message-streams.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/features/message-streams.md @@ -135,15 +135,15 @@ o armazenamento de payloads separadamente da ordenação durável de mensagens. ## Continuar como novo {#continue-as-new} Fluxos de mensagens priorizam a instância. Quando um workflow continua como -novo, a posição do cursor é levada adiante para a nova execução, e mensagens -consumidas permanecem vinculadas à execução original como evidência histórica. -Nas versões do Workflow até a 2.20.1, mensagens ainda pendentes quando a -execução continua como nova ficam na execução encerrada, e a nova execução -nunca as recebe -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)). -Até que uma versão corrija isso, receba as mensagens pendentes antes de chamar -`continueAsNew()`, ou envie entradas que precisam sobreviver à transição como -um [sinal](./signals.md): sinais aceitos que a execução ainda não aplicou +novo, as mensagens de entrada pendentes passam para a nova execução, a posição +do cursor é levada adiante, e mensagens consumidas permanecem vinculadas à +execução original como evidência histórica. O Workflow 2.20.1 e anteriores +moviam só o cursor: mensagens ainda pendentes quando a execução continuava como +nova ficavam na execução encerrada, e a nova execução nunca as recebia +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +corrigido no 2.20.2). Nessas versões, receba as mensagens pendentes antes de +chamar `continueAsNew()`, ou envie entradas que precisam sobreviver à transição +como um [sinal](./signals.md): sinais aceitos que a execução ainda não aplicou passam para a nova execução. Assim, um workflow de longa duração pode iniciar uma nova execução com um diff --git a/i18n/pt-BR/source-hashes.json b/i18n/pt-BR/source-hashes.json index 4ae37cf6b9f..54e620e42fb 100644 --- a/i18n/pt-BR/source-hashes.json +++ b/i18n/pt-BR/source-hashes.json @@ -29,19 +29,19 @@ "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", "deployment.md": "503230f8cc2378726d32557cc17bc4c44f527082c382c39a6b24ab1913476877", - "failures-and-recovery.md": "352aef2a7cdb60b84ba6d9fb265b5ab8e4d53d5d027ed2683a0fe1604da6895b", + "failures-and-recovery.md": "e92644a4808a0712f905ebdf649b2de51f6b65958107881e18427e5d1fa56ed2", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", "features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b", "features/concurrency.md": "a7a3eb2274f7b14faf722494569b7663c07ab48afdf2e9225e58914b84cacbb4", "features/condition-waits.md": "451261eda990c9591a0db69839d872184b5c64da6b537a582133095b8d4b599e", - "features/continue-as-new.md": "9757751fe96226bd4499c3548f446ef7eb4e0d61ef4001064aa4ee66738731d9", + "features/continue-as-new.md": "50c79f317155e052a3f2f37d198a71bdfc496a454905293f40cf09d73138f25b", "features/events.md": "c466df05908748489226a3d1410c9203cf6f2986a4bb7539db1c5f82715abc7b", "features/external-payload-storage.md": "acc312fa2f50a43c96e1d235439124d28a7048f0bf3abac34319467fcbf7e898", "features/heartbeats.md": "e3d84178788dff92954e08d08f006def0a991a481f99301facbda8c6ca21a7a0", "features/local-activities.md": "05fca8f2104d8f4e7bd8b48040f5615f18d0ee2795922fb65c56f8d3d70ed204", "features/memo.md": "621aa630e37fbef6f84d761c92f99dc3fe8756879008c659cbad0600eb14fd5d", - "features/message-streams.md": "b04de795e9856015438ecc0659001d386295e428c45b6ab79a2d7311fcfae924", + "features/message-streams.md": "b30c7629d3fb9d20f27c4bcf0551457d65ac44a541b119312a2cde31aba48354", "features/queries.md": "c66dd9542a062edd8158a46cebc9f1bf926aaf3599dca4a3122bd9860df6e2a2", "features/sagas.md": "8dae955491a54bcbf545ce6972928df59f3885e00f98bf3a57b14dad98f89161", "features/schedules.md": "717b9115ca62a69a3a1ea65f1bec68a0aebe0d5e6d2421df297bb129c597a523", diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/failures-and-recovery.md b/i18n/uk/docusaurus-plugin-content-docs/current/failures-and-recovery.md index 1714268e43c..5c7648d9a4f 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/failures-and-recovery.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/failures-and-recovery.md @@ -120,6 +120,7 @@ Redrive продовжує невдалий запуск у новому зап - Очікування signal (`await('name')`), яке отримало й застосувало свій signal, повторно використовується зі значенням цього signal. Signal не доставляється повторно. - Update, який було прийнято, застосовано й завершено до невдалого кроку, записується знову на тій самій позиції. Replay запускає handler update з записаними аргументами, тож стан workflow збігається. Update не доставляється вдруге. Відхилений update і update, який помилка закрила до виконання, пропускаються. - `outbox()->sendReference()` та `inbox()->receive()` у повторно використаному коді workflow повертають повідомлення, яке невдалий запуск надіслав або спожив. Вони не надсилають і не споживають його вдруге. Receive у replay, початковий виклик якого нічого не знайшов, читає stream знову. +- У Workflow 2.20.2 і новіших вхідні повідомлення stream, які ще чекають на обробку в невдалому запуску, переходять до наступника. Workflow 2.20.1 і раніші версії залишали їх у невдалому запуску, тож наступник ніколи їх не отримував ([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013)). - Якщо запуск завершила помилка activity, невдалий виклик activity планується як нове виконання activity з політикою повторних спроб із коду workflow. Його спроби починаються заново. - Якщо запуск завершився помилкою в коді workflow чи на структурному ліміті, наступник продовжує з кроку, до якого код workflow так і не дійшов. - Усе після невдалого кроку виконується так само, як у новому запуску. diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/features/continue-as-new.md b/i18n/uk/docusaurus-plugin-content-docs/current/features/continue-as-new.md index ea77f533223..8e6c1d26c5d 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/features/continue-as-new.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/features/continue-as-new.md @@ -166,10 +166,10 @@ class PollingWorkflow extends Workflow Для тривалих циклів введення користувачем або роботи асистента обирайте повноцінний фасад `$this->inbox()` / `$this->outbox()` -[Потоків повідомлень](./message-streams.md). Позиція курсора переходить до -продовженого запуску, а спожиті повідомлення залишаються в початковому запуску -як свідчення історії. У випусках Workflow до 2.20.1 включно повідомлення потоку, -які ще чекають на обробку в момент continue-as-new, залишаються в закритому -запуску -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)); див. -[Потоки повідомлень](./message-streams.md#continue-as-new). +[Потоків повідомлень](./message-streams.md). Повідомлення потоку, які ще чекають +на обробку, і позиція курсора переходять до продовженого запуску, а спожиті +повідомлення залишаються в початковому запуску як свідчення історії. Workflow +2.20.1 і раніші версії залишали повідомлення потоку, які ще чекали на обробку, в +закритому запуску +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +виправлено в 2.20.2); див. [Потоки повідомлень](./message-streams.md#continue-as-new). diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/features/message-streams.md b/i18n/uk/docusaurus-plugin-content-docs/current/features/message-streams.md index 39aff8addc5..f3ab245b7a3 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/features/message-streams.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/features/message-streams.md @@ -135,14 +135,15 @@ final class AssistantReplyWorkflow extends Workflow ## Continue-As-New {#continue-as-new} Потоки повідомлень насамперед належать екземпляру. Під час continue-as-new -позиція курсора переноситься до продовженого запуску, а спожиті повідомлення -залишаються прив’язаними до початкового запуску як історичні свідчення. У -випусках Workflow до 2.20.1 включно повідомлення, які ще чекають на обробку в -момент continue-as-new, залишаються в закритому запуску, і продовжений запуск -ніколи їх не отримує -([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018)). -Доки це не виправлено у випуску, отримайте повідомлення, що чекають на обробку, -перед викликом `continueAsNew()` або надсилайте вхідні дані, які мають +вхідні повідомлення, які ще чекають на обробку, переходять до продовженого +запуску, позиція курсора переноситься, а спожиті повідомлення залишаються +прив’язаними до початкового запуску як історичні свідчення. Workflow 2.20.1 і +раніші версії переносили лише курсор: повідомлення, які ще чекали на обробку в +момент continue-as-new, залишалися в закритому запуску, і продовжений запуск +ніколи їх не отримував +([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018), +виправлено в 2.20.2). У цих випусках отримайте повідомлення, що чекають на +обробку, перед викликом `continueAsNew()` або надсилайте вхідні дані, які мають пережити передачу, як [сигнал](./signals.md): прийняті сигнали, які запуск ще не застосував, переходять до продовженого запуску. diff --git a/i18n/uk/source-hashes.json b/i18n/uk/source-hashes.json index 4ae37cf6b9f..54e620e42fb 100644 --- a/i18n/uk/source-hashes.json +++ b/i18n/uk/source-hashes.json @@ -29,19 +29,19 @@ "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", "deployment.md": "503230f8cc2378726d32557cc17bc4c44f527082c382c39a6b24ab1913476877", - "failures-and-recovery.md": "352aef2a7cdb60b84ba6d9fb265b5ab8e4d53d5d027ed2683a0fe1604da6895b", + "failures-and-recovery.md": "e92644a4808a0712f905ebdf649b2de51f6b65958107881e18427e5d1fa56ed2", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", "features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b", "features/concurrency.md": "a7a3eb2274f7b14faf722494569b7663c07ab48afdf2e9225e58914b84cacbb4", "features/condition-waits.md": "451261eda990c9591a0db69839d872184b5c64da6b537a582133095b8d4b599e", - "features/continue-as-new.md": "9757751fe96226bd4499c3548f446ef7eb4e0d61ef4001064aa4ee66738731d9", + "features/continue-as-new.md": "50c79f317155e052a3f2f37d198a71bdfc496a454905293f40cf09d73138f25b", "features/events.md": "c466df05908748489226a3d1410c9203cf6f2986a4bb7539db1c5f82715abc7b", "features/external-payload-storage.md": "acc312fa2f50a43c96e1d235439124d28a7048f0bf3abac34319467fcbf7e898", "features/heartbeats.md": "e3d84178788dff92954e08d08f006def0a991a481f99301facbda8c6ca21a7a0", "features/local-activities.md": "05fca8f2104d8f4e7bd8b48040f5615f18d0ee2795922fb65c56f8d3d70ed204", "features/memo.md": "621aa630e37fbef6f84d761c92f99dc3fe8756879008c659cbad0600eb14fd5d", - "features/message-streams.md": "b04de795e9856015438ecc0659001d386295e428c45b6ab79a2d7311fcfae924", + "features/message-streams.md": "b30c7629d3fb9d20f27c4bcf0551457d65ac44a541b119312a2cde31aba48354", "features/queries.md": "c66dd9542a062edd8158a46cebc9f1bf926aaf3599dca4a3122bd9860df6e2a2", "features/sagas.md": "8dae955491a54bcbf545ce6972928df59f3885e00f98bf3a57b14dad98f89161", "features/schedules.md": "717b9115ca62a69a3a1ea65f1bec68a0aebe0d5e6d2421df297bb129c597a523", diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/failures-and-recovery.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/failures-and-recovery.md index b9e1a8551e1..f217aac5ed3 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/failures-and-recovery.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/failures-and-recovery.md @@ -115,6 +115,7 @@ redrive 会在同一工作流实例的新运行中继续一个失败的运行。 - 已接收并应用其信号的信号等待(`await('name')`)会连同该信号的值一起复用。该信号不会再次投递。 - 在失败步骤之前已被接受、应用并完成的更新,会在相同位置重新记录。重放会用记录的参数运行更新处理程序,因此工作流状态保持一致。更新不会再次投递。被拒绝的更新,以及在执行前就被失败关闭的更新,会被省略。 - 复用的工作流代码中的 `outbox()->sendReference()` 和 `inbox()->receive()` 会返回失败运行发送或消费过的消息,不会再次发送或消费。原始调用没有找到任何消息的 receive 在重放时会再次读取 stream。 +- 在 Workflow 2.20.2 及之后的版本中,失败运行上仍待处理的入站 stream 消息会转移到后继运行。Workflow 2.20.1 及之前的版本会把它们留在失败运行上,因此后继运行永远收不到这些消息([workflow#1013](https://github.com/durable-workflow/workflow/issues/1013))。 - 如果运行因活动失败而结束,失败的活动调用会作为新的活动执行被调度,并使用工作流代码中的重试策略。它的尝试次数重新开始计算。 - 如果运行在工作流代码中失败或因结构限制失败,后继运行会从工作流代码未曾到达的步骤处恢复执行。 - 失败步骤之后的所有内容都像在新运行中一样执行。 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/continue-as-new.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/continue-as-new.md index 75bcef7811b..2c2c9c7b387 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/continue-as-new.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/continue-as-new.md @@ -152,4 +152,4 @@ class PollingWorkflow extends Workflow } ``` -长期运行的人类输入或助手循环,优先使用正式的 `$this->inbox()` / `$this->outbox()` [消息流](./message-streams.md)门面。游标位置转移到新运行,已消费消息留在原运行,作为历史证据。在 Workflow 2.20.1 及之前的版本中,继续为新运行时仍待处理的流消息会留在已关闭的运行上([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018));参见[消息流](./message-streams.md#continue-as-new)。 +长期运行的人类输入或助手循环,优先使用正式的 `$this->inbox()` / `$this->outbox()` [消息流](./message-streams.md)门面。待处理的流消息和游标位置会转移到新运行,已消费消息留在原运行,作为历史证据。Workflow 2.20.1 及之前的版本会把待处理的流消息留在已关闭的运行上([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018),已在 2.20.2 中修复);参见[消息流](./message-streams.md#continue-as-new)。 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/message-streams.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/message-streams.md index 576ea572912..df6f0b6afcf 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/message-streams.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/features/message-streams.md @@ -98,7 +98,7 @@ final class AssistantReplyWorkflow extends Workflow ## 继续为新运行 {#continue-as-new} -消息流以实例为中心。工作流继续为新运行时,游标位置延续到新运行,已消费消息仍附着在原运行上,作为历史证据。在 Workflow 2.20.1 及之前的版本中,继续为新运行时仍待处理的消息会留在已关闭的运行上,新运行永远收不到这些消息([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018))。在某个版本修复此问题之前,请在调用 `continueAsNew()` 之前接收待处理消息,或将必须在交接后保留的输入作为[信号](./signals.md)发送:运行尚未应用的已接受信号会转移到新运行。 +消息流以实例为中心。工作流继续为新运行时,待处理的入站消息会转移到新运行,游标位置随之延续,已消费消息仍附着在原运行上,作为历史证据。Workflow 2.20.1 及之前的版本只转移游标:继续为新运行时仍待处理的消息会留在已关闭的运行上,新运行永远收不到这些消息([workflow#1018](https://github.com/durable-workflow/workflow/issues/1018),已在 2.20.2 中修复)。在这些版本中,请在调用 `continueAsNew()` 之前接收待处理消息,或将必须在交接后保留的输入作为[信号](./signals.md)发送:运行尚未应用的已接受信号会转移到新运行。 因此,长期运行的工作流可以释放历史,同时保留同一公开消息路由: diff --git a/i18n/zh-Hans/source-hashes.json b/i18n/zh-Hans/source-hashes.json index 4ae37cf6b9f..54e620e42fb 100644 --- a/i18n/zh-Hans/source-hashes.json +++ b/i18n/zh-Hans/source-hashes.json @@ -29,19 +29,19 @@ "defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529", "defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c", "deployment.md": "503230f8cc2378726d32557cc17bc4c44f527082c382c39a6b24ab1913476877", - "failures-and-recovery.md": "352aef2a7cdb60b84ba6d9fb265b5ab8e4d53d5d027ed2683a0fe1604da6895b", + "failures-and-recovery.md": "e92644a4808a0712f905ebdf649b2de51f6b65958107881e18427e5d1fa56ed2", "features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082", "features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1", "features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b", "features/concurrency.md": "a7a3eb2274f7b14faf722494569b7663c07ab48afdf2e9225e58914b84cacbb4", "features/condition-waits.md": "451261eda990c9591a0db69839d872184b5c64da6b537a582133095b8d4b599e", - "features/continue-as-new.md": "9757751fe96226bd4499c3548f446ef7eb4e0d61ef4001064aa4ee66738731d9", + "features/continue-as-new.md": "50c79f317155e052a3f2f37d198a71bdfc496a454905293f40cf09d73138f25b", "features/events.md": "c466df05908748489226a3d1410c9203cf6f2986a4bb7539db1c5f82715abc7b", "features/external-payload-storage.md": "acc312fa2f50a43c96e1d235439124d28a7048f0bf3abac34319467fcbf7e898", "features/heartbeats.md": "e3d84178788dff92954e08d08f006def0a991a481f99301facbda8c6ca21a7a0", "features/local-activities.md": "05fca8f2104d8f4e7bd8b48040f5615f18d0ee2795922fb65c56f8d3d70ed204", "features/memo.md": "621aa630e37fbef6f84d761c92f99dc3fe8756879008c659cbad0600eb14fd5d", - "features/message-streams.md": "b04de795e9856015438ecc0659001d386295e428c45b6ab79a2d7311fcfae924", + "features/message-streams.md": "b30c7629d3fb9d20f27c4bcf0551457d65ac44a541b119312a2cde31aba48354", "features/queries.md": "c66dd9542a062edd8158a46cebc9f1bf926aaf3599dca4a3122bd9860df6e2a2", "features/sagas.md": "8dae955491a54bcbf545ce6972928df59f3885e00f98bf3a57b14dad98f89161", "features/schedules.md": "717b9115ca62a69a3a1ea65f1bec68a0aebe0d5e6d2421df297bb129c597a523",