Skip to content

HADOOP-19569. put operations from store to StoreWriter#8623

Draft
steveloughran wants to merge 1 commit into
apache:trunkfrom
steveloughran:s3/HADOOP-19569-stream-write-refactor
Draft

HADOOP-19569. put operations from store to StoreWriter#8623
steveloughran wants to merge 1 commit into
apache:trunkfrom
steveloughran:s3/HADOOP-19569-stream-write-refactor

Conversation

@steveloughran

Copy link
Copy Markdown
Contributor

All upload operations are in MultipartIO service, which has been renamed and move to package org.apache.hadoop.fs.s3a.impl.write to match.

For completeness deletion should also go into this class or an adjacent one on deletion.

Pulled out multipart IO such that
there are no back references from it to
S3AStore -the final change is to define a store
statistics class which it and other things can
use to update stats.

Executors in hadoop-common to

  • pick up shutdown of inner executor and shut themselves down.
  • semaphore executor to decrement counters in this process so that queue state is updated
  • semaphored delegating executor unit test in common This stops callers being able to submit work when the inner executor has shut down.

WriteOperationHelper

  • make all calls through its callback interface, rather than given a ref to S3AFS.
  • Move WriteOperationHelper callbacks to S3Store layer,

Multipart IO operations

  • move nearly all Multipart IO operationss out of s3afs and into a new mulitpart service interface and impl
  • Multipart service retrieved and invoked as appropriate
  • StoreImpl stores a map of ServiceName -> service. with a lookupService() method in S3AStore interface, it's possible to retrieve services through the API just by knowing their name and type
  • registering all current services this way

StoreImpl to IllegalStateException on method invocation whene the service isn't running.

Some methods are kept open as they do seem needed.

How was this patch tested?

For code changes:

  • Does the title or this PR starts with the corresponding JIRA issue id (e.g. 'HADOOP-17799. Your PR title ...')?
  • Object storage: have the integration tests been executed and the endpoint declared according to the connector-specific documentation?
  • If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under ASF 2.0?
  • If applicable, have you updated the LICENSE, LICENSE-binary, NOTICE-binary files?

AI Tooling

If an AI tool was used:

All upload operations are in MultipartIO service, which
has been renamed and move to package org.apache.hadoop.fs.s3a.impl.write
to match.

For completeness deletion should also go into this class or an adjacent one on
deletion.

Pulled out multipart IO such that
there are no back references from it to
S3AStore -the final change is to define a store
statistics class which it and other things can
use to update stats.

Executors in hadoop-common to
 - pick up shutdown of inner executor and shut themselves down.
 - semaphore executor to decrement counters in this process so that
   queue state is updated
 - semaphored delegating executor unit test in common
This stops callers being able to submit work when the inner executor has
shut down.

WriteOperationHelper
* make all calls through its callback interface, rather than given a ref to S3AFS.
* Move WriteOperationHelper callbacks to S3Store layer,

Multipart IO operations
* move nearly all Multpart IO operationss out of s3afs and into a
  new mulitpart service interface and impl
* Multipart service retrieved and invoked as appropriate
* StoreImpl stores a map of ServiceName -> service.
  with a lookupService() method in S3AStore interface, it's possible to
  retrieve services through the API just by knowing their name and type
* registering all current services this way

StoreImpl to IllegalStateException on  method invocation whene the service
isn't running.

Some methods are kept open as they do seem needed.
@steveloughran

Copy link
Copy Markdown
Contributor Author

note the lack of testing yet

@hadoop-yetus

Copy link
Copy Markdown

