private async Task MonitorDeployment(ActiveDeployment activeDeployment) { _logger.LogDebug($"Waiting for storage {activeDeployment.StorageName} deployment to complete"); using (var cts = new CancellationTokenSource()) { // runs in background var renewer = _leaseMaintainer.MaintainLease(activeDeployment, cts.Token); try { var deploymentState = ProvisioningState.Running; while (deploymentState == ProvisioningState.Running) { var fileServer = (NfsFileServer)await _assetRepoCoordinator.GetRepository(activeDeployment.StorageName); if (fileServer == null) { break; } await _assetRepoCoordinator.UpdateRepositoryFromDeploymentAsync(fileServer); deploymentState = fileServer.Deployment.ProvisioningState; _logger.LogDebug($"[MonitorDeployment={activeDeployment.StorageName}] " + $"Deployment returned state {deploymentState}"); if (deploymentState == ProvisioningState.Running) { await Task.Delay(TimeSpan.FromSeconds(15), cts.Token); } } } finally { _logger.LogDebug($"[MonitorDeployment={activeDeployment.StorageName}] " + $"Deleting queue message {activeDeployment.MessageId} " + $"with receipt {activeDeployment.PopReceipt}"); await _deploymentQueue.Delete(activeDeployment.MessageId, activeDeployment.PopReceipt); cts.Cancel(); try { await renewer; } catch (OperationCanceledException) { // expected } } } }
public async Task <IReadOnlyList <AssetRepository> > Repositories() { var repos = await Task.WhenAll((await _assetRepoCoordinator.ListRepositories()) .Select(repoName => _assetRepoCoordinator.GetRepository(repoName))); return(repos.Where(re => re != null).OrderBy(re => re.Name).ToList()); }