in plugin-azure-server/src/main/kotlin/jetbrains/buildServer/clouds/azure/arm/throttler/AzureThrottlerInterceptor.kt [17:70]
override fun intercept(chain: Interceptor.Chain): Response {
val sleepTime = myThrottlerDelayInMilliseconds.get()
if (sleepTime != 0L) {
Thread.sleep(sleepTime)
}
val request = chain.request()
val requestId = request.header(CLIENT_REQUEST_ID)
val taskContext = tackContextProvider.getContext()
val corellationId = "[${taskContext?.corellationId ?: "-${requestId}"}/${taskContext?.getRequestSequenceLength()?.toString() ?: "---"}]"
LOG.debug("[$name] $corellationId Azure request starting")
val response = chain.proceed(request)
val remainingReads = getHeaderLongValue(response, SUBSCRIPTION_REMAINING_READS_HEADER);
val remainingWrites = getHeaderLongValue(response, SUBSCRIPTION_REMAINING_WRITES_HEADER);
val remainingDeletes = getHeaderLongValue(response, SUBSCRIPTION_REMAINING_DELETES_HEADER);
val remainingResource = response.header(REMAINING_RESOURCE)
val remainingResourceReads = getHeaderLongValue(response, SUBSCRIPTION_RESOURCE_REMAINING_READS_HEADER);
val remainingTenantReads = getHeaderLongValue(response, TENANT_REMAINING_READS_HEADER);
val remainingTenantResourceReads = getHeaderLongValue(response, TENANT_RESOURCE_REMAINING_READS_HEADER);
val userQuotaRemaining = getHeaderLongValue(response, USER_QUOTA_REMAINING);
val userQuotaResetsAfter = response.header(USER_QUOTA_RESETS_AFTER);
val remainingReadsResult = remainingReads ?: remainingTenantReads ?: remainingResourceReads ?: remainingTenantResourceReads;
LOG.debug("[$name] $corellationId Azure request processed: Remaining reads: $remainingReadsResult, Url: ${request.url()}")
LOG.debug("[$name] $corellationId Azure request processed: Headers: $SUBSCRIPTION_REMAINING_READS_HEADER=$remainingReads, " +
"$SUBSCRIPTION_REMAINING_WRITES_HEADER=$remainingWrites, " +
"$SUBSCRIPTION_REMAINING_DELETES_HEADER=$remainingDeletes, " +
"$REMAINING_RESOURCE=$remainingResource, " +
"$SUBSCRIPTION_RESOURCE_REMAINING_READS_HEADER=$remainingResourceReads, " +
"$TENANT_REMAINING_READS_HEADER=$remainingTenantReads, " +
"$TENANT_RESOURCE_REMAINING_READS_HEADER=$remainingTenantResourceReads, ")
userQuotaRemaining?.let {
LOG.debug("[$name] $corellationId Azure request processed: Headers: $USER_QUOTA_REMAINING=$it, " +
"$USER_QUOTA_RESETS_AFTER=$userQuotaResetsAfter ")
}
taskContext?.increaseRequestsSequenceLength()
remainingReadsNotifier.notifyRemainingReads(remainingReadsResult, 1)
if (response.code() == RETRY_AFTER_STATUS_CODE) {
val retryAfterSeconds = getRetryAfterSeconds(response, corellationId)
LOG.info("[$name] $corellationId Azure Resource Manager read/write per hour limit reached. Will retry in: $retryAfterSeconds seconds")
throw ThrottlerRateLimitReachedException(retryAfterSeconds ?: DEFAULT_RETRY_AFTER_SECONDS, taskContext?.getRequestSequenceLength() ?: 1)
}
return response
}