From 8ce6c68d772ee56e35abb0067aa0c37f77041505 Mon Sep 17 00:00:00 2001 From: Netkas Date: Wed, 4 Oct 2023 15:12:56 -0400 Subject: [PATCH] Implemented retry logic for HTTP requests in Repositories --- .../Classes/GiteaExtension/GiteaRepository.php | 16 ++++++++++++++-- .../Classes/GithubExtension/GithubRepository.php | 16 ++++++++++++++-- .../Classes/GitlabExtension/GitlabRepository.php | 16 ++++++++++++++-- .../PackagistExtension/PackagistRepository.php | 14 +++++++++++++- 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/ncc/Classes/GiteaExtension/GiteaRepository.php b/src/ncc/Classes/GiteaExtension/GiteaRepository.php index c663373..44b6b71 100644 --- a/src/ncc/Classes/GiteaExtension/GiteaRepository.php +++ b/src/ncc/Classes/GiteaExtension/GiteaRepository.php @@ -474,11 +474,23 @@ */ private static function processHttpResponse(CurlHandle $curl, string $group, string $project): array { - $response = curl_exec($curl); + $retry_count = 0; + $response = false; + + while($retry_count < 3 && $response === false) + { + $response = curl_exec($curl); + + if($response === false) + { + Console::outWarning(sprintf('HTTP request failed for %s/%s: %s, retrying (%s/3)', $vendor, $project, curl_error($curl), $retry_count + 1)); + $retry_count++; + } + } if($response === false) { - throw new NetworkException(sprintf('HTTP request failed for %s/%s: %s', $group, $project, curl_error($curl))); + throw new NetworkException(sprintf('HTTP request failed for %s/%s: %s', $vendor, $project, curl_error($curl))); } switch(curl_getinfo($curl, CURLINFO_HTTP_CODE)) diff --git a/src/ncc/Classes/GithubExtension/GithubRepository.php b/src/ncc/Classes/GithubExtension/GithubRepository.php index 136e860..6cc17e8 100644 --- a/src/ncc/Classes/GithubExtension/GithubRepository.php +++ b/src/ncc/Classes/GithubExtension/GithubRepository.php @@ -472,11 +472,23 @@ */ private static function processHttpResponse(CurlHandle $curl, string $group, string $project): array { - $response = curl_exec($curl); + $retry_count = 0; + $response = false; + + while($retry_count < 3 && $response === false) + { + $response = curl_exec($curl); + + if($response === false) + { + Console::outWarning(sprintf('HTTP request failed for %s/%s: %s, retrying (%s/3)', $vendor, $project, curl_error($curl), $retry_count + 1)); + $retry_count++; + } + } if($response === false) { - throw new NetworkException(sprintf('HTTP request failed for %s/%s: %s', $group, $project, curl_error($curl))); + throw new NetworkException(sprintf('HTTP request failed for %s/%s: %s', $vendor, $project, curl_error($curl))); } switch (curl_getinfo($curl, CURLINFO_HTTP_CODE)) diff --git a/src/ncc/Classes/GitlabExtension/GitlabRepository.php b/src/ncc/Classes/GitlabExtension/GitlabRepository.php index 98f6c48..bda7de9 100644 --- a/src/ncc/Classes/GitlabExtension/GitlabRepository.php +++ b/src/ncc/Classes/GitlabExtension/GitlabRepository.php @@ -495,11 +495,23 @@ */ private static function processHttpResponse(CurlHandle $curl, string $group, string $project): array { - $response = curl_exec($curl); + $retry_count = 0; + $response = false; + + while($retry_count < 3 && $response === false) + { + $response = curl_exec($curl); + + if($response === false) + { + Console::outWarning(sprintf('HTTP request failed for %s/%s: %s, retrying (%s/3)', $vendor, $project, curl_error($curl), $retry_count + 1)); + $retry_count++; + } + } if($response === false) { - throw new NetworkException(sprintf('HTTP request failed for %s/%s: %s', $group, $project, curl_error($curl))); + throw new NetworkException(sprintf('HTTP request failed for %s/%s: %s', $vendor, $project, curl_error($curl))); } switch (curl_getinfo($curl, CURLINFO_HTTP_CODE)) diff --git a/src/ncc/Classes/PackagistExtension/PackagistRepository.php b/src/ncc/Classes/PackagistExtension/PackagistRepository.php index 3bb26c5..d3f9b0f 100644 --- a/src/ncc/Classes/PackagistExtension/PackagistRepository.php +++ b/src/ncc/Classes/PackagistExtension/PackagistRepository.php @@ -231,7 +231,19 @@ */ private static function processHttpResponse(CurlHandle $curl, string $vendor, string $project): array { - $response = curl_exec($curl); + $retry_count = 0; + $response = false; + + while($retry_count < 3 && $response === false) + { + $response = curl_exec($curl); + + if($response === false) + { + Console::outWarning(sprintf('HTTP request failed for %s/%s: %s, retrying (%s/3)', $vendor, $project, curl_error($curl), $retry_count + 1)); + $retry_count++; + } + } if($response === false) {