This is an automated email from the ASF dual-hosted git repository.
gavinchou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new b65f1c3291d [Refactor](Recycler) Refactor azure obj client's batch
delete function to check the delete response (#37037)
b65f1c3291d is described below
commit b65f1c3291d134bf73e7929cab001a4b796aad62
Author: AlexYue <[email protected]>
AuthorDate: Mon Jul 1 02:54:45 2024 +0800
[Refactor](Recycler) Refactor azure obj client's batch delete function to
check the delete response (#37037)
This pr use #36590's new code to refactor batch delete for Azure obj client.
---
cloud/src/recycler/azure_obj_client.cpp | 42 +++++++++++++++++++++++++++------
cloud/test/mock_accessor.cpp | 2 --
2 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/cloud/src/recycler/azure_obj_client.cpp
b/cloud/src/recycler/azure_obj_client.cpp
index 02f906f1cef..60cd79abb95 100644
--- a/cloud/src/recycler/azure_obj_client.cpp
+++ b/cloud/src/recycler/azure_obj_client.cpp
@@ -34,9 +34,12 @@
#include "common/logging.h"
#include "common/sync_point.h"
+using namespace Azure::Storage::Blobs;
+
namespace doris::cloud {
static constexpr size_t BlobBatchMaxOperations = 256;
+static constexpr char BlobNotFound[] = "BlobNotFound";
template <typename Func>
ObjectStorageResponse do_azure_client_call(Func f, std::string_view url,
std::string_view key) {
@@ -55,8 +58,7 @@ ObjectStorageResponse do_azure_client_call(Func f,
std::string_view url, std::st
class AzureListIterator final : public ObjectListIterator {
public:
-
AzureListIterator(std::shared_ptr<Azure::Storage::Blobs::BlobContainerClient>
client,
- std::string prefix)
+ AzureListIterator(std::shared_ptr<BlobContainerClient> client, std::string
prefix)
: client_(std::move(client)), req_({.Prefix = std::move(prefix)}) {
TEST_SYNC_POINT_CALLBACK("AzureListIterator", &req_);
}
@@ -116,8 +118,8 @@ public:
}
private:
- std::shared_ptr<Azure::Storage::Blobs::BlobContainerClient> client_;
- Azure::Storage::Blobs::ListBlobsOptions req_;
+ std::shared_ptr<BlobContainerClient> client_;
+ ListBlobsOptions req_;
std::vector<ObjectMeta> results_;
bool is_valid_ {true};
bool has_more_ {true};
@@ -181,14 +183,35 @@ ObjectStorageResponse
AzureObjClient::delete_objects(const std::string& bucket,
TEST_SYNC_POINT_CALLBACK("AzureObjClient::delete_objects",
&batch_size);
std::advance(chunk_end,
std::min(batch_size,
static_cast<size_t>(std::distance(begin, end))));
+
std::vector<Azure::Storage::DeferredResponse<Models::DeleteBlobResult>>
deferred_resps;
+ deferred_resps.reserve(std::distance(begin, chunk_end));
for (auto it = begin; it != chunk_end; ++it) {
- batch.DeleteBlob(*it);
+ deferred_resps.emplace_back(batch.DeleteBlob(*it));
}
auto resp = do_azure_client_call([&]() { client_->SubmitBatch(batch);
}, client_->GetUrl(),
*begin);
if (resp.ret != 0) {
return resp;
}
+ for (auto&& defer : deferred_resps) {
+ try {
+ auto r = defer.GetResponse();
+ if (!r.Value.Deleted) {
+ LOG_INFO("Azure batch delete failed, url {}",
client_->GetUrl());
+ return {-1};
+ }
+ } catch (Azure::Storage::StorageException& e) {
+ if (Azure::Core::Http::HttpStatusCode::NotFound ==
e.StatusCode &&
+ 0 == strcmp(e.ErrorCode.c_str(), BlobNotFound)) {
+ continue;
+ }
+ auto msg = fmt::format(
+ "Azure request failed because {}, http code {},
request id {}, url {}",
+ e.Message, static_cast<int>(e.StatusCode),
e.RequestId, client_->GetUrl());
+ LOG_WARNING(msg);
+ return {-1, std::move(msg)};
+ }
+ }
begin = chunk_end;
}
@@ -197,8 +220,13 @@ ObjectStorageResponse AzureObjClient::delete_objects(const
std::string& bucket,
}
ObjectStorageResponse AzureObjClient::delete_object(ObjectStoragePathRef path)
{
- return do_azure_client_call([&]() { client_->DeleteBlob(path.key); },
client_->GetUrl(),
- path.key);
+ return do_azure_client_call(
+ [&]() {
+ if (auto r = client_->DeleteBlob(path.key); !r.Value.Deleted) {
+ throw std::runtime_error("Delete azure blob failed");
+ }
+ },
+ client_->GetUrl(), path.key);
}
ObjectStorageResponse
AzureObjClient::delete_objects_recursively(ObjectStoragePathRef path,
diff --git a/cloud/test/mock_accessor.cpp b/cloud/test/mock_accessor.cpp
index 9746e64fd30..77a8afe24b1 100644
--- a/cloud/test/mock_accessor.cpp
+++ b/cloud/test/mock_accessor.cpp
@@ -18,8 +18,6 @@
#include "mock_accessor.h"
-#include <bits/ranges_algo.h>
-#include <bits/ranges_util.h>
#include <glog/logging.h>
#include <iterator>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]