diff options
author | hor911 <[email protected]> | 2023-03-17 19:56:13 +0300 |
---|---|---|
committer | hor911 <[email protected]> | 2023-03-17 19:56:13 +0300 |
commit | 66e822ece4afb41d7a4bb9fea312f4665bdd2b22 (patch) | |
tree | 7300129978a2fc7fdd8be0c148869a90f3810439 | |
parent | c3bc8550ac88edbc52a40da723595ced3ad0c7c7 (diff) |
HTTP DELETE support
3 files changed, 30 insertions, 6 deletions
diff --git a/ydb/library/yql/providers/common/http_gateway/mock/yql_http_mock_gateway.cpp b/ydb/library/yql/providers/common/http_gateway/mock/yql_http_mock_gateway.cpp index 3b5acce0ab0..1c2fe083afd 100644 --- a/ydb/library/yql/providers/common/http_gateway/mock/yql_http_mock_gateway.cpp +++ b/ydb/library/yql/providers/common/http_gateway/mock/yql_http_mock_gateway.cpp @@ -45,6 +45,8 @@ public: void Upload(TString, THeaders, TString, TOnResult, bool, IRetryPolicy<long>::TPtr) {} + void Delete(TString, THeaders, TOnResult, IRetryPolicy<long>::TPtr) {} + void Download( TString url, THeaders headers, diff --git a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp index bb651a292b7..26c76850471 100644 --- a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp +++ b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp @@ -72,15 +72,20 @@ struct TCurlInitConfig { ui64 BufferSize = CURL_MAX_WRITE_SIZE; }; +// some WinNT macros clash +#if defined(DELETE) +#undef DELETE +#endif + class TEasyCurl { public: using TPtr = std::shared_ptr<TEasyCurl>; - enum class EMethod { GET, POST, - PUT + PUT, + DELETE }; TEasyCurl(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter, const ::NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const ::NMonitoring::TDynamicCounters::TCounterPtr& uploadedBytes, TString url, IHTTPGateway::THeaders headers, EMethod method, size_t offset = 0ULL, size_t sizeLimit = 0, size_t bodySize = 0, const TCurlInitConfig& config = TCurlInitConfig(), TDNSGateway<>::TDNSConstCurlListPtr dnsCache = nullptr) @@ -112,6 +117,9 @@ public: case EMethod::PUT: curl_easy_setopt(Handle, CURLOPT_UPLOAD, 1L); break; + case EMethod::DELETE: + curl_easy_setopt(Handle, CURLOPT_CUSTOMREQUEST, "DELETE"); + break; } // does nothing if CURLOPT_VERBOSE is not set to 1 @@ -741,6 +749,15 @@ private: Wakeup(0U); } + void Delete(TString url, THeaders headers, TOnResult callback, IRetryPolicy<long>::TPtr retryPolicy) final { + Rps->Inc(); + + const std::unique_lock lock(Sync); + auto easy = TEasyCurlBuffer::Make(InFlight, DownloadedBytes, UploadedBytes, std::move(url), TEasyCurl::EMethod::DELETE, 0, std::move(headers), 0U, 0U, std::move(callback), retryPolicy ? retryPolicy->CreateRetryState() : nullptr, InitConfig, DnsGateway.GetDNSCurlList()); + Await.emplace(std::move(easy)); + Wakeup(0U); + } + void Download( TString url, THeaders headers, @@ -757,7 +774,7 @@ private: return; } const std::unique_lock lock(Sync); - auto easy = TEasyCurlBuffer::Make(InFlight, DownloadedBytes, UploadedBytes, std::move(url), TEasyCurl::EMethod::GET, std::move(data), std::move(headers), offset, sizeLimit, std::move(callback), retryPolicy ? retryPolicy->CreateRetryState() : nullptr, InitConfig, DnsGateway.GetDNSCurlList()); + auto easy = TEasyCurlBuffer::Make(InFlight, DownloadedBytes, UploadedBytes, std::move(url), TEasyCurl::EMethod::GET, std::move(data), std::move(headers), offset, sizeLimit, std::move(callback), retryPolicy ? retryPolicy->CreateRetryState() : nullptr, InitConfig, DnsGateway.GetDNSCurlList()); Await.emplace(std::move(easy)); Wakeup(sizeLimit); } diff --git a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h index 0bc2bf8c5e7..c17b7a2433c 100644 --- a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h +++ b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h @@ -71,7 +71,13 @@ public: TString body, TOnResult callback, bool put = false, - IRetryPolicy</*http response code*/long>::TPtr RetryPolicy = IRetryPolicy<long>::GetNoRetryPolicy()) = 0; + IRetryPolicy</*http response code*/long>::TPtr retryPolicy = IRetryPolicy<long>::GetNoRetryPolicy()) = 0; + + virtual void Delete( + TString url, + THeaders headers, + TOnResult callback, + IRetryPolicy</*http response code*/long>::TPtr retryPolicy = IRetryPolicy<long>::GetNoRetryPolicy()) = 0; virtual void Download( TString url, @@ -80,8 +86,7 @@ public: std::size_t sizeLimit, TOnResult callback, TString data = {}, - IRetryPolicy</*http response code*/long>::TPtr RetryPolicy = IRetryPolicy<long>::GetNoRetryPolicy() - ) = 0; + IRetryPolicy</*http response code*/long>::TPtr retryPolicy = IRetryPolicy<long>::GetNoRetryPolicy()) = 0; class TCountedContent : public TContentBase { public: |