public async Task <(DedupManifestArtifactClient client, BlobStoreClientTelemetry telemetry)> CreateDedupManifestClientAsync(AgentTaskPluginExecutionContext context, VssConnection connection, CancellationToken cancellationToken) { const int maxRetries = 5; var tracer = context.CreateArtifactsTracer(); var dedupStoreHttpClient = await AsyncHttpRetryHelper.InvokeAsync( () => { ArtifactHttpClientFactory factory = new ArtifactHttpClientFactory( connection.Credentials, TimeSpan.FromSeconds(50), tracer, cancellationToken); // this is actually a hidden network call to the location service: return(Task.FromResult(factory.CreateVssHttpClient <IDedupStoreHttpClient, DedupStoreHttpClient>(connection.GetClient <DedupStoreHttpClient>().BaseAddress))); }, maxRetries : maxRetries, tracer : tracer, canRetryDelegate : e => true, context : nameof(CreateDedupManifestClientAsync), cancellationToken : cancellationToken, continueOnCapturedContext : false); var telemetry = new BlobStoreClientTelemetry(tracer, dedupStoreHttpClient.BaseAddress); var client = new DedupStoreClientWithDataport(dedupStoreHttpClient, PipelineArtifactProvider.GetDedupStoreClientMaxParallelism(context)); return(new DedupManifestArtifactClient(telemetry, client, tracer), telemetry); }
private IBlobStoreHttpClient CreateArtifactsClient(VssConnection connection, CancellationToken cancellationToken) { var tracer = new CallbackAppTraceSource(str => Trace.Info(str), System.Diagnostics.SourceLevels.Information); ArtifactHttpClientFactory factory = new ArtifactHttpClientFactory( connection.Credentials, TimeSpan.FromSeconds(50), tracer, default(CancellationToken)); return(factory.CreateVssHttpClient <IBlobStoreHttpClient, BlobStore2HttpClient>(connection.GetClient <BlobStore2HttpClient>().BaseAddress)); }
public DedupManifestArtifactClient CreateDedupManifestClient(AgentTaskPluginExecutionContext context, VssConnection connection, CancellationToken cancellationToken, out BlobStoreClientTelemetry telemetry) { var tracer = context.CreateArtifactsTracer(); ArtifactHttpClientFactory factory = new ArtifactHttpClientFactory( connection.Credentials, TimeSpan.FromSeconds(50), tracer, cancellationToken); var dedupStoreHttpClient = factory.CreateVssHttpClient <IDedupStoreHttpClient, DedupStoreHttpClient>(connection.GetClient <DedupStoreHttpClient>().BaseAddress); var client = new DedupStoreClientWithDataport(dedupStoreHttpClient, PipelineArtifactProvider.GetDedupStoreClientMaxParallelism(context)); return(new DedupManifestArtifactClient(telemetry = new BlobStoreClientTelemetry(tracer, dedupStoreHttpClient.BaseAddress), client, tracer)); }
/// <summary> /// Creates an http client that can communicate with a VSTS Build Cache Service. /// </summary> public async Task <IBlobBuildCacheHttpClient> CreateBlobBuildCacheHttpClientAsync(Context context) { RetryPolicy authRetryPolicy = new RetryPolicy <AuthorizationErrorDetectionStrategy>(RetryStrategy.DefaultExponential); var creds = await authRetryPolicy.ExecuteAsync(() => _vssCredentialsFactory.CreateVssCredentialsAsync(_buildCacheBaseUri, _useAad)).ConfigureAwait(false); var httpClientFactory = new ArtifactHttpClientFactory( creds, _httpSendTimeout, tracer: new AppTraceSourceContextAdapter(context, "BuildCacheHttpClientFactory", SourceLevels.All), verifyConnectionCancellationToken: CancellationToken.None); // TODO: Pipe down cancellation support (bug 1365340) IBlobBuildCacheHttpClient client = httpClientFactory.CreateVssHttpClient <IArtifactBlobBuildCacheHttpClient, BlobBuildCacheHttpClient>(_buildCacheBaseUri); await ArtifactHttpClientErrorDetectionStrategy.ExecuteAsync( context, "VerifyBlobBuildCacheHttpClientConnection", () => httpClientFactory.VerifyConnectionAsync(client as IArtifactHttpClient), CancellationToken.None).ConfigureAwait(false); context.TraceMessage( Severity.Debug, $"Verified connection to {_buildCacheBaseUri} with SessionId=[{httpClientFactory.ClientSettings.SessionId}]"); return(client); }
/// <inheritdoc /> public async Task <BoolResult> StartupAsync(Context context) { StartupStarted = true; RetryPolicy retryPolicy = new RetryPolicy <AuthorizationErrorDetectionStrategy>(RetryStrategy.DefaultExponential); try { var creds = await retryPolicy.ExecuteAsync(() => _vssCredentialsFactory.CreateVssCredentialsAsync(_backingStoreBaseUri, _useAad)).ConfigureAwait(false); _httpClientFactory = new ArtifactHttpClientFactory( creds, _httpSendTimeout, tracer: new AppTraceSourceContextAdapter(context, nameof(BackingContentStoreHttpClientFactory), SourceLevels.All), verifyConnectionCancellationToken: CancellationToken.None); // TODO: Pipe down cancellation support (bug 1365340) StartupCompleted = true; return(BoolResult.Success); } catch (Exception ex) { return(new BoolResult(ex)); } }
/// <summary> /// Creates an http client that can communicate with a VSTS Build Cache Service. /// </summary> public async Task <IBuildCacheHttpClient> CreateBuildCacheHttpClientAsync(Context context) { IRetryPolicy retryPolicy = RetryPolicyFactory.GetExponentialPolicy(AuthorizationErrorDetectionStrategy.IsTransient); var creds = await retryPolicy.ExecuteAsync( () => _vssCredentialsFactory.GetOrCreateVssCredentialsAsync(_buildCacheBaseUri, _useAad, PatType.CacheReadWrite), CancellationToken.None).ConfigureAwait(false); var httpClientFactory = new ArtifactHttpClientFactory( creds, _httpSendTimeout, tracer: new AppTraceSourceContextAdapter(context, "BuildCacheHttpClientFactory", SourceLevels.All), verifyConnectionCancellationToken: CancellationToken.None); // TODO: Pipe down cancellation support (bug 1365340) IBuildCacheHttpClient client = httpClientFactory.CreateVssHttpClient <IArtifactBuildCacheHttpClient, ItemBuildCacheHttpClient>(_buildCacheBaseUri); await ArtifactHttpClientErrorDetectionStrategy.ExecuteAsync( context, "VerifyBuildCacheHttpClientConnection", () => httpClientFactory.VerifyConnectionAsync(client as IArtifactHttpClient), CancellationToken.None).ConfigureAwait(false); _tracer.Debug(context, $"Verified connection to {_buildCacheBaseUri} with SessionId=[{httpClientFactory.ClientSettings.SessionId}]"); return(client); }