diff --git a/tiledb/sm/filesystem/gcs.cc b/tiledb/sm/filesystem/gcs.cc index fb2e05e3720..ca45a1ba018 100644 --- a/tiledb/sm/filesystem/gcs.cc +++ b/tiledb/sm/filesystem/gcs.cc @@ -46,6 +46,7 @@ #include "tiledb/common/unique_rwlock.h" #include "tiledb/sm/filesystem/gcs.h" #include "tiledb/sm/global_state/global_state.h" +#include "tiledb/sm/misc/parallel_functions.h" #include "tiledb/sm/misc/tdb_math.h" #include "tiledb/sm/misc/utils.h" @@ -351,9 +352,11 @@ Status GCS::remove_dir(const URI& uri) const { std::vector paths; RETURN_NOT_OK(ls(uri, &paths, "")); - for (const auto& path : paths) { - RETURN_NOT_OK(remove_object(URI(path))); - } + auto status = parallel_for(thread_pool_, 0, paths.size(), [&](size_t i) { + RETURN_NOT_OK(remove_object(URI(paths[i]))); + return Status::Ok(); + }); + RETURN_NOT_OK(status); return Status::Ok(); } diff --git a/tiledb/sm/filesystem/s3.cc b/tiledb/sm/filesystem/s3.cc index cbedcc3f9f0..01fc84c25c7 100644 --- a/tiledb/sm/filesystem/s3.cc +++ b/tiledb/sm/filesystem/s3.cc @@ -935,10 +935,13 @@ Status S3::remove_dir(const URI& uri) const { RETURN_NOT_OK(init_client()); std::vector paths; - auto uri_dir = uri.add_trailing_slash(); - RETURN_NOT_OK(ls(uri_dir, &paths, "")); - for (const auto& p : paths) - RETURN_NOT_OK(remove_object(URI(p))); + RETURN_NOT_OK(ls(uri, &paths, "")); + auto status = parallel_for(vfs_thread_pool_, 0, paths.size(), [&](size_t i) { + RETURN_NOT_OK(remove_object(URI(paths[i]))); + return Status::Ok(); + }); + RETURN_NOT_OK(status); + return Status::Ok(); }