@@ -14,6 +14,14 @@ internal class DefaultRegistryAPI : IRegistryAPI
14
14
private readonly HttpClient _client ;
15
15
private readonly ILogger _logger ;
16
16
17
+ // Empirical value - Unoptimized .NET application layers can be ~200MB
18
+ // * .NET Runtime (~80MB)
19
+ // * ASP.NET Runtime (~25MB)
20
+ // * application and dependencies - variable, but _probably_ not more than the BCL?
21
+ // Given a 200MB target and a 1Mb/s upload speed, we'd expect an upload speed of 27m:57s.
22
+ // Making this a round 30 for convenience.
23
+ private static TimeSpan LongRequestTimeout = TimeSpan . FromMinutes ( 30 ) ;
24
+
17
25
internal DefaultRegistryAPI ( string registryName , Uri baseUri , ILogger logger , RegistryMode mode )
18
26
{
19
27
bool isAmazonECRRegistry = baseUri . IsAmazonECRRegistry ( ) ;
@@ -30,7 +38,12 @@ internal DefaultRegistryAPI(string registryName, Uri baseUri, ILogger logger, Re
30
38
31
39
private static HttpClient CreateClient ( string registryName , Uri baseUri , ILogger logger , bool isAmazonECRRegistry , RegistryMode mode )
32
40
{
33
- var innerHandler = new SocketsHttpHandler ( ) ;
41
+ var innerHandler = new SocketsHttpHandler ( )
42
+ {
43
+ UseCookies = false ,
44
+ // the rest of the HTTP stack has an very long timeout (see below) but we should still have a reasonable timeout for the initial connection
45
+ ConnectTimeout = TimeSpan . FromSeconds ( 30 )
46
+ } ;
34
47
35
48
// Ignore certificate for https localhost repository.
36
49
if ( baseUri . Host == "localhost" && baseUri . Scheme == "https" )
@@ -49,7 +62,10 @@ private static HttpClient CreateClient(string registryName, Uri baseUri, ILogger
49
62
clientHandler = new AmazonECRMessageHandler ( clientHandler ) ;
50
63
}
51
64
52
- HttpClient client = new ( clientHandler ) ;
65
+ HttpClient client = new ( clientHandler )
66
+ {
67
+ Timeout = LongRequestTimeout
68
+ } ;
53
69
54
70
client . DefaultRequestHeaders . Add ( "User-Agent" , $ ".NET Container Library v{ Constants . Version } ") ;
55
71
0 commit comments