Skip to content

Added VolumeManager.deleteBulk method to use FileSystem.createBulkDelete#6443

Open
dlmarion wants to merge 2 commits into
apache:mainfrom
dlmarion:5131-bulk-delete
Open

Added VolumeManager.deleteBulk method to use FileSystem.createBulkDelete#6443
dlmarion wants to merge 2 commits into
apache:mainfrom
dlmarion:5131-bulk-delete

Conversation

@dlmarion

Copy link
Copy Markdown
Contributor

Added method to VolumeManager that accepts a collection of Paths to delete. If the underlying FileSystem supports bulk deletion, then that API method is called. Otherwise the Paths are deleted using an ExecutorService.

Reviewed the existing code that used the other delete methods in the VolumeManager. Only two places seemed like candidates for using the new deleteBulk method. The other locations either only deleted one file aperiodically, or deleted many files but using some complex logic. The former didn't make sense to modify and the latter could potentially be modified later with some refactoring.

Closes #5131

Added method to VolumeManager that accepts a collection of Paths
to delete. If the underlying FileSystem supports bulk deletion,
then that API method is called. Otherwise the Paths are deleted
using an ExecutorService.

Reviewed the existing code that used the other delete methods in
the VolumeManager. Only two places seemed like candidates for using
the new deleteBulk method. The other locations either only deleted
one file aperiodically, or deleted many files but using some complex
logic. The former didn't make sense to modify and the latter could
potentially be modified later with some refactoring.

Closes apache#5131
@dlmarion dlmarion added this to the 4.0.0 milestone Jun 23, 2026
@dlmarion dlmarion self-assigned this Jun 23, 2026
// The S3A FileSystem implementation has a default of 250 and
// is configured by the property `fs.s3a.bulk.delete.page.size`.
if (bulk.pageSize() > 1) {
this.bulkDeleteFileSystems.put(fs, v);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm not sure I understand why this is a map of FileSystem to Volume. Don't you just want a list of volumes with bulk delete capability? Multiple volumes could use the same FileSystem, so each FileSystem in this map could map to more than one Volume. If you're pulling the values out of this map, it could be incomplete.

Instead, each Volume object should have its own flag to indicate whether or not it supports bulk delete.


for (Path p : paths) {
FileSystem fs = getFileSystemByPath(p);
Volume v = this.bulkDeleteFileSystems.get(fs);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is a bug. Just because there is an entry here by FileSystem, it doesn't mean it's retrieving the correct Volume. Multiple volumes can use the same FileSystem because a Volume is a FileSystem and base path.

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.

FileSystem.createBulkDelete introduced in Hadoop 3.4.1

2 participants