"Non-Deterministic workflow detected" error from deterministic code
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- azure, python
- Domínio
- backend, distributed-systems
Direção de pesquisa
Comece executando a reprodução mínima de repro_nondeterminism.py com a configuração de function_app.py, usando a string de exceção fornecida e a comparação mais curta com "x". Rastreie como a exceção da atividade é reportada por meio do replay da orquestração e das verificações de determinismo; considera-se concluído quando o workflow alcança o status Failed e expõe a exceção da atividade sem um erro não determinístico.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
🐛 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.
- Linguagem predominante
- Python
- Estrelas
- 157
- Forks
- 71
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de Azure/azure-functions-durable-python
-
Enhancement fixed-in-v2 P3
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Azure/azure-functions-durable-python#617 · 1 comentário ·
-
bug Debuggability fixed-in-v2 P2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Azure/azure-functions-durable-python#587 · 2 comentários · 1 reação ·
-
Custom object serialization broken for orchestrator return valuesTalvez já em andamento @andystaples assumiu há 99 dias. Abertabug fixed-in-v2 P2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Azure/azure-functions-durable-python#568 · 1 comentário ·
-
bug fixed-in-v2 P3
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Azure/azure-functions-durable-python#475 · 1 comentário ·
-
Propagate FunctionInvocationId for single-instance and bulk purge requestsTalvez já em andamento @Fire162 assumiu há 5 dias. AbertaNeeds: Triage :mag:
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 72/100
Todas as issues de Azure/azure-functions-durable-python
Issues semelhantes
-
[yugabyted] xcluster set_up and add_to_replication fail for database names containing - . or (Abertakind/bug priority/medium qa_automation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
yugabyte/yugabyte-db#37324 ·
Mantenedores costumam responder em até 1 dia
-
good first issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 87/100
btclib-org/btclib-node#2260 ·
Mantenedores costumam responder em até 1 dia
-
ChatBedrockConverse changes the keys of JSON tool results to camelCase (`order_id` becomes `orderId`)Talvez já em andamento @geyazheng assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
langchain-ai/langchain-aws#1469 ·
Mantenedores costumam responder em até 1 dia
-
GCToggler leaves collection enabled if the body re-enables itTalvez já em andamento @Gambit-Checkmate assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 7 dias
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
EESSI/docs#949 · 1 comentário ·
Mantenedores costumam responder em até 1 dia