Conversation
|
💔 -1 overall
This message was automatically generated. |
|
💔 -1 overall
This message was automatically generated. |
|
🎊 +1 overall
This message was automatically generated. |
|
Thanks for looking into this feature! Let's merge my PR into yours: deepujain#1 |
|
@EnricoMi Sure. Once you’re done, please let me know if anything is pending from my side. I’m not familiar with the process or timeline yet, as this is my first time contributing to the Hadoop projects. I currently have a few pending PRs awaiting merge. |
|
My JIRA id is deepujain |
|
Great! If you are happy with my proposed changes to your PR, merge deepujain#1. |
|
Merged your PR, thanks for the docs and rephrase. @EnricoMi |
|
🎊 +1 overall
This message was automatically generated. |
steveloughran
left a comment
There was a problem hiding this comment.
all good, one minor checkstyle change and I'm happy.
Presumably you've tested this against a store with the feature?
|
Checkstyle fix is in (split the long LOG.debug line in DeleteOperation.java). Yes : tested against a VAST endpoint with the feature; enabled the option and confirmed recursive delete uses a single delete request. Thanks for the review. |
|
🎊 +1 overall
This message was automatically generated. |
|
JIRA id is deepujain |
|
@deepujain how did you test this? Did you run Did you
With 1., obviously, assertions in tests With 1. and 2., non-delete requests fail for me with This is against VAST 5.4.3.1. |
|
Adding this to shows request headers: |
|
Maybe we also have to adjust the instrumentation: EnricoMi#2 At least we should make this debug log message correct when |
9f2d9dd to
27eacbb
Compare
|
Addressed the current review feedback and force-pushed the branch. The optimized non-empty-directory path now sends |
|
🎊 +1 overall
This message was automatically generated. |
27eacbb to
1426ae3
Compare
|
Addressed the new review point and force-pushed. This revision removes the hardcoded proprietary delete header from S3A, adds generic request-type custom header support (fs.s3a.client.{s3,sts}.custom.headers.request.REQUEST), and updates the non-empty-directory delete docs to use request-scoped configuration when an endpoint needs extra headers. Local validation passed with JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/bin:$PATH /opt/homebrew/bin/mvn -Dmaven.repo.local=/tmp/codex-m2 test -pl hadoop-tools/hadoop-aws -am -Dtest=TestAwsClientConfig,TestRequestFactory -DskipTests=false (20 tests, 0 failures). |
|
💔 -1 overall
This message was automatically generated. |
1426ae3 to
b530128
Compare
|
💔 -1 overall
This message was automatically generated. |
b530128 to
619773b
Compare
|
Follow-up push for the latest javadoc artifact: the remaining new warning was on CUSTOM_REQUEST_HEADERS_S3_PREFIX because the added @value tag is not valid on that derived String constant. I removed that tag and force-pushed the updated single commit. The exact module-level javadoc command is still not reproducible locally here because standalone hadoop-aws resolution needs snapshot artifacts that are not available from apache.snapshots in this environment, but the targeted AWS tests from the earlier push still passed locally: TestAwsClientConfig and TestRequestFactory (20 tests, 0 failures). |
|
🎊 +1 overall
This message was automatically generated. |
|
This PR is currently doing two things: skip recursive file deletion (configurable) and allow for custom per-request headers. This should be split and reviewed in two separate PRs, this one and #8417. |
|
Rebased this onto current apache/trunk, squashed it back to a single commit, and split out the generic per-request-header work so this PR now only covers the non-empty-directory delete behavior. Local validation passed with |
619773b to
fed106d
Compare
|
🎊 +1 overall
This message was automatically generated. |
|
The scope split is now done and CI is green on the current head. @EnricoMi, when you have a moment, could you please take another look? Happy to make any follow-up changes. |
|
The scope split is done and CI is still green on the current head. @EnricoMi, when you have a moment, could you please take another look? Happy to make any follow-up changes. |
|
The scope split is done, CI is still green on the current head, and I don’t believe anything else is pending from my side right now. @EnricoMi, when you have a moment, could you please take another look? Happy to make any follow-up changes. |
|
The scope split is done, CI is still green on the current head, and I still do not believe anything else is pending from my side as of July 20, 2026. @EnricoMi, when you have a moment, could you please take another look? Happy to make any follow-up changes. |
|
No code changes here. The scope split is done, this branch still only covers the non-empty-directory delete behavior, and CI is green on the current head as of July 26, 2026. @EnricoMi, when you have a moment, could you please take another look and let me know if anything is still pending from my side? |
|
The current branch now only covers the non-empty-directory delete behavior; the generic header work stays in #8417, and the earlier test-structure/config follow-ups are addressed in the current diff. CI is green on the current head. @EnricoMi @steveloughran, when you have a moment, could you please take another look and let me know if anything is still pending from my side? |
|
Following up on the August 15 question: the current branch remains limited to the non-empty-directory delete behavior, while the generic header work is in #8417. @EnricoMi, if an earlier review item still needs a change, please let me know; otherwise, could you re-review the current diff when convenient? |
fed106d to
dc2e4f0
Compare
|
ℹ️ Cloud-AWS manual trigger instructions: S3A tests must be manually triggered for fork pull requests. A maintainer should:
fork head: |
|
🎊 +1 overall
This message was automatically generated. |
|
Hi @steveloughran @ZanderXu @slfan1989, HADOOP-19801 adds an opt-in flag to skip recursive deletes on non-empty S3A dirs. Open since March, rebased on trunk with contract tests. Would love a sanity check on the S3A semantics before another month goes by. |
|
Split the long javadoc @PARAM line and the deleteDirectoryTree debug log at the comma per checkstyle. Capability tests already extend AbstractS3ATestBase (not AbstractContractDeleteTest) and use an isolated Configuration with removeBaseAndBucketOverrides for the option key. Ready for re-review. |
|
🎊 +1 overall
This message was automatically generated. |
710f3b0 to
cd153a7
Compare
|
🎊 +1 overall
This message was automatically generated. |
cd153a7 to
9986462
Compare
|
Rebased cleanly onto current trunk at |
|
🎊 +1 overall
This message was automatically generated. |
Summary
Adds
fs.s3a.delete.non-empty-directory.enabledso S3A can use a single delete request for a non-empty directory key instead of recursively listing and deleting child objects first. This PR is now scoped only to that delete behavior for S3-compatible endpoints that support it.Change
fs.s3a.delete.non-empty-directory.enabledand its default.hasPathCapability().Evidence it works
JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home ./mvnw -Dmaven.repo.local=/tmp/codex-m2 test -pl hadoop-tools/hadoop-aws -am -Dtest=TestAwsClientConfig -DskipTests=falseTestAwsClientConfig, 9 tests, 0 failures).JIRA
Fixes HADOOP-19801