💔 -1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 0m 55s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 1s No case conflicting files found.
+0 🆗 codespell 0m 0s codespell was not available.
+0 🆗 detsecrets 0m 0s detect-secrets was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 17 new or modified test files.
_ trunk Compile Tests _
+0 🆗 mvndep 2m 28s Maven dependency ordering for branch
+1 💚 mvninstall 52m 26s trunk passed
+1 💚 compile 17m 36s trunk passed with JDK Ubuntu-21.0.11+10-1-24.04.2-Ubuntu
+1 💚 compile 18m 1s trunk passed with JDK Ubuntu-17.0.19+10-1-24.04.2-Ubuntu
+1 💚 checkstyle 5m 52s trunk passed
+1 💚 mvnsite 3m 14s trunk passed
+1 💚 javadoc 2m 26s trunk passed with JDK Ubuntu-21.0.11+10-1-24.04.2-Ubuntu
+1 💚 javadoc 2m 21s trunk passed with JDK Ubuntu-17.0.19+10-1-24.04.2-Ubuntu
+1 💚 spotbugs 4m 56s trunk passed
+1 💚 shadedclient 35m 43s branch has no errors when building and testing our client artifacts.
-0 ⚠️ patch 36m 23s Used diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 🆗 mvndep 0m 29s Maven dependency ordering for patch
+1 💚 mvninstall 1m 56s the patch passed
+1 💚 compile 16m 51s the patch passed with JDK Ubuntu-21.0.11+10-1-24.04.2-Ubuntu
+1 💚 javac 16m 51s the patch passed
+1 💚 compile 18m 14s the patch passed with JDK Ubuntu-17.0.19+10-1-24.04.2-Ubuntu
+1 💚 javac 18m 14s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
-0 ⚠️ checkstyle 5m 55s /results-checkstyle-root.txt root: The patch generated 2 new + 17 unchanged - 1 fixed = 19 total (was 18)
+1 💚 mvnsite 3m 14s the patch passed
-1 ❌ javadoc 0m 58s /results-javadoc-javadoc-hadoop-tools_hadoop-aws-jdkUbuntu-21.0.11+10-1-24.04.2-Ubuntu.txt hadoop-tools_hadoop-aws-jdkUbuntu-21.0.11+10-1-24.04.2-Ubuntu with JDK Ubuntu-21.0.11+10-1-24.04.2-Ubuntu generated 2 new + 929 unchanged - 0 fixed = 931 total (was 929)
-1 ❌ javadoc 1m 0s /results-javadoc-javadoc-hadoop-tools_hadoop-aws-jdkUbuntu-17.0.19+10-1-24.04.2-Ubuntu.txt hadoop-tools_hadoop-aws-jdkUbuntu-17.0.19+10-1-24.04.2-Ubuntu with JDK Ubuntu-17.0.19+10-1-24.04.2-Ubuntu generated 2 new + 851 unchanged - 0 fixed = 853 total (was 851)
+1 💚 spotbugs 5m 19s the patch passed
+1 💚 shadedclient 35m 49s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 23m 43s hadoop-common in the patch passed.
+1 💚 unit 5m 50s hadoop-aws in the patch passed.
+1 💚 asflicense 1m 15s The patch does not generate ASF License warnings.
276m 55s
Subsystem Report/Notes
Docker ClientAPI=1.55 ServerAPI=1.55 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-8623/1/artifact/out/Dockerfile
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell detsecrets
uname Linux 6ad3da588820 5.15.0-177-generic #187-Ubuntu SMP Sat Apr 11 22:54:33 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / 8a695de
Default Java Ubuntu-17.0.19+10-1-24.04.2-Ubuntu
Multi-JDK versions /usr/lib/jvm/java-21-openjdk-amd64:Ubuntu-21.0.11+10-1-24.04.2-Ubuntu /usr/lib/jvm/java-17-openjdk-amd64:Ubuntu-17.0.19+10-1-24.04.2-Ubuntu
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-8623/1/testReport/
Max. process+thread count 3138 (vs. ulimit of 10000)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-8623/1/console
versions git=2.43.0 maven=3.9.15 spotbugs=4.9.7
Powered by Apache Yetus 0.14.1 https://yetus.apache.org

This message was automatically generated.

@ajfabbri ajfabbri self-assigned this Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants