Skip to content

Add S3 Express journal storage provider#10161

Draft
ReubenBond wants to merge 2 commits into
dotnet:mainfrom
ReubenBond:rebond/s3-express-journaling
Draft

Add S3 Express journal storage provider#10161
ReubenBond wants to merge 2 commits into
dotnet:mainfrom
ReubenBond:rebond/s3-express-journaling

Conversation

@ReubenBond

@ReubenBond ReubenBond commented Jun 1, 2026

Copy link
Copy Markdown
Member

Summary

  • Add Microsoft.Orleans.Journaling.S3 with S3 Express One Zone journal storage, provider registration, options, metrics, and catalog listing support.
  • Use S3 Express WriteOffsetBytes appends by default, with an opt-in MinIO-compatible conditional rewrite append path for local emulator tests.
  • Add MinIO/Testcontainers integration coverage for append/read/replace/delete, metadata updates, catalog listing, and optimistic conflict behavior.

Validation

  • dotnet build src\AWS\Orleans.Journaling.S3\Orleans.Journaling.S3.csproj --configuration Debug
  • dotnet build test\Orleans.Journaling.Tests\Orleans.Journaling.Tests.csproj --configuration Debug --framework net8.0
  • dotnet test test\Orleans.Journaling.Tests\Orleans.Journaling.Tests.csproj --configuration Debug --framework net8.0 --no-build

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Implement an AWS S3 Express One Zone journal storage provider, catalog support, and MinIO-backed tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@ReubenBond ReubenBond force-pushed the rebond/s3-express-journaling branch from 8f517f0 to f85f6dc Compare June 1, 2026 17:38
S3-compatible stores can preserve object ETags across metadata-only rewrites, so include a provider-owned metadata version in the journal metadata ETag and use object preconditions for the copy operation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
{
if (DockerSkipReason.Value is null)
{
_container = new ContainerBuilder("minio/minio:RELEASE.2025-09-07T16-13-09Z")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

3 participants