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
                    }
                }
            }
        }
示例#2
0
        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());
        }