Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/failures-and-recovery.md
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,10 @@ class RetryableWorkflow extends Workflow
}
```

## Rust service-mode failure report limits {#rust-failure-report-limits}

For service-mode workers actually running Rust SDK **4.10.1 or newer**, outgoing failure messages are at most 62 KiB UTF-8 including marker, stacks 128 KiB where supported, combined serialized optional metadata 64 KiB, and the full encoded body 1 MiB or a lower known transport cap. Original type, retry decision and claim identity stay intact; impossible mandatory envelopes refuse explicitly. The [Rust reporting guide](./polyglot/rust.md#bounded-failure-reports) explains omission markers, whole Avro details and local-result boundaries. These limits do not qualify old SDKs, embedded mode or the separate Core summary-storage correction.

## Related Guides

- [Execution Guarantees and Idempotency](./constraints/execution-guarantees.md)
Expand Down
21 changes: 21 additions & 0 deletions docs/polyglot/rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,27 @@ A stable key makes duplicate effects preventable only when the downstream system

See [ActivityContext identity accessors](https://rust.durable-workflow.com/durable_workflow/struct.ActivityContext.html#method.activity_execution_id) and the [normal installed 4.9.0 receipt](https://github.com/durable-workflow/sdk-rust/issues/139#issuecomment-6367230500) for ordinary/cooperative, local and worker-session controls. See [execution guarantees](../constraints/execution-guarantees.md#service-activity-identity) for the shared idempotency contract.

## Bounded failure reports {#bounded-failure-reports}

These reporting limits require an actually installed **Rust SDK 4.10.1 or newer**. Check the worker’s `Cargo.lock`; a newer client or source checkout does not update an older selected worker. The limits apply to outgoing failure reporting, not incoming history or unrelated business payloads.

| Field or envelope | Maximum |
| --- | --- |
| UTF-8 message, including its marker | 62 KiB |
| Stack where supported | 128 KiB |
| Combined serialized optional details, diagnostics and metadata | 64 KiB |
| Complete encoded failure request body | 1 MiB |

The effective message cap reserves 2 KiB below the original 64 KiB budget for published Server timeline prefixes. JSON escaping, truncation markers, claim identity and all other fields count toward the encoded body. A lower known transport cap can reduce these maxima further. Small reports retain their original content.

Oversized text carries a visible marker. Existing `diagnostics.sdk_failure_truncation`, where the schema supports it, records original byte sizes and omitted fields. Workflow/query-task schemas without diagnostics and plain command messages carry those statistics in the message marker. Avro details remain a complete valid envelope/runtime reference or are omitted whole and marked; base 64 is never cut into a corrupt value.

The original exception type, retry decision and required claim identity are preserved. Low-level consumers can use `Client::fail_activity_task_with_failure` and `Client::fail_workflow_task_with_failure` with the published failure schema. `Error::FailureReporting` explicitly refuses a report whose mandatory data cannot fit; it does not decide the application’s retry outcome or fabricate a smaller identity.

Local failures are bounded before workflow code observes them, including the published Server’s whitespace/NUL normalization. The final request check does not rewrite an already observed local message or another business payload; reporting refuses if those fixed inputs cannot fit.

These SDK reporting bounds do not establish a Core derived-summary storage fix, another SDK’s delivery, embedded behavior or Server image adoption. Older workers can still fail to report an oversized failure. See the [published-source policy](https://github.com/durable-workflow/sdk-rust/blob/dd58dd146f1337c3be24ad18fe65e3bb31d78b58/README.md#failure-report-limits) and [shared failure guidance](../failures-and-recovery.md#rust-failure-report-limits).

## Local activities

Rust SDK 3.1.0 adds inline local execution on workers configured with
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,10 @@ class RetryableWorkflow extends Workflow
}
```

## Grenzen für Rust-Fehlerberichte im Service-Modus {#rust-failure-report-limits}

