diff options
author | Aurélien Poscia <aurelien.poscia@sonarsource.com> | 2024-06-06 11:29:50 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2024-06-06 20:02:43 +0000 |
commit | ae4d19e26165d25a653a6ee63ef77c5a67935792 (patch) | |
tree | 2a05cf82e5ff1d225849372b418ef5cc5d4bd844 /server/sonar-alm-client/src/main/java | |
parent | 32a9a1730baad588acb37495a99d6384b973618c (diff) | |
download | sonarqube-ae4d19e26165d25a653a6ee63ef77c5a67935792.tar.gz sonarqube-ae4d19e26165d25a653a6ee63ef77c5a67935792.zip |
SONAR-22201 Fix GitHub rate limit computation (#11200)
Co-authored-by: Peter Horvath <peter.horvath@sonarsource.com>
Diffstat (limited to 'server/sonar-alm-client/src/main/java')
2 files changed, 8 insertions, 6 deletions
diff --git a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/GenericPaginatedHttpClient.java b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/GenericPaginatedHttpClient.java index 74835e08794..d4a62724e59 100644 --- a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/GenericPaginatedHttpClient.java +++ b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/GenericPaginatedHttpClient.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; import javax.annotation.Nullable; +import org.kohsuke.github.GHRateLimit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.alm.client.ApplicationHttpClient.GetResponse; @@ -65,7 +66,8 @@ public abstract class GenericPaginatedHttpClient implements PaginatedHttpClient return; } try { - rateLimitChecker.checkRateLimit(rateLimit); + GHRateLimit.Record rateLimitRecord = new GHRateLimit.Record(rateLimit.limit(), rateLimit.remaining(), rateLimit.reset()); + rateLimitChecker.checkRateLimit(rateLimitRecord, 0); } catch (InterruptedException e) { Thread.currentThread().interrupt(); LOG.warn(format("Thread interrupted: %s", e.getMessage()), e); diff --git a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/RatioBasedRateLimitChecker.java b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/RatioBasedRateLimitChecker.java index 78054169f30..24ddad8d6a2 100644 --- a/server/sonar-alm-client/src/main/java/org/sonar/alm/client/RatioBasedRateLimitChecker.java +++ b/server/sonar-alm-client/src/main/java/org/sonar/alm/client/RatioBasedRateLimitChecker.java @@ -38,15 +38,15 @@ public class RatioBasedRateLimitChecker extends RateLimitChecker { private static final int MAX_PERCENTAGE_OF_CALLS_FOR_PROVISIONING = 90; - public boolean checkRateLimit(ApplicationHttpClient.RateLimit rateLimitRecord) throws InterruptedException { - int limit = rateLimitRecord.limit(); - int apiCallsUsed = limit - rateLimitRecord.remaining(); + @Override + protected boolean checkRateLimit(GHRateLimit.Record rateLimitRecord, long count) throws InterruptedException { + int limit = rateLimitRecord.getLimit(); + int apiCallsUsed = limit - rateLimitRecord.getRemaining(); double percentageOfCallsUsed = computePercentageOfCallsUsed(apiCallsUsed, limit); LOGGER.debug("{} external system API calls used of {}", apiCallsUsed, limit); if (percentageOfCallsUsed >= MAX_PERCENTAGE_OF_CALLS_FOR_PROVISIONING) { LOGGER.warn(RATE_RATIO_EXCEEDED_MESSAGE, apiCallsUsed, limit); - GHRateLimit.Record rateLimit = new GHRateLimit.Record(rateLimitRecord.limit(), rateLimitRecord.remaining(), rateLimitRecord.reset()); - return sleepUntilReset(rateLimit); + return sleepUntilReset(rateLimitRecord); } return false; } |