Skip to content

Tracking: lock loss, replay and commit edge cases (core, duroxide-pg and the SDKs) #55

Open

Description

@affandar

Why this list exists

A process stall that lasted longer than the orchestration lock (5 s by default) showed a bug in the Node.js and Python SDKs. Two replays of one instance were alive in one process, and they shared one context. The change for that bug is in microsoft/duroxide-node#17 and microsoft/duroxide-python#17.

While I checked the code around it, I found the items below. Each item has its own issue with the code references, the way it fails, and a suggested fix.

  • Run means: reproduced by a run.
  • Read means: found by reading the code, not reproduced.

Core (this repo)

PostgreSQL provider

Node.js SDK

Python SDK

.NET SDK

  • microsoft/duroxide-net#15 (PR, merged) Replays of one instance shared a context. Run
  • microsoft/duroxide-net#16 Read
  • microsoft/duroxide-net#17 Read
  • microsoft/duroxide-net#18 Read
  • microsoft/duroxide-net#19 Read

Java SDK

  • microsoft/duroxide-java#8 (PR, merged) Replays of one instance shared a context. Run
  • microsoft/duroxide-java#9 Read
  • microsoft/duroxide-java#10 Read
  • microsoft/duroxide-java#11 Read
  • microsoft/duroxide-java#12 Read

The .NET and Java repositories are not public. Their links work for people who have access.

Suggested order

  1. A failed activity lock renewal can lose the activity result; the orchestration waits forever #56 and prune_kv_values_updated_before emits actions in HashMap order; replay fails with kv clear mismatch #57. Each one ends an orchestration, or leaves it waiting forever, although the orchestration code is correct.
  2. A turn that lost its orchestration lock keeps running, and the same runtime can start a second replay of the instance #59. It removes the condition that the SDK bug needed.
  3. A failed commit becomes a permanent OrchestrationFailed without parent notification; the fallback abandon never runs #58 together with Most SQLSTATEs are classified as permanent, including statement timeout and failover errors duroxide-pg#30. Together they turn a database error that goes away into a failed instance.

Activity

  1. changed the title [-]Tracking: lock loss, replay and commit edge cases (core, duroxide-pg, Node.js and Python SDKs)[/-] [+]Tracking: lock loss, replay and commit edge cases (core, duroxide-pg and the SDKs)[/+] on Oct 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions