aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-alm-client/src/main/java
diff options
context:
space:
mode:
authorAurélien Poscia <aurelien.poscia@sonarsource.com>2024-06-06 11:29:50 +0200
committersonartech <sonartech@sonarsource.com>2024-06-06 20:02:43 +0000
commitae4d19e26165d25a653a6ee63ef77c5a67935792 (patch)
tree2a05cf82e5ff1d225849372b418ef5cc5d4bd844 /server/sonar-alm-client/src/main/java
parent32a9a1730baad588acb37495a99d6384b973618c (diff)
downloadsonarqube-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')
-rw-r--r--server/sonar-alm-client/src/main/java/org/sonar/alm/client/GenericPaginatedHttpClient.java4
-rw-r--r--server/sonar-alm-client/src/main/java/org/sonar/alm/client/RatioBasedRateLimitChecker.java10
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;
}