Summary
A Durable Functions v4 (durable-functions@0.4.x, gRPC-core) client calling a control-plane op (terminate/suspend/resume) on an instance in a terminal state (Completed/Failed/Terminated) currently gets an opaque 2 UNKNOWN: Exception was thrown by handler, which the compat turns into HTTP 400. v3 (extension-HTTP path) instead swallowed terminal-instance ops -> HTTP 200 (no-op).
Evidence (E2E run-2)
Problems
- Server-side: the extension's gRPC endpoint maps a wrong-state
InvalidOperationException to opaque 2 UNKNOWN, losing the reason. Ideally return a meaningful status (e.g. FAILED_PRECONDITION) with detail — benefits ALL language SDKs.
- Client-side (compat): without server detail, v4 can't distinguish terminal from other states without an extra getStatus round-trip; the current bare 400 is not ideal (should distinguish 404 nonexistent from a terminal/conflict status, and not be a plain 400).
Proposed direction (needs decision)
Scope
3 e2e specs skipped in #282 pending this: suspend-completed, terminate-completed, terminate-terminated.
Summary
A Durable Functions v4 (durable-functions@0.4.x, gRPC-core) client calling a control-plane op (terminate/suspend/resume) on an instance in a terminal state (Completed/Failed/Terminated) currently gets an opaque
2 UNKNOWN: Exception was thrown by handler, which the compat turns into HTTP 400. v3 (extension-HTTP path) instead swallowed terminal-instance ops -> HTTP 200 (no-op).Evidence (E2E run-2)
5 NOT_FOUND(rich detail) — handled in Adddurable-functions@4.0.0— Azure Functions Durable provider on the gRPC core (+ core host helpers, E2E CI, and release pipeline) #282.2 UNKNOWN: Exception was thrown by handler(client sees NO detail). Host log showsCannot <op> ... in the <State> state.but it is not propagated over gRPC.Problems
InvalidOperationExceptionto opaque2 UNKNOWN, losing the reason. Ideally return a meaningful status (e.g.FAILED_PRECONDITION) with detail — benefits ALL language SDKs.Proposed direction (needs decision)
Cannot <op> in <State>). Decide exact policy — reason this is separate from Adddurable-functions@4.0.0— Azure Functions Durable provider on the gRPC core (+ core host helpers, E2E CI, and release pipeline) #282.Scope
3 e2e specs skipped in #282 pending this: suspend-completed, terminate-completed, terminate-terminated.