Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update metadata resolver usage, fix tests
  • Loading branch information
rainsxng committed Oct 6, 2025
commit 040e51baae3f658ccfb76a5fbb3555b1e834118b
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
/// Default implementation of <see cref="HttpDependencyMetadataResolver"/> that uses the base
/// trie-based lookup algorithm.
/// </summary>
public sealed class DefaultHttpDependencyMetadataResolver : HttpDependencyMetadataResolver

Check failure on line 12 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/DefaultHttpDependencyMetadataResolver.cs

View check run for this annotation

Azure Pipelines / extensions-ci (Correctness WarningsCheck)

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/DefaultHttpDependencyMetadataResolver.cs#L12

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/DefaultHttpDependencyMetadataResolver.cs(12,21): error LA0003: (NETCORE_ENGINEERING_TELEMETRY=Build) Newly added symbol 'Microsoft.Extensions.Http.Diagnostics.DefaultHttpDependencyMetadataResolver' must be marked as experimental

Check failure on line 12 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/DefaultHttpDependencyMetadataResolver.cs

View check run for this annotation

Azure Pipelines / extensions-ci

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/DefaultHttpDependencyMetadataResolver.cs#L12

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/DefaultHttpDependencyMetadataResolver.cs(12,21): error LA0003: (NETCORE_ENGINEERING_TELEMETRY=Build) Newly added symbol 'Microsoft.Extensions.Http.Diagnostics.DefaultHttpDependencyMetadataResolver' must be marked as experimental
{
/// <summary>
/// Initializes a new instance of the <see cref="DefaultHttpDependencyMetadataResolver"/> class.
/// </summary>
/// <param name="dependencyMetadata">A collection of HTTP dependency metadata used for request resolution.</param>
public DefaultHttpDependencyMetadataResolver(IEnumerable<IHttpDependencyMetadata> dependencyMetadata)
public DefaultHttpDependencyMetadataResolver(IEnumerable<IDownstreamDependencyMetadata> dependencyMetadata)
: base(dependencyMetadata)
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
/// configured metadata using specialized trie-based data structures. This enables efficient lookup
/// of service information, operation names, and other metadata for telemetry and policy application.
/// </remarks>
public abstract class HttpDependencyMetadataResolver

Check failure on line 22 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs

View check run for this annotation

Azure Pipelines / extensions-ci (Correctness WarningsCheck)

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs#L22

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs(22,23): error LA0003: (NETCORE_ENGINEERING_TELEMETRY=Build) Newly added symbol 'Microsoft.Extensions.Http.Diagnostics.HttpDependencyMetadataResolver' must be marked as experimental
{
internal readonly struct ProcessedMetadata
{
Expand All @@ -39,11 +39,11 @@
/// </summary>
/// <param name="dependencyMetadata">A collection of HTTP dependency metadata used for request resolution.</param>
/// <exception cref="ArgumentNullException"><paramref name="dependencyMetadata"/> is <see langword="null"/>.</exception>
protected HttpDependencyMetadataResolver(IEnumerable<IHttpDependencyMetadata> dependencyMetadata)
protected HttpDependencyMetadataResolver(IEnumerable<IDownstreamDependencyMetadata> dependencyMetadata)
{
if (dependencyMetadata == null)
{
throw new ArgumentNullException(nameof(dependencyMetadata));

Check failure on line 46 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs

View check run for this annotation

Azure Pipelines / extensions-ci (Correctness WarningsCheck)

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs#L46

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs(46,13): error LA0001: (NETCORE_ENGINEERING_TELEMETRY=Build) Use 'Microsoft.Shared.Diagnostics.Throws.ArgumentNullException' to throw the exception instead to improve performance

Check failure on line 46 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs

View check run for this annotation

Azure Pipelines / extensions-ci

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs#L46

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs(46,13): error LA0001: (NETCORE_ENGINEERING_TELEMETRY=Build) Use 'Microsoft.Shared.Diagnostics.Throws.ArgumentNullException' to throw the exception instead to improve performance
}

Dictionary<string, RequestMetadataTrieNode> dependencyTrieMap = [];
Expand Down Expand Up @@ -88,7 +88,7 @@
{
try
{
var hostMetadata = GetHostMetadata(requestMessage.RequestUri.Host);

Check failure on line 91 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs

View check run for this annotation

Azure Pipelines / extensions-ci (Correctness WarningsCheck)

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs#L91

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs(91,48): error CA1062: (NETCORE_ENGINEERING_TELEMETRY=Build) In externally visible method 'RequestMetadata? HttpDependencyMetadataResolver.GetRequestMetadata(HttpWebRequest requestMessage)', validate parameter 'requestMessage' is non-null before using it. If appropriate, throw an 'ArgumentNullException' when the argument is 'null'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1062)

Check failure on line 91 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs

View check run for this annotation

Azure Pipelines / extensions-ci

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs#L91

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDependencyMetadataResolver.cs(91,48): error CA1062: (NETCORE_ENGINEERING_TELEMETRY=Build) In externally visible method 'RequestMetadata? HttpDependencyMetadataResolver.GetRequestMetadata(HttpWebRequest requestMessage)', validate parameter 'requestMessage' is non-null before using it. If appropriate, throw an 'ArgumentNullException' when the argument is 'null'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1062)
return GetRequestMetadataInternal(requestMessage.Method, requestMessage.RequestUri.AbsolutePath, hostMetadata);
}
catch (Exception)
Expand Down Expand Up @@ -304,7 +304,7 @@
return null;
}

private void AddDependency(IHttpDependencyMetadata dependencyMetadata, Dictionary<string, RequestMetadataTrieNode> dependencyTrieMap)
private void AddDependency(IDownstreamDependencyMetadata dependencyMetadata, Dictionary<string, RequestMetadataTrieNode> dependencyTrieMap)
{
foreach (var hostNameSuffix in dependencyMetadata.UniqueHostNameSuffixes)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@
public static IServiceCollection AddDownstreamDependencyMetadata(this IServiceCollection services, IDownstreamDependencyMetadata downstreamDependencyMetadata)
{
_ = Throw.IfNull(services);
services.TryAddSingleton<HttpDependencyMetadataResolver, DefaultHttpDependencyMetadataResolver>();
_ = services.AddSingleton(downstreamDependencyMetadata);
_ = Throw.IfNull(downstreamDependencyMetadata);

services.TryAddEnumerable(ServiceDescriptor.Singleton<IDownstreamDependencyMetadata>(downstreamDependencyMetadata));
services.TryAddSingleton<HttpDependencyMetadataResolver, DefaultHttpDependencyMetadataResolver>();
return services;
}

Expand All @@ -38,9 +39,8 @@
where T : class, IDownstreamDependencyMetadata
{
_ = Throw.IfNull(services);
services.TryAddEnumerable(ServiceDescriptor.Singleton<IDownstreamDependencyMetadata, T>());
services.TryAddSingleton<HttpDependencyMetadataResolver, DefaultHttpDependencyMetadataResolver>();
_ = services.AddSingleton<IDownstreamDependencyMetadata, T>();

return services;
}

Expand All @@ -59,19 +59,20 @@
/// Adds services required for HTTP dependency metadata resolution with the specified metadata providers.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
/// <param name="metadataProviders">The HTTP dependency metadata providers to register.</param>
/// <param name="providers">The HTTP dependency metadata providers to register.</param>
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
public static IServiceCollection AddHttpDependencyMetadataResolver(
this IServiceCollection services,
params IHttpDependencyMetadata[] metadataProviders)
params IDownstreamDependencyMetadata[] providers)
{
foreach (var provider in metadataProviders)
_ = Throw.IfNull(services);

foreach (var provider in providers)

Check failure on line 70 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDiagnosticsServiceCollectionExtensions.cs

View check run for this annotation

Azure Pipelines / extensions-ci (Correctness WarningsCheck)

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDiagnosticsServiceCollectionExtensions.cs#L70

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDiagnosticsServiceCollectionExtensions.cs(70,34): error CA1062: (NETCORE_ENGINEERING_TELEMETRY=Build) In externally visible method 'IServiceCollection HttpDiagnosticsServiceCollectionExtensions.AddHttpDependencyMetadataResolver(IServiceCollection services, params IDownstreamDependencyMetadata[] providers)', validate parameter 'providers' is non-null before using it. If appropriate, throw an 'ArgumentNullException' when the argument is 'null'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1062)

Check failure on line 70 in src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDiagnosticsServiceCollectionExtensions.cs

View check run for this annotation

Azure Pipelines / extensions-ci

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDiagnosticsServiceCollectionExtensions.cs#L70

src/Libraries/Microsoft.Extensions.Http.Diagnostics/Http/HttpDiagnosticsServiceCollectionExtensions.cs(70,34): error CA1062: (NETCORE_ENGINEERING_TELEMETRY=Build) In externally visible method 'IServiceCollection HttpDiagnosticsServiceCollectionExtensions.AddHttpDependencyMetadataResolver(IServiceCollection services, params IDownstreamDependencyMetadata[] providers)', validate parameter 'providers' is non-null before using it. If appropriate, throw an 'ArgumentNullException' when the argument is 'null'. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1062)
{
services.TryAddEnumerable(ServiceDescriptor.Singleton<IHttpDependencyMetadata>(provider));
services.TryAddEnumerable(ServiceDescriptor.Singleton<IDownstreamDependencyMetadata>(provider));
}

services.TryAddSingleton<HttpDependencyMetadataResolver, DefaultHttpDependencyMetadataResolver>();

return services;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http.Diagnostics;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Telemetry.Internal;
using Microsoft.Shared.Diagnostics;
using Microsoft.Shared.Pools;

Expand Down Expand Up @@ -43,23 +42,23 @@ internal sealed class HttpRequestReader : IHttpRequestReader

private readonly OutgoingPathLoggingMode _outgoingPathLogMode;
private readonly IOutgoingRequestContext _requestMetadataContext;
private readonly IDownstreamDependencyMetadataManager? _downstreamDependencyMetadataManager;
private readonly HttpDependencyMetadataResolver? _dependencyMetadataResolver;

public HttpRequestReader(
IServiceProvider serviceProvider,
IOptionsMonitor<LoggingOptions> optionsMonitor,
IHttpRouteFormatter routeFormatter,
IHttpRouteParser httpRouteParser,
IOutgoingRequestContext requestMetadataContext,
IDownstreamDependencyMetadataManager? downstreamDependencyMetadataManager = null,
HttpDependencyMetadataResolver? dependencyMetadataResolver = null,
[ServiceKey] string? serviceKey = null)
: this(
optionsMonitor.GetKeyedOrCurrent(serviceKey),
routeFormatter,
httpRouteParser,
serviceProvider.GetRequiredOrKeyedRequiredService<IHttpHeadersReader>(serviceKey),
requestMetadataContext,
downstreamDependencyMetadataManager)
dependencyMetadataResolver)
{
}

