Skip to content

fix(otel): end recording spans on non-terminal invocations - #671

Draft
ayushiahjolia wants to merge 1 commit into
mainfrom
fix/642-end-recording-spans-non-terminal
Draft

fix(otel): end recording spans on non-terminal invocations#671
ayushiahjolia wants to merge 1 commit into
mainfrom
fix/642-end-recording-spans-non-terminal

Conversation

@ayushiahjolia

Copy link
Copy Markdown
Contributor

Issue #, if available:
#642

Description of changes:
Both OTel plugins abandoned recording spans without ending them when a durable execution returned a non-terminal status, violating the OTel requirement that every created span be ended. The execution plugin dropped open operation spans on PENDING/RETRY, and both plugins dropped the execution-scoped Workflow span on non-terminal invocations.

Replace the eager recording Workflow span with a non-recording deterministic placeholder held during the invocation. The placeholder still carries the deterministic trace and span IDs, so it parents and links operation spans, keeps the Workflow current for auto-instrumented spans, and serves log correlation - without leaving a recording span to abandon. The recording Workflow span is created and ended exactly once, only on a terminal status, anchored at the execution start time.

The execution plugin now also ends any operation spans still open at invocation end, matching the invocation plugin. Cross-invocation correlation is unchanged: an operation that resumes later still gets its authoritative span from on_operation_end.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Both OTel plugins abandoned recording spans without ending them when a
durable execution returned a non-terminal status, violating the OTel
requirement that every created span be ended. The execution plugin
dropped open operation spans on PENDING/RETRY, and both plugins dropped
the execution-scoped Workflow span on non-terminal invocations.

Replace the eager recording Workflow span with a non-recording
deterministic placeholder held during the invocation. The placeholder
still carries the deterministic trace and span IDs, so it parents and
links operation spans, keeps the Workflow current for auto-instrumented
spans, and serves log correlation - without leaving a recording span to
abandon. The recording Workflow span is created and ended exactly once,
only on a terminal status, anchored at the execution start time.

The execution plugin now also ends any operation spans still open at
invocation end, matching the invocation plugin. Cross-invocation
correlation is unchanged: an operation that resumes later still gets its
authoritative span from on_operation_end.

Closes #642
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant