Azure / Azure/azure-functions-durable-python

"Non-Deterministic workflow detected" error from deterministic code

Open
#600 3 comments 0 reactions 0 assignees View on GitHub
blocked bug fixed-in-v2 known-regression
Dominant language
Python
Stars
157
Forks
70
Avg merge
2d 10h
Merged PRs (30d)
2

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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.