Skip to content

Conversation

@feeblefakie
Copy link
Contributor

This is an automated backport of the following:

Please merge this PR after all checks have passed.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @feeblefakie, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request integrates Amazon S3 as a new object storage option, expanding the system's compatibility with cloud storage providers. It involves adding S3-specific components, adapting the existing object storage interfaces and utilities for multi-storage support, and refining error handling and configuration mechanisms to ensure robust and flexible operation across different object storage backends.

Highlights

  • S3 Support: Introduced comprehensive support for Amazon S3 as an object storage backend, including new configuration classes, a dedicated S3 wrapper, and integration into the existing object storage framework.
  • Dependency Updates: Added software.amazon.awssdk:s3 and software.amazon.awssdk:aws-crt-client dependencies to enable S3 client functionality.
  • Refactored Object Storage Configuration: Modified ObjectStorageConfig and BlobStorageConfig to use Optional for parallel upload parameters, allowing the underlying SDKs to manage default values. The getEndpoint() method was removed from the generic ObjectStorageConfig interface.
  • Enhanced Error Handling: Added a new ConflictOccurredException and updated MutateStatementHandler to catch this exception, along with PreconditionFailedException, mapping them to RetriableExecutionException for more granular error management.
  • Improved Test Infrastructure: Updated integration tests to dynamically configure parallel upload settings based on the storage type (Blob Storage or S3) and added new test cases specifically for S3 functionality and configuration.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/object-storage-adapter-check.yaml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces support for Amazon S3 as a backend for the object storage component. The changes are comprehensive, including the addition of S3-specific configuration and wrapper classes, updates to factory classes, and modifications to integration tests to accommodate S3. The implementation is well-structured. I have identified a potential issue in an integration test related to large object uploads and a minor refactoring opportunity in the exception handling logic of the new S3Wrapper class. Overall, this is a solid contribution to extend the object storage capabilities.

@KodaiD KodaiD requested a review from Copilot November 17, 2025 05:23
Copilot finished reviewing on behalf of KodaiD November 17, 2025 05:25
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR backports S3 support for ScalarDB, adding the ability to use Amazon S3 as an object storage backend alongside the existing Azure Blob Storage support. This is an automated backport from the original PR #3141.

Key Changes:

  • Added S3 storage adapter implementation with configuration, wrapper, provider, and error handling classes
  • Modified object storage exception hierarchy to require a cause parameter and added ConflictOccurredException
  • Updated BlobStorageConfig to make performance-related configuration options optional and return Optional values
  • Added comprehensive unit and integration tests for S3 support

Reviewed Changes

Copilot reviewed 27 out of 27 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
S3Wrapper.java Main S3 wrapper implementation using AWS SDK S3AsyncClient with async operations
S3Config.java Configuration class for S3 storage connection and performance settings
S3Provider.java Provider implementation to register S3 as a storage type
S3ErrorCode.java Enum mapping HTTP status codes to S3 error conditions
S3WrapperTest.java Comprehensive unit tests for S3Wrapper functionality
S3ConfigTest.java Unit tests for S3Config validation and property loading
BlobStorageConfig.java Updated to make performance options optional, consistent with S3 implementation
BlobStorageWrapper.java Updated to handle optional performance configuration values
ObjectStorageWrapperException.java Removed no-cause constructor to enforce proper error context
ConflictOccurredException.java New exception type for conflict errors (409 status)
MutateStatementHandler.java Updated to catch ConflictOccurredException as retriable error
ObjectStorageEnv.java Added S3 configuration support to integration test environment
object-storage-adapter-check.yaml New GitHub Actions workflow for S3 integration testing
core/build.gradle Added AWS SDK S3 and CRT client dependencies

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@KodaiD KodaiD merged commit 60e08c0 into 3 Nov 17, 2025
78 checks passed
@KodaiD KodaiD deleted the 3-pull-3141 branch November 17, 2025 07:03
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.

2 participants