Skip to content

Conversation

@shubalex
Copy link

Summary

NIFI-14384 Adds Force Path Style support to S3 Bundle Persistence Provider

The implementation adds support for Force Path Style addressing, enabling compatibility with S3-compatible object storage systems like MinIO, Ceph, and other non-AWS implementations. The property defaults to false to maintain backward compatibility with AWS S3.

The implementation includes:

  • New FORCE_PATH_STYLE property with proper default handling
  • Environment variable NIFI_REGISTRY_S3_FORCE_PATH_STYLE support
  • Comprehensive integration tests with MinIO deployment instructions
  • Updated documentation for all configuration properties

The changes are backward compatible and don't affect existing AWS S3 deployments.

Tracking

Please complete the following tracking steps prior to pull request creation.

Issue Tracking

Pull Request Tracking

  • Pull Request title starts with Apache NiFi Jira issue number, such as NIFI-14384
  • Pull Request commit message starts with Apache NiFi Jira issue number, as such NIFI-14384

Pull Request Formatting

  • Pull Request based on current revision of the main branch
  • Pull Request refers to a feature branch with one commit containing changes

Verification

Please indicate the verification steps performed prior to pull request creation.

Build

  • Build completed using ./mvnw clean install -P contrib-check
    • JDK 21
    • JDK 25

Licensing

  • New dependencies are compatible with the Apache License 2.0 according to the License Policy
  • New dependencies are documented in applicable LICENSE and NOTICE files

Documentation

  • Documentation formatting appears as expected in rendered files

…vider

- Added FORCE_PATH_STYLE configuration property with default false
- Enhanced S3BundlePersistenceProvider to support path-style URLs for S3-compatible storage
- Added comprehensive integration tests with MinIO support
- Updated documentation with setup instructions and environment variables

The implementation adds support for Force Path Style addressing, enabling compatibility with S3-compatible object storage systems like MinIO, Ceph, and other non-AWS implementations. The property defaults to false to maintain backward compatibility with AWS S3.

The implementation includes:
- New FORCE_PATH_STYLE property with proper default handling
- Environment variable NIFI_REGISTRY_S3_FORCE_PATH_STYLE support
- Comprehensive integration tests with MinIO deployment instructions
- Updated documentation for all configuration properties

The changes are backward compatible and don't affect existing AWS S3 deployments.
@shubalex shubalex marked this pull request as draft September 21, 2025 17:12
Copy link
Contributor

@exceptionfactory exceptionfactory left a comment

Choose a reason for hiding this comment

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

Thanks for proposing this improvement @shubalex. The general change looks straightforward, I noted one implementation concern on the integration test, but otherwise this looks good.

}
}

private String getKeyViaReflection(BundleVersionCoordinate coordinate) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Using reflection and overriding visibility is generally poor practice for tests, as it makes the test more brittle, and tightens the coupling between the test and the implementation class. I recommend removing this method and either simplifying the test method or evaluating other available output from public methods.

Copy link
Contributor

@exceptionfactory exceptionfactory left a comment

Choose a reason for hiding this comment

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

@shubalex Any updates on this? I would be for moving this forward without introducing the complex changes to the integration test.

@shubalex
Copy link
Author

@exceptionfactory Hello! Thank you for your feedback. I can fix the tests within a few days. Alternatively, you can accept the main functionality, and then I can fix the tests with a separate MR, if it's possible. What would be the best approach?

@exceptionfactory
Copy link
Contributor

@exceptionfactory Hello! Thank you for your feedback. I can fix the tests within a few days. Alternatively, you can accept the main functionality, and then I can fix the tests with a separate MR, if it's possible. What would be the best approach?

Thanks for the reply @shubalex. Given the narrow and optional nature of the new configuration property, I'm open to removing the test from this pull request, and considering the test in a separate pull request.

@shubalex shubalex marked this pull request as ready for review October 27, 2025 18:34
@shubalex
Copy link
Author

Great! Then I'll be back in a few days with the tests.

@exceptionfactory
Copy link
Contributor

Great! Then I'll be back in a few days with the tests.

Thanks @shubalex. Just to clarify, are you planning to revert the updates to the integration test, and follow up on that separately? I'm happy to merge the PR if you can remove the integration test for now. If you mean to follow up on this PR with test changes, I can wait for that, either way.

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