Skip to content

feat: external storage foundation types - #600

Merged
jmaeagle99 merged 15 commits into
mainfrom
extstore-foundation
Oct 9, 2026
Merged

jmaeagle99 merged 15 commits into
mainfrom
extstore-foundation

Conversation

@jmaeagle99

Copy link
Copy Markdown
Contributor

What was changed

Add foundational external storage types to the Ruby SDK, marked @!visibility private and unwired
from the rest of the SDK.

  • Temporalio::Converters::StorageDriver — base class users subclass to store and retrieve payloads
    in an external system, alongside StorageDriverClaim, the workflow/activity target info types, and
    the store, select and retrieve contexts.
  • Temporalio::Converters::ExternalStorage — configuration, validated at construction: at least one
    driver, unique non-empty driver names, a selector required above one driver, and a non-negative
    size threshold.
  • Temporalio::Internal::ExternalStorageReferences — the on-the-wire reference format.
  • Temporalio::Error::ExternalStorageNotConfiguredError — TMPRL1105.
  • RBS and RBI signatures for all of the above, plus unit tests and a shared in-memory fake driver.

Nothing calls any of this yet. There is no runner, no data converter integration, and no worker or
client wiring.

Why?

Allow parallel development of the external storage system in the Ruby SDK. Keeping the types private
and unwired prevents unintended use.

Notes for Reviewers

  • StorageDriver#store and #retrieve are synchronous and may block on I/O, following
    PayloadCodec. A driver that wants to work its batch concurrently should fan out with threads,
    not Fiber.schedule — the latter raises No scheduler is available! when the worker is configured
    with a payload codec thread pool rather than a fiber scheduler, so a fiber-based driver works under
    one supported worker configuration and crashes under the other.
  • StorageDriverClaim defines ==, eql? and hash over its claim data. Java and Python both give
    claims content equality, and identity comparison would make two claims describing the same stored
    payload unequal.
  • Concurrency controls for driver operations are deliberately out of scope here.

Checklist

  1. How was this tested: New unit tests

  2. Any docs updates needed? No. The types are @!visibility private and omitted from CHANGELOG.md
    until external storage is usable.

@jmaeagle99
jmaeagle99 requested a review from a team as a code owner October 6, 2026 03:42
@jmaeagle99
jmaeagle99 force-pushed the extstore-foundation branch from 74c1f87 to 8381a45 Compare October 6, 2026 04:02
@jmaeagle99 jmaeagle99 added the skip-changelog PR changes do not require changelog updates label Oct 7, 2026
Comment thread temporalio/lib/temporalio/converters/storage_driver_claim.rb Outdated
Comment thread temporalio/lib/temporalio/converters/storage_driver_retrieve_context.rb Outdated
jmaeagle99 and others added 3 commits October 9, 2026 11:16
Co-authored-by: Gregory Michael Travis <greg.m.travis@gmail.com>
…ontext.rb

Co-authored-by: Gregory Michael Travis <greg.m.travis@gmail.com>
@jmaeagle99
jmaeagle99 enabled auto-merge (squash) October 9, 2026 18:17
@jmaeagle99
jmaeagle99 merged commit 574fee1 into main Oct 9, 2026
11 checks passed
@jmaeagle99
jmaeagle99 deleted the extstore-foundation branch October 9, 2026 19:19
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