public async Task InitializeAsync() { using var scope = _logger.BeginScope("Init"); _logger.LogInformation("Initializing base data"); // OSS bucket might fail to create, so repeat attempts var createBucketPolicy = Policy .Handle <ApiException>() .WaitAndRetryAsync( retryCount: 4, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (exception, timeSpan) => _logger.LogWarning("Cannot create OSS bucket. Repeating") ); await Task.WhenAll( // create bundles and activities _fdaClient.InitializeAsync(), // create the bucket createBucketPolicy.ExecuteAsync(async() => await _bucket.CreateAsync()) ); _logger.LogInformation($"Bucket {_bucket.BucketKey} created"); // publish default project files (specified by the appsettings.json) foreach (DefaultProjectConfiguration defaultProjectConfig in _defaultProjectsConfiguration.Projects) { var signedUrl = await _projectService.TransferProjectToOssAsync(_bucket, defaultProjectConfig); await _projectWork.AdoptAsync(defaultProjectConfig, signedUrl); } _logger.LogInformation("Added default projects."); }
public async Task InitializeAsync() { using var scope = _logger.BeginScope("Init"); _logger.LogInformation("Initializing base data"); // OSS bucket might fail to create, so repeat attempts var createBucketPolicy = Policy .Handle <ApiException>() .WaitAndRetryAsync( retryCount: 4, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (exception, timeSpan) => _logger.LogWarning("Cannot create OSS bucket. Repeating") ); await Task.WhenAll( // create bundles and activities _fdaClient.InitializeAsync(), // create the bucket createBucketPolicy.ExecuteAsync(async() => await _bucket.CreateAsync()) ); _logger.LogInformation($"Bucket {_bucket.BucketKey} created"); // OSS bucket might be not ready yet, so repeat attempts var waitForBucketPolicy = Policy .Handle <ApiException>(e => e.ErrorCode == StatusCodes.Status404NotFound) .WaitAndRetryAsync( retryCount: 4, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (exception, timeSpan) => _logger.LogWarning("Cannot get fresh OSS bucket. Repeating") ); // publish default project files (specified by the appsettings.json) foreach (DefaultProjectConfiguration defaultProjectConfig in _defaultProjectsConfiguration.Projects) { var projectUrl = defaultProjectConfig.Url; var project = await _userResolver.GetProjectAsync(defaultProjectConfig.Name); _logger.LogInformation($"Launching 'TransferData' for {projectUrl}"); string signedUrl = await waitForBucketPolicy.ExecuteAsync(async() => await _bucket.CreateSignedUrlAsync(project.OSSSourceModel, ObjectAccess.ReadWrite)); // TransferData from s3 to oss await _projectWork.FileTransferAsync(projectUrl, signedUrl); _logger.LogInformation($"'TransferData' for {projectUrl} is done."); await _projectWork.AdoptAsync(defaultProjectConfig, signedUrl); } _logger.LogInformation("Added default projects."); }