Repository navigation
fix: defer storage reference retrieval storage in describe calls - #1720
Merged
Merged
Conversation
Sushisource
approved these changes
Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
describereturned.ActivityExecutionDescription, such asinput()andoutcome(), retrieve or reject only the payloads they decode. Failures (last_failureand a failed outcome) are still checked duringdescribe, because they are decoded there.ScheduleDescriptionStartWorkflowAction::args()checks the action's arguments when it is called. The schedule's memo is still checked duringdescribe, because it is decoded there.raw_input()andraw_args()return the payloads exactly as the server sent them.ScheduleHandle::updatestill checks the whole schedule before applying the update, since it decodes all of it. The check moved out of the shared describe helper and intoupdate.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
New unit tests, each confirmed to fail without the change it covers:
describesucceeds,raw_input()returns the reference unchanged, andinput()fails withPayloadConversionError::ExternalStorage(ExternalStorageError::NotConfigured).describesucceeds,raw_args()returns the reference unchanged, andargs()fails with the same error.updateon that schedule fails with that error before sending the update.The existing standalone activity and schedule integration suites pass.
cargo lint,cargo test-lintandcargo +nightly fmtpass.