diff --git a/ext/include/opentelemetry/ext/http/client/curl/http_client_curl.h b/ext/include/opentelemetry/ext/http/client/curl/http_client_curl.h index 728558691c..1d1355545d 100644 --- a/ext/include/opentelemetry/ext/http/client/curl/http_client_curl.h +++ b/ext/include/opentelemetry/ext/http/client/curl/http_client_curl.h @@ -361,7 +361,7 @@ class HttpClient : public opentelemetry::ext::http::client::HttpClient std::unordered_map> pending_to_abort_sessions_; std::unordered_map pending_to_remove_session_handles_; std::list> pending_to_remove_sessions_; - std::deque pending_to_retry_sessions_; + std::deque> pending_to_retry_sessions_; std::mutex background_thread_m_; std::unique_ptr background_thread_; diff --git a/ext/src/http/client/curl/http_client_curl.cc b/ext/src/http/client/curl/http_client_curl.cc index 5dddd8b933..43e1022d2b 100644 --- a/ext/src/http/client/curl/http_client_curl.cc +++ b/ext/src/http/client/curl/http_client_curl.cc @@ -486,7 +486,7 @@ bool HttpClient::MaybeSpawnBackgroundThread() if (operation->IsRetryable()) { - self->pending_to_retry_sessions_.push_front(session); + self->pending_to_retry_sessions_.push_front(hold_session); } } } @@ -790,7 +790,8 @@ bool HttpClient::doRemoveSessions() bool HttpClient::doRetrySessions() { - auto has_data = false; + const auto now = std::chrono::system_clock::now(); + auto has_data = false; // Assumptions: // - This is a FIFO list so older sessions, pushed at the front, always end up at the tail @@ -807,7 +808,7 @@ bool HttpClient::doRetrySessions() { retry_it = decltype(retry_it){pending_to_retry_sessions_.erase(std::next(retry_it).base())}; } - else if (operation->NextRetryTime() < std::chrono::system_clock::now()) + else if (operation->NextRetryTime() < now) { auto easy_handle = operation->GetCurlEasyHandle(); curl_multi_remove_handle(multi_handle_, easy_handle); diff --git a/ext/src/http/client/curl/http_operation_curl.cc b/ext/src/http/client/curl/http_operation_curl.cc index 3c8c559e67..6e57259ea0 100644 --- a/ext/src/http/client/curl/http_operation_curl.cc +++ b/ext/src/http/client/curl/http_operation_curl.cc @@ -289,7 +289,12 @@ HttpOperation::HttpOperation(opentelemetry::ext::http::client::Method method, compression_(compression), is_log_enabled_(is_log_enabled), retry_policy_(retry_policy), - retry_attempts_(0), + retry_attempts_((retry_policy.max_attempts > 0U && + retry_policy.initial_backoff > SecondsDecimal::zero() && + retry_policy.max_backoff > SecondsDecimal::zero() && + retry_policy.backoff_multiplier > 0.0f) + ? 0 + : retry_policy.max_attempts), response_code_(0) { /* get a curl handle */