in plugin-azure-server/src/main/kotlin/jetbrains/buildServer/clouds/azure/arm/connector/tasks/AzureClientUtils.kt [56:84]
public fun <T> doPollAsync(azureClient: AzureClient, state: PollingState<T>, resourceType: Type, beforePollAttemptHandler: () -> Observable<Unit>): Observable<PollingState<T>> {
val retryCount = TeamCityProperties.getInteger(TEAMCITY_CLOUDS_AZURE_DEPLOYMENT_LONG_RUNNING_QUERY_RETRY_COUNT, 5)
return Observable.just(true)
.flatMap<PollingState<T>> {
beforePollAttemptHandler()
.flatMap {
azureClient.pollSingleAsync(state, resourceType).toObservable()
}
}
.repeatWhen { observable ->
observable.flatMap {
Observable.timer(
TeamCityProperties.getLong(TEAMCITY_CLOUDS_AZURE_DEPLOYMENT_LONG_RUNNING_QUERY_RETRY_TIMEOUT, 30),
TimeUnit.SECONDS,
Schedulers.computation()
)
.observeOn(Schedulers.io())
}
}
.retryWhen { observable ->
observable.zipWith(Observable.range(1, retryCount)) { throwable, integer ->
if (throwable is CloudException || integer == retryCount) {
throw Exceptions.propagate(throwable)
}
integer
}
}
.takeUntil { isStatusTerminal(state) }
}