Skip to content

Commit fd35356

Browse files
committed
Make sur default HttpClient is used as much as possible
1 parent 21e148d commit fd35356

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

NGitLab.Tests/Docker/GitLabTestContextRequestOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private void LogRequest(HttpRequestMessage request, HttpResponseMessage response
120120

121121
if (request.Content != null)
122122
{
123-
byte[] requestContent = null;
123+
byte[] requestContent;
124124
if (_requestContents.TryGetValue(request, out requestContent) || TryReadRequestContent(request, out requestContent))
125125
{
126126
sb.AppendLine();
@@ -185,7 +185,7 @@ private async Task LogRequestAsync(HttpRequestMessage request, HttpResponseMessa
185185

186186
if (request.Content != null)
187187
{
188-
byte[] requestContent = null;
188+
byte[] requestContent;
189189
if (_requestContents.TryGetValue(request, out requestContent) || TryReadRequestContent(request, out requestContent))
190190
{
191191
sb.AppendLine();

NGitLab/Http/HttpClientManager.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,14 @@ namespace NGitLab.Http;
1111
/// </summary>
1212
internal static class HttpClientManager
1313
{
14-
private static readonly Lazy<HttpClient> s_defaultClient = new(() => CreateHttpClient(null, null));
14+
/// <summary>
15+
/// Configure the default client-side timeout when calling GitLab.
16+
/// Some GitLab endpoints are really slow, so use a much larger value
17+
/// than .NET's 100-second default.
18+
/// </summary>
19+
private static readonly TimeSpan s_defaultHttpClientTimeout = TimeSpan.FromMinutes(5);
20+
21+
private static readonly Lazy<HttpClient> s_defaultClient = new(() => CreateHttpClient(proxy: null, timeout: null));
1522

1623
/// <summary>
1724
/// Gets the singleton HttpClient instance for default scenarios.
@@ -31,18 +38,16 @@ public static HttpClient CreateHttpClient(IWebProxy proxy, TimeSpan? timeout)
3138
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
3239
};
3340

34-
if (proxy != null)
41+
if (proxy is not null)
3542
{
3643
handler.Proxy = proxy;
3744
handler.UseProxy = true;
3845
}
3946

40-
var client = new HttpClient(handler);
41-
42-
if (timeout.HasValue)
47+
var client = new HttpClient(handler)
4348
{
44-
client.Timeout = timeout.Value;
45-
}
49+
Timeout = timeout ?? s_defaultHttpClientTimeout,
50+
};
4651

4752
return client;
4853
}
@@ -55,13 +60,13 @@ public static HttpClient CreateHttpClient(IWebProxy proxy, TimeSpan? timeout)
5560
/// <returns>An HttpClient instance.</returns>
5661
public static HttpClient GetOrCreateHttpClient(RequestOptions options)
5762
{
58-
if (options.HttpClientFactory != null)
63+
if (options.HttpClientFactory is not null)
5964
{
6065
return options.HttpClientFactory(options);
6166
}
6267

6368
// Use singleton if no custom proxy or timeout
64-
if (options.Proxy == null && !options.HttpClientTimeout.HasValue)
69+
if (options.Proxy is null && !options.HttpClientTimeout.HasValue)
6570
{
6671
return DefaultClient;
6772
}

NGitLab/RequestOptions.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ public class RequestOptions
2424
public string Sudo { get; set; }
2525

2626
/// <summary>
27-
/// Configure the default client side timeout when calling GitLab.
28-
/// GitLab exposes some end points which are really slow so
29-
/// the default we use is larger than the default 100 seconds of .net
27+
/// Overrides the default client-side timeout when calling GitLab.
3028
/// </summary>
31-
public TimeSpan? HttpClientTimeout { get; set; } = TimeSpan.FromMinutes(5);
29+
public TimeSpan? HttpClientTimeout { get; set; }
3230

3331
public string UserAgent { get; set; }
3432

0 commit comments

Comments
 (0)