Bei Service-Workern mit tatsächlich laufendem Rust SDK **4.10.1 oder neuer** hat die ausgehende UTF-8-Nachricht höchstens 62 KiB einschließlich Markierung, ein unterstützter Stack 128 KiB, gemeinsam serialisierte optionale Metadaten 64 KiB und der vollständige kodierte Body 1 MiB oder eine bekannte niedrigere Transportgrenze. Typ, Retry-Entscheidung und Identität bleiben erhalten; unmögliche Pflichthüllen werden ausdrücklich abgelehnt. Der [Rust-Leitfaden](./polyglot/rust.md#bounded-failure-reports) erklärt Markierungen, vollständige Avro-Details und lokale Ergebnisse. Ältere SDKs, Embedded-Modus und die separate Core-Speicherkorrektur sind damit nicht qualifiziert.

## Weitere Leitfäden {#related-guides}

- [Ausführungsgarantien und Idempotenz](./constraints/execution-guarantees.md) erklärt Replay, Wiederholungsversuche, Lease-Ablauf und erneute Zustellung.
Expand Down
21 changes: 21 additions & 0 deletions i18n/de/docusaurus-plugin-content-docs/current/polyglot/rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,27 @@ Ein stabiler Schlüssel ermöglicht die Vermeidung doppelter Effekte nur, wenn d

Siehe die [Identitätsmethoden von ActivityContext](https://rust.durable-workflow.com/durable_workflow/struct.ActivityContext.html#method.activity_execution_id) und die [Prüfung der normalen Installation 4.9.0](https://github.com/durable-workflow/sdk-rust/issues/139#issuecomment-6367230500) mit Ordinary-/Cooperative-, Local- und Worker-Session-Kontrollen. Der gemeinsame Vertrag steht unter [Ausführungsgarantien](../constraints/execution-guarantees.md#service-activity-identity).

## Begrenzte Fehlerberichte {#bounded-failure-reports}

Diese Grenzen benötigen **tatsächlich installiertes Rust SDK 4.10.1 oder neuer**. Prüfen Sie die `Cargo.lock` des Workers: Ein neuer Client oder Quellcheckout aktualisiert keinen älteren Worker. Die Grenzen gelten für ausgehende Fehlerberichte, nicht für eingehende Historie oder andere fachliche Payloads.

| Feld oder Hülle | Maximum |
| --- | --- |
| UTF-8-Nachricht einschließlich Markierung | 62 KiB |
| Stack, sofern unterstützt | 128 KiB |
| Gemeinsam serialisierte optionale Details, Diagnostics und Metadaten | 64 KiB |
| Vollständiger kodierter Fehleranfrage-Body | 1 MiB |

Die effektive Nachrichtengrenze reserviert 2 KiB unter dem ursprünglichen 64-KiB-Budget für Timeline-Präfixe veröffentlichter Server. JSON-Escaping, Markierungen, Claim-Identität und alle weiteren Felder zählen zum kodierten Body. Eine bekannte niedrigere Transportgrenze kann die Maxima weiter senken. Kleine Berichte behalten den ursprünglichen Inhalt.

Zu großer Text trägt eine sichtbare Markierung. Das vorhandene `diagnostics.sdk_failure_truncation` hält, sofern vom Schema unterstützt, ursprüngliche Bytezahlen und ausgelassene Felder fest. Workflow-/Query-Task-Schemas ohne Diagnostics und einfache Befehlsnachrichten tragen die Statistik in der Nachrichtenmarkierung. Avro-Details bleiben vollständige gültige Hüllen/Runtime-Referenzen oder werden ganz ausgelassen und markiert; Base 64 wird nie zu einem beschädigten Wert abgeschnitten.

Ursprünglicher Ausnahmetyp, Retry-Entscheidung und erforderliche Claim-Identität bleiben erhalten. Low-Level-Consumer können `Client::fail_activity_task_with_failure` und `Client::fail_workflow_task_with_failure` mit dem veröffentlichten Fehlerschema nutzen. `Error::FailureReporting` lehnt einen Bericht ausdrücklich ab, wenn Pflichtdaten nicht hineinpassen; er entscheidet keinen fachlichen Retry und erfindet keine kürzere Identität.

Lokale Fehler werden vor der Beobachtung durch Workflow-Code begrenzt, einschließlich der Leerzeichen-/NUL-Normalisierung des veröffentlichten Servers. Die Endprüfung schreibt weder bereits beobachtete lokale Nachrichten noch andere fachliche Payloads um; passen feste Eingaben nicht hinein, wird abgelehnt.

Diese SDK-Grenzen belegen keine Core-Korrektur abgeleiteter Zusammenfassungen, Lieferung anderer SDKs, Embedded-Verhalten oder Server-Image-Übernahme. Ältere Worker können übergroße Fehler weiterhin nicht melden. Siehe die [Richtlinie im veröffentlichten Source](https://github.com/durable-workflow/sdk-rust/blob/dd58dd146f1337c3be24ad18fe65e3bb31d78b58/README.md#failure-report-limits) und den [gemeinsamen Leitfaden](../failures-and-recovery.md#rust-failure-report-limits).

## Lokale Aktivitäten {#local-activities}

Rust SDK 3.1.0 ergänzt lokale Inline-Ausführung auf Workern mit
Expand Down
4 changes: 2 additions & 2 deletions i18n/de/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529",
"defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c",
"deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca",
"failures-and-recovery.md": "318f0cc183d26539c7d5b6bdf791429bb874b793b81cff4c6094ef1d11a796b2",
"failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c",
"features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082",
"features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1",
"features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b",
Expand Down Expand Up @@ -84,7 +84,7 @@
"polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c",
"polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3",
"polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3",
"polyglot/rust.md": "5ff66bcb7e5369bcffd8611342a35c27028cac5a4ee376e86d90334a2b12d365",
"polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10",
"polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83",
"polyglot/server-config-reference.md": "b2dc3ddd188b078875cb46bf32b94053d89912c063c1687cc98ff5ba2baba812",
"polyglot/server-role-topology.md": "3d048f0c6b5f179399622508f51e67fff8aa5a6d5b2492533fc720eeec2c27f2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,10 @@ class RetryableWorkflow extends Workflow
}
```

## Límites de informes de fallo Rust en modo servicio {#rust-failure-report-limits}

En workers de servicio que realmente ejecutan Rust SDK **4.10.1 o posterior**, el mensaje saliente admite hasta 62 KiB UTF-8 con marcador, stack 128 KiB si existe, metadata opcional serializada combinada 64 KiB y cuerpo completo codificado 1 MiB o un límite de transporte conocido menor. Se conservan tipo, retry e identidad; un envelope obligatorio imposible se rechaza. La [guía Rust](./polyglot/rust.md#bounded-failure-reports) explica marcadores, details Avro íntegros y resultados locales. No cualifica SDK antiguos, modo embedded ni la corrección separada del almacenamiento de resúmenes Core.

## Guías relacionadas {#related-guides}

- [Garantías de ejecución e idempotencia](./constraints/execution-guarantees.md):
Expand Down
21 changes: 21 additions & 0 deletions i18n/es/docusaurus-plugin-content-docs/current/polyglot/rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,27 @@ Una clave estable solo permite evitar efectos duplicados si el sistema externo r

Consulta los [métodos de identidad de ActivityContext](https://rust.durable-workflow.com/durable_workflow/struct.ActivityContext.html#method.activity_execution_id) y la [verificación de instalación normal 4.9.0](https://github.com/durable-workflow/sdk-rust/issues/139#issuecomment-6367230500) con controles ordinary/cooperative, locales y de sesiones de worker. El contrato común está en [garantías de ejecución](../constraints/execution-guarantees.md#service-activity-identity).

## Informes de fallo con límites {#bounded-failure-reports}

Estos límites exigen **Rust SDK 4.10.1 o posterior realmente instalado**. Comprueba el `Cargo.lock` del worker: un cliente nuevo o checkout no actualiza un worker antiguo. Se aplican a informes salientes, no al historial recibido ni a payloads de negocio ajenos.

| Campo o envelope | Máximo |
| --- | --- |
| Mensaje UTF-8, incluido su marcador | 62 KiB |
| Stack cuando está soportado | 128 KiB |
| Total serializado de details, diagnostics y metadata opcionales | 64 KiB |
| Cuerpo completo codificado de la petición de fallo | 1 MiB |

El límite efectivo reserva 2 KiB del presupuesto original 64 KiB para prefijos del timeline del Server publicado. Escapes JSON, marcadores, identidad del claim y demás campos cuentan en el cuerpo codificado. Un límite de transporte conocido menor puede reducir estos máximos. Los informes pequeños conservan su contenido original.

El texto excesivo lleva un marcador visible. El campo existente `diagnostics.sdk_failure_truncation`, cuando la estructura lo admite, registra tamaños originales y campos omitidos. Esquemas workflow/query-task sin diagnostics y mensajes simples de comando incluyen esas estadísticas en el marcador. Los details Avro conservan un envelope/referencia runtime completo y válido, o se omiten íntegros con marcador; no se corta base 64 y corrompe el valor.

Se conservan el tipo original de excepción, la decisión de retry y la identidad obligatoria del claim. Los consumidores de bajo nivel pueden usar `Client::fail_activity_task_with_failure` y `Client::fail_workflow_task_with_failure` con el esquema publicado. `Error::FailureReporting` rechaza explícitamente un informe cuyos datos obligatorios no caben; no decide el retry de la aplicación ni inventa una identidad menor.

Los fallos locales se acotan antes de que los observe el workflow, incluida la normalización de espacios/NUL del Server publicado. La comprobación final no reescribe mensajes locales ya observados ni otro payload de negocio; rechaza si esos datos fijos no caben.

Estos límites SDK no demuestran una corrección del almacenamiento de resúmenes de Core, entrega de otro SDK, comportamiento embedded ni adopción en imágenes Server. Los workers antiguos aún pueden no reportar un fallo excesivo. Consulta la [política en el source publicado](https://github.com/durable-workflow/sdk-rust/blob/dd58dd146f1337c3be24ad18fe65e3bb31d78b58/README.md#failure-report-limits) y la [guía común](../failures-and-recovery.md#rust-failure-report-limits).

## Actividades locales {#local-activities}

El SDK de Rust 3.1.0 añade ejecución local en el propio worker con `Worker::local_activities(true)`. Registra callbacks con los métodos ordinarios de registro de actividades y utiliza los métodos de actividad local del contexto de workflow. Consulta el [ejemplo ejecutable](https://github.com/durable-workflow/sdk-rust/blob/3.1.0/examples/local_activities.rs) y la [referencia de LocalActivityOptions](https://rust.durable-workflow.com/durable_workflow/struct.LocalActivityOptions.html) para configurar reintentos y tiempos de espera.
Expand Down
4 changes: 2 additions & 2 deletions i18n/es/source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"defining-workflows/workflow-status.md": "8e8cb27ff44c890d489d89bf166375acfdfaecabd990a2235e106fab1592d529",
"defining-workflows/workflows.md": "f467bc73de32aa5d722c61ce085065460382ae7dd44cea4625847d9fcdc4c97c",
"deployment.md": "dd0b6bd184eda12e67922121a09c7f3c98346bde01be1d4c3217f168db5fd7ca",
"failures-and-recovery.md": "318f0cc183d26539c7d5b6bdf791429bb874b793b81cff4c6094ef1d11a796b2",
"failures-and-recovery.md": "7df0b7ce4139b789d8988ce2bf640c388225daa28731b88719e4777f61e40a4c",
"features/activity-execution-model.md": "e8c37520ae46a7efb30438f4fc06bf893c1df430cb1f92c48963697adaf09082",
"features/cancel-and-terminate.md": "c678fc7a0c9b11f0e1bee295aff259de9803219c0aa6769fb801622799e7deb1",
"features/child-workflows.md": "57016591fb8816aed7b077e204f1c80f9c6a8dff7501bc00a141c41a4607306b",
Expand Down Expand Up @@ -84,7 +84,7 @@
"polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c",
"polyglot/python.md": "d55056ca7638df07b7267bc6d62e635b954957b99620478e861df90558860df3",
"polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3",
"polyglot/rust.md": "5ff66bcb7e5369bcffd8611342a35c27028cac5a4ee376e86d90334a2b12d365",
"polyglot/rust.md": "af91b22c93a7fe6833df156371d99bb105740684915bc73af4576f6de2897e10",
"polyglot/server-api-reference.md": "e94af77a13b341d6fdc9941d4ee94e5053ab932d2e77069b238eb33351414e83",
"polyglot/server-config-reference.md": "b2dc3ddd188b078875cb46bf32b94053d89912c063c1687cc98ff5ba2baba812",
"polyglot/server-role-topology.md": "3d048f0c6b5f179399622508f51e67fff8aa5a6d5b2492533fc720eeec2c27f2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,10 @@ class RetryableWorkflow extends Workflow
}
```

## Limites des rapports d’échec Rust en mode service {#rust-failure-report-limits}

Pour les workers de service exécutant réellement Rust SDK **4.10.1 ou ultérieur**, le message sortant atteint au plus 62 KiB UTF-8 avec marqueur, le stack 128 KiB si pris en charge, les métadonnées facultatives sérialisées combinées 64 KiB et le corps encodé complet 1 MiB ou une limite de transport connue plus basse. Type, retry et identité restent intacts ; une enveloppe obligatoire impossible est refusée. Le [guide Rust](./polyglot/rust.md#bounded-failure-reports) explique marqueurs, details Avro entiers et résultats locaux. Cela ne qualifie pas anciens SDK, mode embedded ou correction séparée du stockage des résumés Core.

## Guides associés {#related-guides}

- Les [garanties d’exécution et l’idempotence](./constraints/execution-guarantees.md)
Expand Down
Loading
Loading