"Non-Deterministic workflow detected" error from deterministic code
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 45/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- azure, python
- Domaine
- backend, distributed-systems
Piste de recherche
Commencez par exécuter la reproduction minimale de repro_nondeterminism.py avec la configuration de function_app.py, en utilisant la chaîne d’exception fournie et la comparaison plus courte avec "x". Suivez la manière dont l’exception de l’activité est signalée lors de la relecture de l’orchestration et des vérifications de déterminisme ; le travail est terminé lorsque le workflow atteint l’état Failed et expose l’exception de l’activité sans erreur non déterministe.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🐛 Describe the bug
I have a minimal repro which makes the Function fail with "Non-Deterministic workflow detected" error, even if the code is completely deterministic. If I replace the RuntimeError argument string with "x", then I get the expected behavior. There is something in the exception string which triggers the undesired behavior.
🤔 Expected behavior
The Function should end with Failed status with the exception from the activity in the output.
☕ Steps to reproduce
Here is the code for a minimal repro: HTTP trigger + trivial orchestration and activity. The activity throws an exception every time. (the SAS signature is fake)
import logging
import azure.functions as func
import azure.durable_functions as df
bp = df.Blueprint()
logger = logging.getLogger(__name__)
# ── Trigger ────────────────────────
@bp.route(route="repro")
@bp.durable_client_input(client_name="orchestration_client")
async def http_start_repro(
req: func.HttpRequest, orchestration_client: df.DurableOrchestrationClient
) -> func.HttpResponse:
instance_id = await orchestration_client.start_new("repro_orchestrator")
logger.info(f"Started repro orchestrator with ID '{instance_id}'")
return orchestration_client.create_check_status_response(req, instance_id)
# ── Orchestrator ──────────────────
@bp.orchestration_trigger(context_name="context")
def repro_orchestrator(context: df.DurableOrchestrationContext):
try:
yield context.call_activity("repro_activity")
except Exception as e:
logger.error(f"Repro orchestrator caught: {e}")
raise
# ── Activity ──────────────────────
@bp.activity_trigger(input_name="input_data")
def repro_activity(input_data):
# The sig= value contains /, +, and = which trigger the bug.
raise RuntimeError(
"Download failed: https://example.blob.core.windows.net/container/test.file"
"?sv=2025-07-05&spr=https&st=2026-04-01T10:58:55Z"
"&se=2026-04-02T10:58:55Z&sr=b&sp=r"
"&sig=aB3dE/fG5hI+jK7lM9nO="
)
# ── function_app.py ──────────────
# Save the following as function_app.py in the same directory:
import azure.functions as func
import azure.durable_functions as df
from repro_nondeterminism import bp
app = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
app.register_blueprint(bp)
⚡If deployed to Azure
I see the same behavior if deployed to Azure. Please refer to the code.
- Langage dominant
- Python
- Étoiles
- 157
- Forks
- 71
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Azure/azure-functions-durable-python
-
Enhancement fixed-in-v2 P3
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Azure/azure-functions-durable-python#617 · 1 commentaire ·
-
bug Debuggability fixed-in-v2 P2
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Azure/azure-functions-durable-python#587 · 2 commentaires · 1 réaction ·
-
Custom object serialization broken for orchestrator return valuesPeut-être pris @andystaples l’a pris il y a 87 jours. Ouvertebug fixed-in-v2 P2
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Azure/azure-functions-durable-python#568 · 1 commentaire ·
-
bug fixed-in-v2 P3
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Azure/azure-functions-durable-python#475 · 1 commentaire ·
-
Enhancement fixed-in-v2 P3
Difficulté 4/5 3-5 jours Accessibilité débutants 62/100
Azure/azure-functions-durable-python#618 · 1 commentaire ·
Toutes les issues de Azure/azure-functions-durable-python
Issues similaires
-
tests/strategies_test.py:174 goes uncovered on about 1 run in 100, failing the coverage ratchetOuverteflaky-watch
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
btclib-org/btclib#2839 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
nion-software/nionswift#2018 ·
Les mainteneurs répondent en général sous 1 jour
-
Deleting a member fails when another member's share transfer points to themPeut-être pris @Beerlesklopfer l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
FoodCoopX/wirgarten-tapir#1336 ·
Les mainteneurs répondent en général sous 3 jours
-
pydanty:is-working
Difficulté 2/5 1-3 heures Accessibilité débutants 71/100
pydantic/pydantic-ai#11467 ·
Les mainteneurs répondent en général sous 1 jour
-
Link Checker ReportOuverteautomated issue linkchecker report
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
QuantEcon/lecture-python.myst#1098 ·
Les mainteneurs répondent en général sous 1 jour