File tree Expand file tree Collapse file tree 6 files changed +22
-1
lines changed
include/userver/clients/http Expand file tree Collapse file tree 6 files changed +22
-1
lines changed Original file line number Diff line number Diff line change 1010#include < userver/clients/http/client.hpp>
1111#include < userver/clients/http/plugin.hpp>
1212#include < userver/utils/impl/internal_tag.hpp>
13+ #include < userver/utils/impl/wait_token_storage.hpp>
1314
1415USERVER_NAMESPACE_BEGIN
1516
@@ -46,6 +47,7 @@ class ClientWithPlugins final : public Client {
4647private:
4748 std::shared_ptr<ClientCore> client_core_;
4849 std::vector<utils::NotNull<clients::http::Plugin*>> plugins_;
50+ utils::impl::WaitTokenStorage wts_;
4951};
5052
5153} // namespace clients::http
Original file line number Diff line number Diff line change 1515#include < userver/crypto/certificate.hpp>
1616#include < userver/crypto/private_key.hpp>
1717#include < userver/http/http_version.hpp>
18+ #include < userver/utils/impl/internal_tag.hpp>
1819#include < userver/utils/impl/source_location.hpp>
1920#include < userver/utils/not_null.hpp>
2021
@@ -24,6 +25,10 @@ namespace tracing {
2425class TracingManagerBase ;
2526} // namespace tracing
2627
28+ namespace utils ::impl {
29+ class WaitTokenStorageLock ;
30+ } // namespace utils::impl
31+
2732// / HTTP client helpers
2833namespace clients ::http {
2934
@@ -350,6 +355,8 @@ class Request final {
350355
351356 // Set deadline propagation settings. For internal use only.
352357 void SetDeadlinePropagationConfig (const DeadlinePropagationConfig& deadline_propagation_config) &;
358+
359+ void SetWaitToken (utils::impl::InternalTag, utils::impl::WaitTokenStorageLock&&);
353360 // / @endcond
354361
355362 // / Disable auto-decoding of received replies. Useful to proxy replies 'as is'.
Original file line number Diff line number Diff line change @@ -13,11 +13,12 @@ ClientWithPlugins::ClientWithPlugins(
1313)
1414 : client_core_(std::move(client_core)), plugins_(std::move(plugins)) {}
1515
16- ClientWithPlugins::~ClientWithPlugins () = default ;
16+ ClientWithPlugins::~ClientWithPlugins () { wts_. WaitForAllTokens (); }
1717
1818Request ClientWithPlugins::CreateRequest () {
1919 auto request = client_core_->CreateRequest ();
2020 request.SetPluginsList (plugins_);
21+ request.SetWaitToken (utils::impl::InternalTag{}, wts_.GetToken ());
2122 return request;
2223}
2324
Original file line number Diff line number Diff line change @@ -558,6 +558,10 @@ const std::string& Request::GetData() const& { return pimpl_->easy().get_post_da
558558
559559std::string Request::ExtractData () { return pimpl_->easy ().extract_post_data (); }
560560
561+ void Request::SetWaitToken (utils::impl::InternalTag, utils::impl::WaitTokenStorageLock&& wait_token) {
562+ pimpl_->SetWaitToken (std::move (wait_token));
563+ }
564+
561565} // namespace clients::http
562566
563567USERVER_NAMESPACE_END
Original file line number Diff line number Diff line change @@ -1096,6 +1096,8 @@ void RequestState::SetTracingManager(const tracing::TracingManagerBase& m) { tra
10961096
10971097PluginRequest RequestState::GetEditableRequestInstance () { return PluginRequest (*this ); }
10981098
1099+ void RequestState::SetWaitToken (utils::impl::WaitTokenStorageLock&& wait_token) { wait_token_ = std::move (wait_token); }
1100+
10991101} // namespace clients::http
11001102
11011103USERVER_NAMESPACE_END
Original file line number Diff line number Diff line change 2525#include < userver/tracing/manager.hpp>
2626#include < userver/tracing/span.hpp>
2727#include < userver/tracing/tags.hpp>
28+ #include < userver/utils/impl/wait_token_storage.hpp>
2829#include < userver/utils/not_null.hpp>
2930#include < userver/utils/zstring_view.hpp>
3031
@@ -145,6 +146,8 @@ class RequestState : public std::enable_shared_from_this<RequestState> {
145146
146147 void SetTracingManager (const tracing::TracingManagerBase&);
147148
149+ void SetWaitToken (utils::impl::WaitTokenStorageLock&&);
150+
148151 // / true if proxy was set using proxy method
149152 bool IsProxySet () const ;
150153
@@ -264,6 +267,8 @@ class RequestState : public std::enable_shared_from_this<RequestState> {
264267 };
265268
266269 std::variant<FullBufferedData, StreamData> data_;
270+
271+ utils::impl::WaitTokenStorageLock wait_token_;
267272};
268273
269274} // namespace clients::http
You can’t perform that action at this time.
0 commit comments