Skip to content

Shorten default timeout of individual calls to backend #657

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: main
Choose a base branch
from

Conversation

amerjusupovic
Copy link
Member

This is a redo of a PR that was previously merged and reverted: #620

This PR adds a way to dispose of the HttpClientTransport class that was added, but otherwise the change is intended to be the same.

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR aims to shorten the default timeout for individual backend calls and safely dispose of the HttpClientTransport.

  • Introduces a new check for TaskCanceledException with an InnerException of TimeoutException in the fail-over logic.
  • Updates AzureAppConfigurationOptions to implement IDisposable and dispose of the HttpClientTransport instance.

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs Adds a check for TaskCanceledException to improve timeout fail-over handling.
src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationOptions.cs Updates the class to implement IDisposable and disposes of HttpClientTransport to avoid resource leaks.

@amerjusupovic amerjusupovic force-pushed the ajusupovic/shorten-default-timeout branch from 0e77499 to 831adb2 Compare May 1, 2025 19:26
@@ -18,10 +20,11 @@ namespace Microsoft.Extensions.Configuration.AzureAppConfiguration
/// Options used to configure the behavior of an Azure App Configuration provider.
/// If neither <see cref="Select"/> nor <see cref="SelectSnapshot"/> is ever called, all key-values with no label are included in the configuration provider.
/// </summary>
public class AzureAppConfigurationOptions
public class AzureAppConfigurationOptions : IDisposable
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When is dispose called on this in a customer app?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missed this, looks like we could call _options.Dispose in AzureAppConfigurationProvider.Dispose?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whoever creates a disposable object should be the one to dispose it. In our case AzureAppConfigurationOptions is created internally and doesn't make sense to be disposed where it's created.

So I'm not sure we should be doing it this way at all. I'm leaning towards us doing this via a policy instead of passing an HttpClient.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants