Skip to content

fix: defer storage reference retrieval storage in describe calls - #1720

Merged
jmaeagle99 merged 2 commits into
mainfrom
extstore-defer-describe-retrieval
Oct 29, 2026
Merged

jmaeagle99 merged 2 commits into
mainfrom
extstore-defer-describe-retrieval

Conversation

@jmaeagle99

Copy link
Copy Markdown
Contributor

What was changed

Activity describe and schedule describe now check a payload for external storage references only when it is decoded. Both descriptions already wait until an accessor is called to decode most of their payloads, but #1706 checked the whole response when describe returned.

  • Activity describe: the async accessors on ActivityExecutionDescription, such as input() and outcome(), retrieve or reject only the payloads they decode. Failures (last_failure and a failed outcome) are still checked during describe, because they are decoded there.
  • Schedule describe: ScheduleDescriptionStartWorkflowAction::args() checks the action's arguments when it is called. The schedule's memo is still checked during describe, because it is decoded there.
  • Raw accessors such as raw_input() and raw_args() return the payloads exactly as the server sent them.
  • ScheduleHandle::update still checks the whole schedule before applying the update, since it decodes all of it. The check moved out of the shared describe helper and into update.

Why?

Without storage configured, a single reference made the whole describe fail, even for a caller who only wanted the activity's status or the schedule's spec. With storage, describe fetched every stored payload, including ones the caller never read. Retrieval should be deferred wherever decoding is, so it happens only for payloads that are actually read.

Checklist

  1. How was this tested:

New unit tests, each confirmed to fail without the change it covers:

  • An activity whose input is a reference: describe succeeds, raw_input() returns the reference unchanged, and input() fails with PayloadConversionError::ExternalStorage(ExternalStorageError::NotConfigured).
  • A schedule whose action arguments are a reference: describe succeeds, raw_args() returns the reference unchanged, and args() fails with the same error.
  • update on that schedule fails with that error before sending the update.

The existing standalone activity and schedule integration suites pass. cargo lint, cargo test-lint and cargo +nightly fmt pass.

  1. Any docs updates needed? No.

@jmaeagle99 jmaeagle99 added the skip-changelog PR changes do not require changelog updates label Oct 28, 2026
@jmaeagle99
jmaeagle99 requested a review from a team as a code owner October 28, 2026 16:01
@jmaeagle99
jmaeagle99 enabled auto-merge (squash) October 28, 2026 23:19
@jmaeagle99
jmaeagle99 merged commit e3f73fc into main Oct 29, 2026
46 of 48 checks passed
@jmaeagle99
jmaeagle99 deleted the extstore-defer-describe-retrieval branch October 29, 2026 00:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changelog PR changes do not require changelog updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants