summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhor911 <[email protected]>2023-03-17 19:56:13 +0300
committerhor911 <[email protected]>2023-03-17 19:56:13 +0300
commit66e822ece4afb41d7a4bb9fea312f4665bdd2b22 (patch)
tree7300129978a2fc7fdd8be0c148869a90f3810439
parentc3bc8550ac88edbc52a40da723595ced3ad0c7c7 (diff)
HTTP DELETE support
-rw-r--r--ydb/library/yql/providers/common/http_gateway/mock/yql_http_mock_gateway.cpp2
-rw-r--r--ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp23
-rw-r--r--ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h11
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: