From 48518fc07694d79b6c59887155707d77491a12b7 Mon Sep 17 00:00:00 2001 From: Simon Quigley Date: Mon, 16 Dec 2024 19:57:49 -0600 Subject: [PATCH] Add retry support for failed LP requests --- src/launchpad.cpp | 71 ++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/launchpad.cpp b/src/launchpad.cpp index 33e9857..220fabf 100644 --- a/src/launchpad.cpp +++ b/src/launchpad.cpp @@ -257,26 +257,33 @@ std::optional launchpad::api_get(const std::string& endpoint, const curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); - CURLcode res = curl_easy_perform(curl); + bool tries = 0; long http_code = 0; - if (res != CURLE_OK) { - std::cerr << "CURL GET error: " << curl_easy_strerror(res) << std::endl; - } - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); - curl_slist_free_all(headers); - curl_easy_cleanup(curl); + while (tries < 5) { + tries++; + CURLcode res = curl_easy_perform(curl); + if (res != CURLE_OK) { + std::cerr << "CURL GET error: " << curl_easy_strerror(res) << std::endl; + } - if (res != CURLE_OK) { - return std::nullopt; - } + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); + curl_slist_free_all(headers); + curl_easy_cleanup(curl); - if (http_code >= 400) { - std::cerr << "HTTP GET request to " << url << " failed with code: " << http_code << "\nResponse: " << readBuffer << std::endl; - return std::nullopt; + if (res != CURLE_OK) { + continue; + } + + if (http_code >= 400) { + continue; + } + + return readBuffer; } - return readBuffer; + std::cerr << "HTTP GET request to " << url << " failed with code: " << http_code << "\nResponse: " << readBuffer << std::endl; + return std::nullopt; } std::optional launchpad::api_post( @@ -327,26 +334,32 @@ std::optional launchpad::api_post( curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); - CURLcode res = curl_easy_perform(curl); + bool tries = 0; long http_code = 0; - if (res != CURLE_OK) { - std::cerr << "CURL POST error: " << curl_easy_strerror(res) << std::endl; - } - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); - curl_slist_free_all(headers); - curl_easy_cleanup(curl); + while (tries < 5) { + tries++; + CURLcode res = curl_easy_perform(curl); + if (res != CURLE_OK) { + std::cerr << "CURL POST error: " << curl_easy_strerror(res) << std::endl; + } - if (res != CURLE_OK) { - return std::nullopt; - } + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); + curl_slist_free_all(headers); + curl_easy_cleanup(curl); - if (http_code >= 400) { - std::cerr << "HTTP POST request to " << url << " failed with code: " << http_code << "\nResponse: " << readBuffer << std::endl; - return std::nullopt; - } + if (res != CURLE_OK) { + continue; + } - return readBuffer; + if (http_code >= 400) { + continue; + } + + return readBuffer; + } + std::cerr << "HTTP POST request to " << url << " failed with code: " << http_code << "\nResponse: " << readBuffer << std::endl; + return std::nullopt; } std::optional launchpad::api_patch(const std::string& endpoint, const nlohmann::json& data) {