From da523e81481c231df53a69427cf92ac63f68a729 Mon Sep 17 00:00:00 2001
From: jahsu <45610531+jahsu-MSFT@users.noreply.github.com>
Date: Tue, 23 Jul 2019 17:47:19 -0700
Subject: [PATCH] Use ArtifactHttpClientFactory to generate dedupStoreClient
 that includes ArtifactHttpRetryHandler  (#2357)

* update clinet

* remove test code

* update to 50 secs
---
 .../DedupManifestArtifactClientFactory.cs     | 25 +++++++++----------
 .../PipelineArtifactPluginV1.cs               |  2 +-
 .../PipelineArtifactServer.cs                 |  5 ++--
 .../PipelineCache/PipelineCacheServer.cs      |  4 +--
 4 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/src/Agent.Plugins/PipelineArtifact/DedupManifestArtifactClientFactory.cs b/src/Agent.Plugins/PipelineArtifact/DedupManifestArtifactClientFactory.cs
index a7ac03cc9b..3f273ac08d 100644
--- a/src/Agent.Plugins/PipelineArtifact/DedupManifestArtifactClientFactory.cs
+++ b/src/Agent.Plugins/PipelineArtifact/DedupManifestArtifactClientFactory.cs
@@ -1,31 +1,30 @@
 using System;
-using System.Collections.Generic;
 using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
 using System.Threading;
 using Agent.Sdk;
-using Microsoft.TeamFoundation.Build.WebApi;
-using Microsoft.TeamFoundation.DistributedTask.WebApi;
-using Microsoft.VisualStudio.Services.Agent.Util;
-using Microsoft.VisualStudio.Services.BlobStore.Common;
 using Microsoft.VisualStudio.Services.BlobStore.Common.Telemetry;
 using Microsoft.VisualStudio.Services.BlobStore.WebApi;
-using Microsoft.VisualStudio.Services.Common;
 using Microsoft.VisualStudio.Services.Content.Common.Tracing;
 using Microsoft.VisualStudio.Services.WebApi;
-using Newtonsoft.Json;
+using Microsoft.VisualStudio.Services.Content.Common;
+using Microsoft.VisualStudio.Services.Common;
 
 namespace Agent.Plugins.PipelineArtifact
 {    
     public static class DedupManifestArtifactClientFactory
     {
-        public static DedupManifestArtifactClient CreateDedupManifestClient(AgentTaskPluginExecutionContext context, VssConnection connection, out BlobStoreClientTelemetry telemetry)
+        public static DedupManifestArtifactClient CreateDedupManifestClient(AgentTaskPluginExecutionContext context, VssConnection connection, CancellationToken cancellationToken, out BlobStoreClientTelemetry telemetry)
         {
-            var dedupStoreHttpClient = connection.GetClient<DedupStoreHttpClient>();
             var tracer = new CallbackAppTraceSource(str => context.Output(str), SourceLevels.Information);
-            dedupStoreHttpClient.SetTracer(tracer);
+
+            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);
         }
diff --git a/src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginV1.cs b/src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginV1.cs
index d11b250ff7..af144bc10a 100644
--- a/src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginV1.cs
+++ b/src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginV1.cs
@@ -60,7 +60,7 @@ public class PublishPipelineArtifactTaskV1 : PipelineArtifactTaskPluginBaseV1
         protected override async Task ProcessCommandInternalAsync(
             AgentTaskPluginExecutionContext context, 
             CancellationToken token)
-        {           
+        {
             string artifactName = context.GetInput(ArtifactEventProperties.ArtifactName, required: false);
             string targetPath = context.GetInput(TargetPath, required: true);
             string defaultWorkingDirectory = context.Variables.GetValueOrDefault("system.defaultworkingdirectory").Value;
diff --git a/src/Agent.Plugins/PipelineArtifact/PipelineArtifactServer.cs b/src/Agent.Plugins/PipelineArtifact/PipelineArtifactServer.cs
index b4997d4173..be367d4a6e 100644
--- a/src/Agent.Plugins/PipelineArtifact/PipelineArtifactServer.cs
+++ b/src/Agent.Plugins/PipelineArtifact/PipelineArtifactServer.cs
@@ -29,13 +29,14 @@ internal async Task UploadAsync(
         {
             VssConnection connection = context.VssConnection;
             BlobStoreClientTelemetry clientTelemetry;
-            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, out clientTelemetry);
+            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, cancellationToken, out clientTelemetry);
 
             using (clientTelemetry)
             {
                 //Upload the pipeline artifact.
                 PipelineArtifactActionRecord uploadRecord = clientTelemetry.CreateRecord<PipelineArtifactActionRecord>((level, uri, type) =>
                     new PipelineArtifactActionRecord(level, uri, type, nameof(UploadAsync), context));
+                    
                 PublishResult result = await clientTelemetry.MeasureActionAsync(
                     record: uploadRecord,
                     actionAsync: async () =>
@@ -88,7 +89,7 @@ internal async Task DownloadAsync(
         {
             VssConnection connection = context.VssConnection;
             BlobStoreClientTelemetry clientTelemetry;
-            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, out clientTelemetry);
+            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, cancellationToken, out clientTelemetry);
             BuildServer buildHelper = new BuildServer(connection);
 
             using (clientTelemetry)
diff --git a/src/Agent.Plugins/PipelineCache/PipelineCacheServer.cs b/src/Agent.Plugins/PipelineCache/PipelineCacheServer.cs
index ab6568bd34..2c18a8e26b 100644
--- a/src/Agent.Plugins/PipelineCache/PipelineCacheServer.cs
+++ b/src/Agent.Plugins/PipelineCache/PipelineCacheServer.cs
@@ -34,7 +34,7 @@ internal async Task UploadAsync(
         {
             VssConnection connection = context.VssConnection;
             BlobStoreClientTelemetry clientTelemetry;
-            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, out clientTelemetry);
+            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, cancellationToken, out clientTelemetry);
             PipelineCacheClient pipelineCacheClient = this.CreateClient(clientTelemetry, context, connection);
 
             using (clientTelemetry)
@@ -98,7 +98,7 @@ internal async Task DownloadAsync(
         {
             VssConnection connection = context.VssConnection;
             BlobStoreClientTelemetry clientTelemetry;
-            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, out clientTelemetry);
+            DedupManifestArtifactClient dedupManifestClient = DedupManifestArtifactClientFactory.CreateDedupManifestClient(context, connection, cancellationToken, out clientTelemetry);
             PipelineCacheClient pipelineCacheClient = this.CreateClient(clientTelemetry, context, connection);
             GetPipelineCacheArtifactOptions options = new GetPipelineCacheArtifactOptions
             {