diff --git a/docs/polyglot/php.md b/docs/polyglot/php.md index 84a08c2f923..6971bf94327 100644 --- a/docs/polyglot/php.md +++ b/docs/polyglot/php.md @@ -285,9 +285,23 @@ service-mode bridge, including drain and rollback. Use [Deployment Modes](/docs/polyglot/deployment-modes/) for the wider runtime boundary comparison. +## Query results with binary values {#query-binary-results} + +PHP SDK 3.18.2 fixes query completion for valid Avro results containing nested +`AvroBinaryValue` bytes. The `result_envelope` remains authoritative. The SDK +omits only the optional plain `result` projection when it cannot be JSON +encoded; ordinary JSON-compatible results keep that projection. + +[Published PHP 3.18.2 / native Server 3.9.1 installed controls](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) +(PHP 8.3.36, linux/amd64, SQLite) verify an actual Worker round-trip for nested +binary bytes, ordinary JSON, signed zero and `null`, plus workflow completion +and graceful Worker deregistration. This is a compatible query fix; it does +not add a capability or establish full request-key or timeout-cleanup support. +See the [PHP query guide](https://php.durable-workflow.com/build/messages/#register-a-read-only-query). + ## Read an accepted update later {#read-an-update-outcome} -The selected PHP SDK 3.18.1 supports reading a retained update by its stable ID +The selected PHP SDK %%artifact.publishedPhpSdkVersion%% supports reading a retained update by its stable ID without admitting it again. `Client::updateOutcome($workflowId, $updateId)` defaults to `waitFor: 'completed'`: pending work throws `UpdateStillPending`; a completed result may legitimately be `null`. `updateOutcomeReceipt()` defaults diff --git a/docs/polyglot/python.md b/docs/polyglot/python.md index 14d3f610ad2..1c85b2e8d29 100644 --- a/docs/polyglot/python.md +++ b/docs/polyglot/python.md @@ -473,7 +473,17 @@ end-to-end rollout walkthrough; the CLI mirrors of these methods are `signal_workflow` returns the admission receipt, including its `request_id`. `query_workflow` and `WorkflowHandle.query` return a query receipt; read `receipt["result"]` for the decoded handler value, including when the handler successfully -returns `None`. See the [Python client guide](https://python.durable-workflow.com/reference/client/). +returns `None`. See the [Python query receipt guide](https://python.durable-workflow.com/reference/client/#read-a-query-result). + +Python SDK 2.17.2 fixes valid Avro query results containing bytes. The +`result_envelope` stays authoritative; only an optional plain JSON projection +that cannot be encoded is omitted. [Published 2.17.2 / native Server 3.9.1 +installed controls](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) +(linux/amd64, SQLite) verify nested-byte and `None` query receipts, cold Worker +replacement and pending-to-completed-null update reads. Query return shapes +remain as described above. This patch does not advertise timeout-cleanup or +parallel-policy capabilities. The earlier 2.17.1 completion-size evidence keeps +its exact version and experiment scope. `update_workflow` defaults to `wait_for="accepted"`. Its receipt can have `update_status="accepted"` and `result=None`. With `wait_for="completed"`, diff --git a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/php.md b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/php.md index fa0af8b95df..b71175ca111 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/php.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/php.md @@ -292,9 +292,15 @@ ausgelieferten Service-Modus-Brücke, einschließlich Auslaufen und Rollback. [Bereitstellungsmodi](/docs/polyglot/deployment-modes/) vergleicht die Laufzeitgrenzen umfassender. +## Query-Ergebnisse mit Binärwerten {#query-binary-results} + +PHP SDK 3.18.2 korrigiert Query-Completions für gültige Avro-Ergebnisse mit verschachtelten `AvroBinaryValue`-Bytes. `result_envelope` bleibt maßgeblich. Das SDK lässt nur die optionale einfache `result`-Projektion weg, wenn sie nicht JSON-kodiert werden kann; gewöhnliche JSON-kompatible Ergebnisse behalten diese Projektion. + +[Kontrollen mit veröffentlichtem, installiertem PHP 3.18.2 / nativem Server 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) prüfen einen tatsächlichen Worker-Roundtrip für verschachtelte Binärbytes, gewöhnliches JSON, vorzeichenbehaftete Null und `null` sowie Workflow-Abschluss und geordnete Worker-Abmeldung. Dies ist eine kompatible Query-Korrektur; sie fügt keine Capability hinzu und belegt weder vollständige Request-Key- noch Timeout-Cleanup-Unterstützung. Siehe den [PHP-Query-Leitfaden](https://php.durable-workflow.com/build/messages/#register-a-read-only-query). + ## Ein akzeptiertes Update später lesen {#read-an-update-outcome} -Das ausgewählte PHP SDK 3.18.1 liest ein aufbewahrtes Update anhand seiner stabilen ID, ohne es erneut anzunehmen. `Client::updateOutcome($workflowId, $updateId)` verwendet standardmäßig `waitFor: 'completed'`: Ausstehende Arbeit löst `UpdateStillPending` aus; ein abgeschlossenes Ergebnis darf `null` sein. `updateOutcomeReceipt()` verwendet standardmäßig `waitFor: 'accepted'` und liefert den Server-Beleg, sodass `update_status` und `wait_timed_out` getrennt vom abgeschlossenen Ergebnis geprüft werden können. +Das ausgewählte PHP SDK %%artifact.publishedPhpSdkVersion%% liest ein aufbewahrtes Update anhand seiner stabilen ID, ohne es erneut anzunehmen. `Client::updateOutcome($workflowId, $updateId)` verwendet standardmäßig `waitFor: 'completed'`: Ausstehende Arbeit löst `UpdateStillPending` aus; ein abgeschlossenes Ergebnis darf `null` sein. `updateOutcomeReceipt()` verwendet standardmäßig `waitFor: 'accepted'` und liefert den Server-Beleg, sodass `update_status` und `wait_timed_out` getrennt vom abgeschlossenen Ergebnis geprüft werden können. Diese GET-Lesezugriffe benötigen die Capability `update_outcome_reads` (nativer Server ab 3.6.0). Ohne sie wirft das SDK `LogicException` und sendet das Update nicht erneut. Eine ausstehende erste `updateWorkflow()`-Annahme behält die Request-ID des Aufrufers. Ein ausstehender GET-Lesezugriff behält `updateId`, aber der ursprüngliche Request-Key kann fehlen: `$pending->requestId` ist dann `''`, also unbekannt. Lesen Sie mit dieser Update-ID weiter; senden Sie niemals einen leeren, abgeleiteten oder internen gehashten Schlüssel als ursprüngliche Request-ID. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/python.md b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/python.md index 693030c3df2..f460c8c0a9c 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/polyglot/python.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/polyglot/python.md @@ -421,7 +421,9 @@ Die entsprechenden CLI-Befehle sind `dw task-queue:build-ids`, | `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, Authentifizierungs-/Serverfehler | | `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | decodierte Workflow-Ausgabe | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` | -`signal_workflow` liefert die Annahmequittung einschließlich `request_id`. `query_workflow` und `WorkflowHandle.query` liefern eine Query-Quittung; lesen Sie `receipt["result"]` für den dekodierten Handlerwert, auch wenn der Handler erfolgreich `None` zurückgibt. Siehe den [Python-Client-Leitfaden](https://python.durable-workflow.com/reference/client/). +`signal_workflow` liefert die Annahmequittung einschließlich `request_id`. `query_workflow` und `WorkflowHandle.query` liefern eine Query-Quittung; lesen Sie `receipt["result"]` für den dekodierten Handlerwert, auch wenn der Handler erfolgreich `None` zurückgibt. Siehe den [Python-Client-Leitfaden](https://python.durable-workflow.com/reference/client/#read-a-query-result). + +Python SDK 2.17.2 korrigiert gültige Avro-Query-Ergebnisse mit Bytes. `result_envelope` bleibt maßgeblich; nur eine optionale einfache JSON-Projektion, die nicht kodiert werden kann, entfällt. [Kontrollen mit veröffentlichtem, installiertem 2.17.2 / nativem Server 3.9.1](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) (linux/amd64, SQLite) prüfen Query-Belege mit verschachtelten Bytes und `None`, kalten Worker-Ersatz und Update-Lesezugriffe von ausstehend bis abgeschlossenem null. Die Query-Rückgabeform bleibt wie oben beschrieben. Dieser Patch bewirbt keine Timeout-Cleanup- oder Parallel-Policy-Capabilities. Der frühere Completion-Größennachweis für 2.17.1 behält seinen genauen Versions- und Versuchsumfang. `update_workflow` verwendet standardmäßig `wait_for="accepted"`. Die Bestätigung kann `update_status="accepted"` und `result=None` enthalten. Bei diff --git a/i18n/de/source-hashes.json b/i18n/de/source-hashes.json index 70453603f07..a7bb6d4ef61 100644 --- a/i18n/de/source-hashes.json +++ b/i18n/de/source-hashes.json @@ -80,11 +80,11 @@ "polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01", "polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13", "polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb", - "polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a", + "polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213", "polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989", "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", - "polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54", + "polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f", "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7", diff --git a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/php.md b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/php.md index 260f3bd7d21..0407d1119c2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/php.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/php.md @@ -290,9 +290,15 @@ mismo caso representativo en v1, v2 integrado y este puente de modo servicio, incluidos drenaje y reversión. Utiliza [Modos de despliegue](/docs/polyglot/deployment-modes/) para una comparación más amplia de límites del runtime. +## Resultados de consulta con valores binarios {#query-binary-results} + +PHP SDK 3.18.2 corrige la finalización de consultas para resultados Avro válidos con bytes `AvroBinaryValue` anidados. `result_envelope` sigue siendo la representación autoritativa. El SDK omite únicamente la proyección simple opcional `result` cuando no se puede codificar en JSON; los resultados habituales compatibles con JSON conservan esa proyección. + +Los [controles instalados de PHP 3.18.2 publicado / Server nativo 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) verifican un recorrido real del Worker con bytes binarios anidados, JSON habitual, cero con signo y `null`, además de completar el workflow y dar de baja el Worker de forma ordenada. Es una corrección compatible de consultas; no añade una capacidad ni establece soporte completo de claves de solicitud o limpieza por timeout. Consulte la [guía PHP de consultas](https://php.durable-workflow.com/build/messages/#register-a-read-only-query). + ## Leer una actualización aceptada más tarde {#read-an-update-outcome} -El PHP SDK 3.18.1 seleccionado permite leer una actualización retenida por su ID estable sin admitirla de nuevo. `Client::updateOutcome($workflowId, $updateId)` usa por defecto `waitFor: 'completed'`: el trabajo pendiente lanza `UpdateStillPending`; un resultado completado puede ser legítimamente `null`. `updateOutcomeReceipt()` usa por defecto `waitFor: 'accepted'` y devuelve el recibo del Server para inspeccionar `update_status` y `wait_timed_out` por separado del resultado completado. +El PHP SDK %%artifact.publishedPhpSdkVersion%% seleccionado permite leer una actualización retenida por su ID estable sin admitirla de nuevo. `Client::updateOutcome($workflowId, $updateId)` usa por defecto `waitFor: 'completed'`: el trabajo pendiente lanza `UpdateStillPending`; un resultado completado puede ser legítimamente `null`. `updateOutcomeReceipt()` usa por defecto `waitFor: 'accepted'` y devuelve el recibo del Server para inspeccionar `update_status` y `wait_timed_out` por separado del resultado completado. Estas lecturas GET requieren la capacidad `update_outcome_reads` (Server nativo 3.6.0 y posteriores). Sin ella, el SDK lanza `LogicException` y no reenvía la actualización. Una excepción pendiente del `updateWorkflow()` inicial conserva el ID de solicitud del llamador. Una lectura GET pendiente conserva `updateId`, pero la clave de solicitud original puede faltar: `$pending->requestId` es entonces `''`, que significa desconocida. Siga leyendo con ese ID de actualización; nunca envíe una clave vacía, inferida o con hash interno como ID de solicitud original. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/python.md b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/python.md index d80b519c39c..0b923ba68c9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/polyglot/python.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/polyglot/python.md @@ -420,7 +420,9 @@ Los equivalentes CLI son `dw task-queue:build-ids`, `dw task-queue:drain` y | `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, errores de autenticación/servidor | | `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | salida de workflow decodificada | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` | -`signal_workflow` devuelve el recibo de admisión, incluido `request_id`. `query_workflow` y `WorkflowHandle.query` devuelven un recibo de consulta; lea `receipt["result"]` para el valor decodificado del handler, incluso cuando devuelve `None` correctamente. Véase la [guía del cliente Python](https://python.durable-workflow.com/reference/client/). +`signal_workflow` devuelve el recibo de admisión, incluido `request_id`. `query_workflow` y `WorkflowHandle.query` devuelven un recibo de consulta; lea `receipt["result"]` para el valor decodificado del handler, incluso cuando devuelve `None` correctamente. Véase la [guía del cliente Python](https://python.durable-workflow.com/reference/client/#read-a-query-result). + +Python SDK 2.17.2 corrige resultados Avro válidos de consultas que contienen bytes. `result_envelope` sigue siendo la representación autoritativa; solo se omite una proyección JSON simple opcional que no se pueda codificar. Los [controles instalados de 2.17.2 publicado / Server nativo 3.9.1](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) (linux/amd64, SQLite) verifican recibos de consulta con bytes anidados y `None`, reemplazo en frío del Worker y lecturas de actualizaciones desde pendientes hasta completadas con null. Las formas de retorno de las consultas siguen siendo las descritas arriba. Este parche no anuncia capacidades de limpieza por timeout ni políticas de paralelismo. La evidencia anterior del tamaño de finalización de 2.17.1 conserva su alcance exacto de versión y experimento. `update_workflow` usa `wait_for="accepted"` de forma predeterminada. Su recibo puede contener `update_status="accepted"` y `result=None`. Con diff --git a/i18n/es/source-hashes.json b/i18n/es/source-hashes.json index 70453603f07..a7bb6d4ef61 100644 --- a/i18n/es/source-hashes.json +++ b/i18n/es/source-hashes.json @@ -80,11 +80,11 @@ "polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01", "polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13", "polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb", - "polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a", + "polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213", "polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989", "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", - "polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54", + "polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f", "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7", diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/php.md b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/php.md index b2e1f9f7a41..8cc1c3bdc36 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/php.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/php.md @@ -295,9 +295,15 @@ mode service livré, y compris le drainage et le retour arrière. Les [modes de déploiement](/docs/polyglot/deployment-modes/) comparent plus largement les frontières du runtime. +## Résultats de requête avec des valeurs binaires {#query-binary-results} + +Le PHP SDK 3.18.2 corrige la finalisation des requêtes pour des résultats Avro valides contenant des octets `AvroBinaryValue` imbriqués. `result_envelope` reste la représentation de référence. Le SDK omet uniquement la projection simple facultative `result` lorsqu’elle ne peut pas être encodée en JSON ; les résultats ordinaires compatibles JSON conservent cette projection. + +Les [contrôles sur installation du PHP 3.18.2 publié / Server natif 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) vérifient un aller-retour réel du Worker pour des octets binaires imbriqués, du JSON ordinaire, un zéro signé et `null`, ainsi que la fin du workflow et la désinscription propre du Worker. C’est une correction compatible des requêtes ; elle n’ajoute aucune capacité et n’établit pas la prise en charge complète des clés de requête ou du nettoyage après timeout. Voir le [guide PHP des requêtes](https://php.durable-workflow.com/build/messages/#register-a-read-only-query). + ## Lire plus tard une mise à jour acceptée {#read-an-update-outcome} -Le PHP SDK 3.18.1 sélectionné permet de lire une mise à jour conservée par son ID stable sans l’admettre à nouveau. `Client::updateOutcome($workflowId, $updateId)` utilise par défaut `waitFor: 'completed'` : un travail en attente lève `UpdateStillPending` ; un résultat terminé peut légitimement être `null`. `updateOutcomeReceipt()` utilise par défaut `waitFor: 'accepted'` et renvoie le reçu du Server pour examiner `update_status` et `wait_timed_out` séparément du résultat terminé. +Le PHP SDK %%artifact.publishedPhpSdkVersion%% sélectionné permet de lire une mise à jour conservée par son ID stable sans l’admettre à nouveau. `Client::updateOutcome($workflowId, $updateId)` utilise par défaut `waitFor: 'completed'` : un travail en attente lève `UpdateStillPending` ; un résultat terminé peut légitimement être `null`. `updateOutcomeReceipt()` utilise par défaut `waitFor: 'accepted'` et renvoie le reçu du Server pour examiner `update_status` et `wait_timed_out` séparément du résultat terminé. Ces lectures GET exigent la capacité `update_outcome_reads` (Server natif 3.6.0 et suivants). Sans elle, le SDK lève `LogicException` et ne renvoie pas la mise à jour. Une exception d’attente du premier `updateWorkflow()` conserve l’ID de requête de l’appelant. Une lecture GET en attente conserve `updateId`, mais la clé d’origine peut manquer : `$pending->requestId` vaut alors `''`, soit inconnue. Continuez la lecture avec cet ID de mise à jour ; ne soumettez jamais de clé vide, déduite ou hachée interne comme ID de requête d’origine. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/python.md b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/python.md index 42fe7af9448..299de36097c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/python.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/polyglot/python.md @@ -426,7 +426,9 @@ parcours complet. Les équivalents CLI sont `dw task-queue:build-ids`, | `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, erreurs d'authentification/serveur | | `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | sortie de workflow décodée | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` | -`signal_workflow` renvoie le reçu d’admission avec son `request_id`. `query_workflow` et `WorkflowHandle.query` renvoient un reçu de requête ; lisez `receipt["result"]` pour la valeur décodée du handler, y compris lorsque celui-ci renvoie `None` avec succès. Voir le [guide du client Python](https://python.durable-workflow.com/reference/client/). +`signal_workflow` renvoie le reçu d’admission avec son `request_id`. `query_workflow` et `WorkflowHandle.query` renvoient un reçu de requête ; lisez `receipt["result"]` pour la valeur décodée du handler, y compris lorsque celui-ci renvoie `None` avec succès. Voir le [guide du client Python](https://python.durable-workflow.com/reference/client/#read-a-query-result). + +Le Python SDK 2.17.2 corrige les résultats Avro valides de requêtes contenant des octets. `result_envelope` reste la représentation de référence ; seule une projection JSON simple facultative impossible à encoder est omise. Les [contrôles sur installation du 2.17.2 publié / Server natif 3.9.1](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) (linux/amd64, SQLite) vérifient les reçus de requête avec octets imbriqués et `None`, le remplacement à froid du Worker et les lectures de mise à jour d’attente à un résultat terminé null. La forme des retours de requête reste celle décrite ci-dessus. Ce patch n’annonce aucune capacité de nettoyage après timeout ni de politique de parallélisme. Les preuves antérieures de taille de finalisation de 2.17.1 gardent leur périmètre exact de version et d’expérience. `update_workflow` utilise `wait_for="accepted"` par défaut. Son accusé peut contenir `update_status="accepted"` et `result=None`. Avec diff --git a/i18n/fr/source-hashes.json b/i18n/fr/source-hashes.json index 70453603f07..a7bb6d4ef61 100644 --- a/i18n/fr/source-hashes.json +++ b/i18n/fr/source-hashes.json @@ -80,11 +80,11 @@ "polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01", "polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13", "polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb", - "polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a", + "polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213", "polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989", "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", - "polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54", + "polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f", "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7", diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/php.md b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/php.md index 737fbed583b..5d71d13fc83 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/php.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/php.md @@ -187,9 +187,15 @@ Worker は `workflow_entry_arguments_validation` を自動的に通知します これらのブリッジは、`durable-workflow/workflow` によって Laravel アプリケーション自体が永続状態を所有し Laravel キューで実行する[組み込み Laravel ワークフロー](/docs/installation/)とは別です。ドレインとロールバックを含め、v1、v2 組み込み、同梱サービスモードブリッジで同じ代表的な Laravel ユースケースを比較するには、[Laravel の採用とランタイム移行](/docs/laravel-adoption/)を参照してください。より広いランタイム境界の比較には[デプロイモード](/docs/polyglot/deployment-modes/)を使います。 +## バイナリ値を含む Query 結果 {#query-binary-results} + +PHP SDK 3.18.2 は、入れ子の `AvroBinaryValue` バイトを含む正当な Avro 結果の Query 完了を修正します。`result_envelope` が引き続き正規の結果です。SDK は JSON にエンコードできない場合だけ任意のプレーン `result` 表現を省略し、通常の JSON 互換の結果ではその表現を保持します。 + +[公開済み PHP 3.18.2 / native Server 3.9.1 のインストール後検証](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312)(PHP 8.3.36、linux/amd64、SQLite)では、実際の Worker で入れ子のバイナリバイト、通常の JSON、符号付きゼロ、`null` を往復させ、Workflow 完了と正常な Worker 登録解除を確認しています。これは互換性を保つ Query 修正であり、capability の追加や、リクエストキー全体・timeout-cleanup の対応を意味しません。[PHP Query ガイド](https://php.durable-workflow.com/build/messages/#register-a-read-only-query)を参照してください。 + ## 受理済み Update を後から読む {#read-an-update-outcome} -選択中の PHP SDK 3.18.1 は、保持された Update を安定した ID で読み取り、再度受理させずに結果を取得できます。`Client::updateOutcome($workflowId, $updateId)` の既定値は `waitFor: 'completed'` です。保留中は `UpdateStillPending` を投げ、完了した結果は正当に `null` になり得ます。`updateOutcomeReceipt()` の既定値は `waitFor: 'accepted'` で、Server のレシートを返すため、`update_status` と `wait_timed_out` を完了結果と分けて確認できます。 +選択中の PHP SDK %%artifact.publishedPhpSdkVersion%% は、保持された Update を安定した ID で読み取り、再度受理させずに結果を取得できます。`Client::updateOutcome($workflowId, $updateId)` の既定値は `waitFor: 'completed'` です。保留中は `UpdateStillPending` を投げ、完了した結果は正当に `null` になり得ます。`updateOutcomeReceipt()` の既定値は `waitFor: 'accepted'` で、Server のレシートを返すため、`update_status` と `wait_timed_out` を完了結果と分けて確認できます。 これらの GET 読み取りには `update_outcome_reads` capability(native Server 3.6.0 以降)が必要です。非対応なら SDK は `LogicException` を投げ、Update を再送しません。最初の `updateWorkflow()` が保留中の例外には呼び出し元のリクエスト ID が残ります。保留中の GET 読み取りでも `updateId` は保持されますが、元のリクエストキーが不明な場合があります。そのとき `$pending->requestId` は `''`(不明)です。その Update ID で読み取りを続け、空、推測値、内部ハッシュのキーを元のリクエスト ID として送信しないでください。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/python.md b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/python.md index e988a942cdb..4e3a22f854f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/python.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/polyglot/python.md @@ -352,7 +352,9 @@ driver = external_storage_driver_from_policy( | `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`、認証・Server エラー | | `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | デコード済みワークフロー出力 | `WorkflowFailed`、`WorkflowCancelled`、`WorkflowTerminated`、`TimeoutError` | -`signal_workflow` は `request_id` を含む受け付けレシートを返します。`query_workflow` と `WorkflowHandle.query` はクエリレシートを返すため、ハンドラーが正常に `None` を返す場合も、デコード済みの値は `receipt["result"]` から取得してください。[Python クライアントガイド](https://python.durable-workflow.com/reference/client/)を参照してください。 +`signal_workflow` は `request_id` を含む受け付けレシートを返します。`query_workflow` と `WorkflowHandle.query` はクエリレシートを返すため、ハンドラーが正常に `None` を返す場合も、デコード済みの値は `receipt["result"]` から取得してください。[Python クライアントガイド](https://python.durable-workflow.com/reference/client/#read-a-query-result)を参照してください。 + +Python SDK 2.17.2 は、バイトを含む正当な Avro Query 結果を修正します。`result_envelope` が引き続き正規の結果で、エンコードできない任意のプレーン JSON 表現だけを省略します。[公開済み 2.17.2 / native Server 3.9.1 のインストール後検証](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320)(linux/amd64、SQLite)では、入れ子のバイトと `None` の Query レシート、コールド Worker 置換、保留から完了 null への Update 読み取りを確認しています。Query の戻り値の形は上記のままです。このパッチは timeout-cleanup や並列ポリシーの capability を広告しません。以前の 2.17.1 の完了サイズに関する証拠は、正確なバージョンと実験の範囲を保持します。 `update_workflow` の既定は `wait_for="accepted"` です。レシートは `update_status="accepted"` と `result=None` を含む場合があります。`wait_for="completed"` では、`wait_timeout_seconds` が待機時間を制限します。期限が切れると、レシートは受け付け済みのまま `wait_timed_out=True` を設定します。`None` を含む完了した結果は、`update_status="completed"` でのみ識別できます。`update_id` を保持し、[後から結果を読み取ってください](https://python.durable-workflow.com/reference/client/#read-an-update-outcome)。 diff --git a/i18n/ja/source-hashes.json b/i18n/ja/source-hashes.json index 70453603f07..a7bb6d4ef61 100644 --- a/i18n/ja/source-hashes.json +++ b/i18n/ja/source-hashes.json @@ -80,11 +80,11 @@ "polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01", "polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13", "polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb", - "polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a", + "polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213", "polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989", "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", - "polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54", + "polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f", "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7", diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/php.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/php.md index 82f8b946366..5cbd58094af 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/php.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/php.md @@ -294,9 +294,15 @@ modo de serviço distribuída, incluindo drenagem e rollback. Use [Modos de implantação](/docs/polyglot/deployment-modes/) para a comparação mais ampla dos limites de runtime. +## Resultados de consulta com valores binários {#query-binary-results} + +O PHP SDK 3.18.2 corrige a conclusão de consultas para resultados Avro válidos com bytes `AvroBinaryValue` aninhados. `result_envelope` continua sendo a representação autoritativa. O SDK omite apenas a projeção simples opcional `result` quando não pode ser codificada em JSON; resultados comuns compatíveis com JSON mantêm essa projeção. + +Os [controles instalados do PHP 3.18.2 publicado / Server nativo 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) verificam uma ida e volta real do Worker para bytes binários aninhados, JSON comum, zero com sinal e `null`, além de conclusão do workflow e desregistro limpo do Worker. É uma correção compatível de consultas; não adiciona capability nem estabelece suporte completo a chaves de requisição ou limpeza por timeout. Consulte o [guia PHP de consultas](https://php.durable-workflow.com/build/messages/#register-a-read-only-query). + ## Ler uma atualização aceita mais tarde {#read-an-update-outcome} -O PHP SDK 3.18.1 selecionado permite ler uma atualização retida pelo ID estável sem admiti-la novamente. `Client::updateOutcome($workflowId, $updateId)` usa `waitFor: 'completed'` por padrão: trabalho pendente lança `UpdateStillPending`; um resultado concluído pode legitimamente ser `null`. `updateOutcomeReceipt()` usa `waitFor: 'accepted'` por padrão e retorna o recibo do Server para inspecionar `update_status` e `wait_timed_out` separadamente do resultado concluído. +O PHP SDK %%artifact.publishedPhpSdkVersion%% selecionado permite ler uma atualização retida pelo ID estável sem admiti-la novamente. `Client::updateOutcome($workflowId, $updateId)` usa `waitFor: 'completed'` por padrão: trabalho pendente lança `UpdateStillPending`; um resultado concluído pode legitimamente ser `null`. `updateOutcomeReceipt()` usa `waitFor: 'accepted'` por padrão e retorna o recibo do Server para inspecionar `update_status` e `wait_timed_out` separadamente do resultado concluído. Essas leituras GET exigem a capability `update_outcome_reads` (Server nativo 3.6.0 ou posterior). Sem ela, o SDK lança `LogicException` e não reenvia a atualização. Uma exceção pendente do `updateWorkflow()` inicial preserva o ID de requisição do chamador. Uma leitura GET pendente preserva `updateId`, mas a chave original pode estar indisponível: `$pending->requestId` então é `''`, ou seja, desconhecida. Continue lendo com esse ID de atualização; nunca envie uma chave vazia, inferida ou com hash interno como ID original. diff --git a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/python.md b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/python.md index 50d6fde2952..1ce414de524 100644 --- a/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/python.md +++ b/i18n/pt-BR/docusaurus-plugin-content-docs/current/polyglot/python.md @@ -425,7 +425,9 @@ o procedimento completo; os equivalentes CLI são `dw task-queue:build-ids`, | `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, erros de autenticação/servidor | | `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | saída decodificada do workflow | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` | -`signal_workflow` retorna o recibo de admissão, incluindo `request_id`. `query_workflow` e `WorkflowHandle.query` retornam um recibo de consulta; leia `receipt["result"]` para o valor decodificado do handler, inclusive quando retorna `None` com sucesso. Veja o [guia do cliente Python](https://python.durable-workflow.com/reference/client/). +`signal_workflow` retorna o recibo de admissão, incluindo `request_id`. `query_workflow` e `WorkflowHandle.query` retornam um recibo de consulta; leia `receipt["result"]` para o valor decodificado do handler, inclusive quando retorna `None` com sucesso. Veja o [guia do cliente Python](https://python.durable-workflow.com/reference/client/#read-a-query-result). + +O Python SDK 2.17.2 corrige resultados Avro válidos de consultas contendo bytes. `result_envelope` continua sendo a representação autoritativa; apenas uma projeção JSON simples opcional que não possa ser codificada é omitida. Os [controles instalados do 2.17.2 publicado / Server nativo 3.9.1](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) (linux/amd64, SQLite) verificam recibos de consulta com bytes aninhados e `None`, substituição a frio do Worker e leituras de atualização de pendente até concluída com null. Os formatos de retorno das consultas continuam como descritos acima. Esse patch não anuncia capabilities de limpeza por timeout nem de política de paralelismo. A evidência anterior do tamanho de conclusão de 2.17.1 mantém seu escopo exato de versão e experimento. `update_workflow` usa `wait_for="accepted"` por padrão. Seu recibo pode conter `update_status="accepted"` e `result=None`. Com `wait_for="completed"`, diff --git a/i18n/pt-BR/source-hashes.json b/i18n/pt-BR/source-hashes.json index 70453603f07..a7bb6d4ef61 100644 --- a/i18n/pt-BR/source-hashes.json +++ b/i18n/pt-BR/source-hashes.json @@ -80,11 +80,11 @@ "polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01", "polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13", "polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb", - "polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a", + "polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213", "polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989", "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", - "polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54", + "polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f", "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7", diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/php.md b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/php.md index bb111ff0d95..a8d4f5e0e5a 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/php.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/php.md @@ -289,9 +289,15 @@ service mode, включно з drain і rollback. Ширше порівняння меж runtime наведено в [режимах розгортання](/docs/polyglot/deployment-modes/). +## Результати запитів із бінарними значеннями {#query-binary-results} + +PHP SDK 3.18.2 виправляє завершення запитів для коректних результатів Avro із вкладеними байтами `AvroBinaryValue`. `result_envelope` залишається авторитетним поданням. SDK пропускає лише необов’язкову просту проєкцію `result`, коли її неможливо закодувати в JSON; звичайні JSON-сумісні результати зберігають цю проєкцію. + +[Перевірки встановленого опублікованого PHP 3.18.2 / нативного Server 3.9.1](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312) (PHP 8.3.36, linux/amd64, SQLite) підтверджують фактичний обмін через Worker для вкладених бінарних байтів, звичайного JSON, знакового нуля та `null`, а також завершення workflow і коректне зняття Worker з реєстрації. Це сумісне виправлення запитів; воно не додає можливості та не встановлює повну підтримку ключів запитів чи очищення після тайм-ауту. Див. [посібник PHP із запитів](https://php.durable-workflow.com/build/messages/#register-a-read-only-query). + ## Прочитати прийняте оновлення пізніше {#read-an-update-outcome} -Вибраний PHP SDK 3.18.1 дозволяє читати збережене оновлення за сталим ID без повторного прийняття. `Client::updateOutcome($workflowId, $updateId)` типово використовує `waitFor: 'completed'`: незавершена робота породжує `UpdateStillPending`; завершений результат цілком може бути `null`. `updateOutcomeReceipt()` типово використовує `waitFor: 'accepted'` і повертає квитанцію Server, щоб перевіряти `update_status` та `wait_timed_out` окремо від завершеного результату. +Вибраний PHP SDK %%artifact.publishedPhpSdkVersion%% дозволяє читати збережене оновлення за сталим ID без повторного прийняття. `Client::updateOutcome($workflowId, $updateId)` типово використовує `waitFor: 'completed'`: незавершена робота породжує `UpdateStillPending`; завершений результат цілком може бути `null`. `updateOutcomeReceipt()` типово використовує `waitFor: 'accepted'` і повертає квитанцію Server, щоб перевіряти `update_status` та `wait_timed_out` окремо від завершеного результату. Ці GET-читання потребують можливості `update_outcome_reads` (нативний Server 3.6.0 і новіші). Без неї SDK породжує `LogicException` і не надсилає оновлення повторно. Виняток очікування початкового `updateWorkflow()` зберігає ID запиту викликача. Незавершене GET-читання зберігає `updateId`, але початковий ключ запиту може бути недоступним: тоді `$pending->requestId` дорівнює `''`, тобто невідомий. Продовжуйте читати за цим ID оновлення; ніколи не надсилайте порожній, виведений або внутрішній хешований ключ як початковий ID запиту. diff --git a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/python.md b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/python.md index 8a3722a174d..5e14b1b62f8 100644 --- a/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/python.md +++ b/i18n/uk/docusaurus-plugin-content-docs/current/polyglot/python.md @@ -419,7 +419,9 @@ Namespace є межею орендарів workflow, schedule, атрибуті | `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, помилки автентифікації/Server | | `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | декодований результат workflow | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` | -`signal_workflow` повертає квитанцію прийняття разом із `request_id`. `query_workflow` і `WorkflowHandle.query` повертають квитанцію запиту; читайте `receipt["result"]` для декодованого значення обробника, навіть коли він успішно повертає `None`. Дивіться [посібник клієнта Python](https://python.durable-workflow.com/reference/client/). +`signal_workflow` повертає квитанцію прийняття разом із `request_id`. `query_workflow` і `WorkflowHandle.query` повертають квитанцію запиту; читайте `receipt["result"]` для декодованого значення обробника, навіть коли він успішно повертає `None`. Дивіться [посібник клієнта Python](https://python.durable-workflow.com/reference/client/#read-a-query-result). + +Python SDK 2.17.2 виправляє коректні результати Avro-запитів, що містять байти. `result_envelope` залишається авторитетним поданням; пропускається лише необов’язкова проста JSON-проєкція, яку неможливо закодувати. [Перевірки встановленого опублікованого 2.17.2 / нативного Server 3.9.1](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320) (linux/amd64, SQLite) підтверджують квитанції запитів із вкладеними байтами та `None`, холодну заміну Worker і читання оновлень від очікування до завершеного null. Форма повернення запитів залишається описаною вище. Цей патч не оголошує можливостей очищення після тайм-ауту чи політик паралелізму. Попередні докази розміру завершення для 2.17.1 зберігають точний обсяг версії та експерименту. `update_workflow` за замовчуванням використовує `wait_for="accepted"`. Підтвердження може містити `update_status="accepted"` і `result=None`. З diff --git a/i18n/uk/source-hashes.json b/i18n/uk/source-hashes.json index 70453603f07..a7bb6d4ef61 100644 --- a/i18n/uk/source-hashes.json +++ b/i18n/uk/source-hashes.json @@ -80,11 +80,11 @@ "polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01", "polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13", "polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb", - "polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a", + "polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213", "polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989", "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", - "polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54", + "polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f", "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7", diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/php.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/php.md index 6c0f918ccae..940f55e598c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/php.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/php.md @@ -184,9 +184,15 @@ Worker 会自动声明 `workflow_entry_arguments_validation`。在配套 Server 这些桥接不同于[嵌入式 Laravel 工作流](/docs/installation/);后者通过 `durable-workflow/workflow` 使 Laravel 应用自身管理持久状态并通过 Laravel 队列执行。参见 [Laravel 采用与运行时迁移](/docs/laravel-adoption/),了解同一个典型 Laravel 用例如何使用 v1、v2 嵌入式及已提供的服务模式桥接,包括排空和回滚。更全面的运行时边界比较见[部署模式](/docs/polyglot/deployment-modes/)。 +## 含二进制值的查询结果 {#query-binary-results} + +PHP SDK 3.18.2 修复了包含嵌套 `AvroBinaryValue` 字节的有效 Avro 结果在查询完成时的问题。`result_envelope` 仍是权威表示。SDK 仅在无法编码为 JSON 时省略可选的普通 `result` 投影;普通 JSON 兼容结果保留该投影。 + +[已发布 PHP 3.18.2 / 原生 Server 3.9.1 的安装后验证](https://github.com/durable-workflow/sdk-php/pull/415#issuecomment-6858062312)(PHP 8.3.36、linux/amd64、SQLite)确认实际 Worker 对嵌套二进制字节、普通 JSON、有符号零和 `null` 的往返处理,以及 workflow 完成和 Worker 正常注销。这是兼容的查询修复,不会添加 capability,也不代表完整请求键或超时清理支持。参见 [PHP 查询指南](https://php.durable-workflow.com/build/messages/#register-a-read-only-query)。 + ## 稍后读取已接受的更新 {#read-an-update-outcome} -所选 PHP SDK 3.18.1 可通过稳定 ID 读取保留的更新,无需再次受理。`Client::updateOutcome($workflowId, $updateId)` 默认使用 `waitFor: 'completed'`:仍在等待时抛出 `UpdateStillPending`;已完成的结果可以合法地为 `null`。`updateOutcomeReceipt()` 默认使用 `waitFor: 'accepted'`,返回 Server 回执,以便将 `update_status`、`wait_timed_out` 与已完成结果分开检查。 +所选 PHP SDK %%artifact.publishedPhpSdkVersion%% 可通过稳定 ID 读取保留的更新,无需再次受理。`Client::updateOutcome($workflowId, $updateId)` 默认使用 `waitFor: 'completed'`:仍在等待时抛出 `UpdateStillPending`;已完成的结果可以合法地为 `null`。`updateOutcomeReceipt()` 默认使用 `waitFor: 'accepted'`,返回 Server 回执,以便将 `update_status`、`wait_timed_out` 与已完成结果分开检查。 这些 GET 读取要求 `update_outcome_reads` capability(原生 Server 3.6.0 及以上)。不支持时 SDK 抛出 `LogicException`,不会重新提交更新。首次 `updateWorkflow()` 的等待异常保留调用方请求 ID。待完成的 GET 读取保留 `updateId`,但原始请求键可能不可用:此时 `$pending->requestId` 为 `''`,表示未知。请继续使用该更新 ID 读取;切勿将空键、推测键或内部哈希键当作原始请求 ID 提交。 diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/python.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/python.md index c8a57509842..451f8b8845c 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/python.md +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/polyglot/python.md @@ -349,7 +349,9 @@ driver = external_storage_driver_from_policy( | `await client.archive_workflow(workflow_id, reason=None)` | `WorkflowCommandResult` | `WorkflowNotFound`, 认证/Server 错误 | | `await client.get_result(handle, poll_interval=0.5, timeout=30.0)` | 已解码工作流输出 | `WorkflowFailed`, `WorkflowCancelled`, `WorkflowTerminated`, `TimeoutError` | -`signal_workflow` 返回包含 `request_id` 的接纳回执。`query_workflow` 和 `WorkflowHandle.query` 返回查询回执;通过 `receipt["result"]` 读取解码后的处理器值,包括成功返回的 `None`。参阅 [Python 客户端指南](https://python.durable-workflow.com/reference/client/)。 +`signal_workflow` 返回包含 `request_id` 的接纳回执。`query_workflow` 和 `WorkflowHandle.query` 返回查询回执;通过 `receipt["result"]` 读取解码后的处理器值,包括成功返回的 `None`。参阅 [Python 客户端指南](https://python.durable-workflow.com/reference/client/#read-a-query-result)。 + +Python SDK 2.17.2 修复了包含字节的有效 Avro 查询结果。`result_envelope` 仍是权威表示,仅省略无法编码的可选普通 JSON 投影。[已发布 2.17.2 / 原生 Server 3.9.1 的安装后验证](https://github.com/durable-workflow/sdk-python/pull/318#issuecomment-6857958320)(linux/amd64、SQLite)确认嵌套字节与 `None` 查询回执、Worker 冷替换以及从待完成到完成 null 的更新读取。查询返回形态仍如上所述。此补丁不会通告超时清理或并行策略 capability。此前 2.17.1 的完成大小证据保留其确切版本和实验范围。 `update_workflow` 默认为 `wait_for="accepted"`。其回执可能包含 `update_status="accepted"` 和 `result=None`。使用 `wait_for="completed"` 时,`wait_timeout_seconds` 限制等待时间。等待到期后,回执仍为已接受,并设置 `wait_timed_out=True`。只有 `update_status="completed"` 才表示结果已完成,包括 `None`。请保留 `update_id`,以便[稍后读取结果](https://python.durable-workflow.com/reference/client/#read-an-update-outcome)。 diff --git a/i18n/zh-Hans/source-hashes.json b/i18n/zh-Hans/source-hashes.json index 70453603f07..a7bb6d4ef61 100644 --- a/i18n/zh-Hans/source-hashes.json +++ b/i18n/zh-Hans/source-hashes.json @@ -80,11 +80,11 @@ "polyglot/invocable-carrier.md": "00bcf878b7bac1be90718b73f0a626a99cf0e111414ac0854c6491d159798c01", "polyglot/invocable-php-handler.md": "3b678eb1d69fe32dfcfdc05d36b33e49e01b79d7216bd784f6a61a6f1c3c3a13", "polyglot/namespace-auth-workers.md": "fee5e52a18637814f60aeb419f7ebc99ce4927089dfb748073697a8218bd47bb", - "polyglot/php.md": "744b184b50b5de82f2d287beac0aa491c21b41b6287c2aed63ed7eb123f2e02a", + "polyglot/php.md": "7ea69bc61b6a1b8ff9acd141b504128fd6b83ca9522076fe9d971d24a1f70213", "polyglot/polling-patterns.md": "30875099a23731c6c471b481a771378acc6ff57eed2fda4405a509057534c989", "polyglot/portable-worker-affinity.md": "40973c6a31a76845b4f95e9a505e68ad76abd5174bbdccf37993cdebc8904959", "polyglot/prerelease-history-migration.md": "a57f05f492228a8a67791f9152648a1e5f80856325b78777cf63b6ef49b7413c", - "polyglot/python.md": "6dadcd0fdf57ad9ca8bfc8eded74f870bf62a099ae16c2767338a2c74bb07b54", + "polyglot/python.md": "82da06617fe24e70c5c89197d192a81430a282b788ef93afd3b3bcb690ba2a9f", "polyglot/runtime-migration.md": "5a78713bb8cb74aea58f6d5d826400d968a405f69c6ff17fdf2f7decb1d14b71", "polyglot/rust-cloud-quickstart.md": "2303434fc9302a81a8381ad4836423ef9952eb3201a4574c432254e3cb68c5f3", "polyglot/rust.md": "2cc511074e6d0ce8ababa0ccd6acbdaa7df3bf5d8c67ae5ef2fa07d75a05d2e7", diff --git a/static/stable-releases.json b/static/stable-releases.json index 418bcaa0b93..139d035029a 100644 --- a/static/stable-releases.json +++ b/static/stable-releases.json @@ -5,8 +5,8 @@ "artifacts": { "cli": "2.8.0", "helm-chart": "1.7.0", - "sdk-php": "3.18.1", - "sdk-python": "2.17.1", + "sdk-php": "3.18.2", + "sdk-python": "2.17.2", "sdk-rust": "4.16.0", "server": "3.9.1", "waterline": "2.18.0",