65class ClientCore
final :
public Client {
69 ClientCore(utils::
impl::InternalTag, ClientSettings settings,
engine::TaskProcessor& fs_task_processor);
72 ~ClientCore()
override;
84 void SetMultiplexingEnabled(
bool enabled);
87 void SetMaxHostConnections(size_t max_host_connections);
90 PoolStatistics GetPoolStatistics()
const;
94 void SetDestinationMetricsAutoMaxSize(size_t max_size);
97 const http::DestinationStatistics& GetDestinationStatistics()
const;
100 void SetTestsuiteConfig(TestsuiteConfig&& config);
103 void SetAllowedUrlsExtra(std::vector<std::string>&& urls);
106 void SetConfig(
const impl::Config&);
109 void ResetUserAgent(std::optional<std::string> user_agent = std::nullopt);
112 void SetDnsResolver(clients::
dns::
Resolver* resolver);
115 std::size_t GetActiveRequestCountDebug()
const;
121 InstanceStatistics GetMultiStatistics(size_t n)
const;
123 size_t FindMultiIndex(
const curl::multi*)
const;
127 friend class impl::EasyWrapper;
128 void IncPending()
noexcept { ++pending_tasks_; }
129 void DecPending()
noexcept { --pending_tasks_; }
130 void PushIdleEasy(std::shared_ptr<curl::easy>&& easy)
noexcept;
132 std::shared_ptr<curl::easy> TryDequeueIdle()
noexcept;
134 std::atomic<std::size_t> pending_tasks_{0};
137 CancellationPolicy cancellation_policy_;
139 std::shared_ptr<DestinationStatistics> destination_statistics_;
140 std::unique_ptr<
engine::ev::ThreadPool> thread_pool_;
141 std::vector<Statistics> statistics_;
142 std::vector<std::unique_ptr<curl::multi>> multis_;
144 static constexpr size_t kIdleQueueSize = 616;
145 static constexpr size_t kIdleQueueAlignment = 8;
146 using IdleQueueTraits = moodycamel::ConcurrentQueueDefaultTraits;
147 using IdleQueueValue = std::shared_ptr<curl::easy>;
148 using IdleQueue = moodycamel::ConcurrentQueue<IdleQueueValue, IdleQueueTraits>;
149 utils::FastPimpl<IdleQueue, kIdleQueueSize, kIdleQueueAlignment> idle_queue_;
151 engine::TaskProcessor& fs_task_processor_;
152 std::optional<std::string> user_agent_;
155 utils::PeriodicTask easy_reinit_task_;
158 std::shared_ptr<
const TestsuiteConfig> testsuite_config_;
159 rcu::Variable<std::vector<std::string>> allowed_urls_extra_;
161 std::shared_ptr<curl::ConnectRateLimiter> connect_rate_limiter_;
167void DumpMetric(utils::statistics::Writer& writer,
const DestinationStatistics& stats);