Expand All @@ -69,15 +68,15 @@ internal HttpRequestReader(
IHttpRouteParser httpRouteParser,
IHttpHeadersReader httpHeadersReader,
IOutgoingRequestContext requestMetadataContext,
IDownstreamDependencyMetadataManager? downstreamDependencyMetadataManager = null)
HttpDependencyMetadataResolver? dependencyMetadataResolver = null)
{
_outgoingPathLogMode = Throw.IfOutOfRange(options.RequestPathLoggingMode);
_httpHeadersReader = httpHeadersReader;

_routeFormatter = routeFormatter;
_httpRouteParser = httpRouteParser;
_requestMetadataContext = requestMetadataContext;
_downstreamDependencyMetadataManager = downstreamDependencyMetadataManager;
_dependencyMetadataResolver = dependencyMetadataResolver;

_defaultSensitiveParameters = options.RouteParameterDataClasses.ToFrozenDictionary(StringComparer.Ordinal);
_queryParameterDataClasses = options.RequestQueryParametersDataClasses.ToFrozenDictionary(StringComparer.Ordinal);
Expand Down Expand Up @@ -234,7 +233,7 @@ private void GetRedactedPathAndParameters(HttpRequestMessage request, LogRecord

var requestMetadata = request.GetRequestMetadata() ??
_requestMetadataContext.RequestMetadata ??
_downstreamDependencyMetadataManager?.GetRequestMetadata(request);
_dependencyMetadataResolver?.GetRequestMetadata(request);

if (requestMetadata == null)
{
Expand Down
Loading