in csharp/Microsoft.Azure.Databricks.Client.Sample/SampleProgram.Cluster.cs [18:43]
private static async Task WaitForCluster(IClustersApi clusterClient, string clusterId, int pollIntervalSeconds = 15)
{
var retryPolicy = Policy.Handle<WebException>()
.Or<ClientApiException>(e => e.StatusCode == HttpStatusCode.BadGateway)
.Or<ClientApiException>(e => e.StatusCode == HttpStatusCode.InternalServerError)
.Or<ClientApiException>(e => e.Message.Contains("\"error_code\":\"TEMPORARILY_UNAVAILABLE\""))
.Or<TaskCanceledException>(e => !e.CancellationToken.IsCancellationRequested) // web request timeout
.OrResult<ClusterInfo>(info => info.State is not (ClusterState.RUNNING or ClusterState.ERROR or ClusterState.TERMINATED))
.WaitAndRetryForeverAsync(
_ => TimeSpan.FromSeconds(pollIntervalSeconds),
(delegateResult, _) =>
{
if (delegateResult.Exception != null)
{
Console.WriteLine($"[{DateTime.UtcNow:s}] Failed to query cluster info - {delegateResult.Exception}");
}
});
await retryPolicy.ExecuteAsync(async () =>
{
var info = await clusterClient.Get(clusterId);
Console.WriteLine($"[{DateTime.UtcNow:s}]Cluster:{clusterId}\tState:{info.State}\tMessage:{info.StateMessage}");
return info;
});
}