Skip to content

Commit d4ee8ba

Browse files
authored
Final load balancing review feedback (#1626)
1 parent b001e02 commit d4ee8ba

File tree

7 files changed

+22
-23
lines changed

7 files changed

+22
-23
lines changed

src/Grpc.Net.Client/Balancer/DnsResolver.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ namespace Grpc.Net.Client.Balancer
3737
/// Note: Experimental API that can change or be removed without any prior notice.
3838
/// </para>
3939
/// </summary>
40-
internal sealed class DnsResolver : AsyncResolver
40+
internal sealed class DnsResolver : PollingResolver
4141
{
4242
// To prevent excessive re-resolution, we enforce a rate limit on DNS resolution requests.
4343
private static readonly TimeSpan MinimumDnsResolutionRate = TimeSpan.FromSeconds(15);
@@ -74,6 +74,7 @@ public DnsResolver(Uri address, int defaultPort, ILoggerFactory loggerFactory, T
7474
_logger = loggerFactory.CreateLogger<DnsResolver>();
7575
}
7676

77+
/// <inheritdoc />
7778
protected override void OnStarted()
7879
{
7980
base.OnStarted();

src/Grpc.Net.Client/Balancer/ISubchannelCallTracker.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ namespace Grpc.Net.Client.Balancer
2222
{
2323
/// <summary>
2424
/// An interface for tracking subchannel calls.
25+
/// <para>
26+
/// Note: Experimental API that can change or be removed without any prior notice.
27+
/// </para>
2528
/// </summary>
2629
public interface ISubchannelCallTracker
2730
{

src/Grpc.Net.Client/Balancer/AsyncResolver.cs renamed to src/Grpc.Net.Client/Balancer/PollingResolver.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,17 @@
2424
namespace Grpc.Net.Client.Balancer
2525
{
2626
/// <summary>
27-
/// An abstract base type for <see cref="Resolver"/> implementations that use asynchronous logic to resolve the <see cref="Uri"/>.
27+
/// An abstract base type for <see cref="Resolver"/> implementations that use asynchronous polling logic to resolve the <see cref="Uri"/>.
2828
/// <para>
29-
/// <see cref="AsyncResolver"/> adds a virtual <see cref="ResolveAsync"/> method. The resolver runs one asynchronous
29+
/// <see cref="PollingResolver"/> adds a virtual <see cref="ResolveAsync"/> method. The resolver runs one asynchronous
3030
/// resolve task at a time. Calling <see cref="Refresh()"/> on the resolver when a resolve task is already running has
3131
/// no effect.
3232
/// </para>
33+
/// <para>
34+
/// Note: Experimental API that can change or be removed without any prior notice.
35+
/// </para>
3336
/// </summary>
34-
public abstract class AsyncResolver : Resolver
37+
public abstract class PollingResolver : Resolver
3538
{
3639
// Internal for testing
3740
internal Task _resolveTask = Task.CompletedTask;
@@ -48,17 +51,17 @@ public abstract class AsyncResolver : Resolver
4851
protected Action<ResolverResult> Listener => _listener!;
4952

5053
/// <summary>
51-
/// Initializes a new instance of the <see cref="AsyncResolver"/>.
54+
/// Initializes a new instance of the <see cref="PollingResolver"/>.
5255
/// </summary>
5356
/// <param name="loggerFactory">The logger factory.</param>
54-
protected AsyncResolver(ILoggerFactory loggerFactory)
57+
protected PollingResolver(ILoggerFactory loggerFactory)
5558
{
5659
if (loggerFactory == null)
5760
{
5861
throw new ArgumentNullException(nameof(loggerFactory));
5962
}
6063

61-
_logger = loggerFactory.CreateLogger<AsyncResolver>();
64+
_logger = loggerFactory.CreateLogger<PollingResolver>();
6265
}
6366

6467
/// <summary>
@@ -100,7 +103,8 @@ protected virtual void OnStarted()
100103
/// <summary>
101104
/// Refresh resolution. Can only be called after <see cref="Start(Action{ResolverResult})"/>.
102105
/// <para>
103-
/// This is only a hint. Implementation takes it as a signal but may not start resolution.
106+
/// The resolver runs one asynchronous resolve task at a time. Calling <see cref="Refresh()"/> on the resolver when a
107+
/// resolve task is already running has no effect.
104108
/// </para>
105109
/// </summary>
106110
public sealed override void Refresh()
@@ -152,9 +156,6 @@ private async Task ResolveNowAsync(CancellationToken cancellationToken)
152156
/// Resolve the target <see cref="Uri"/>. Updated results are passed to the callback
153157
/// registered by <see cref="Start(Action{ResolverResult})"/>. Can only be called
154158
/// after the resolver has started.
155-
/// <para>
156-
/// This is only a hint. Implementation takes it as a signal but may not start resolution.
157-
/// </para>
158159
/// </summary>
159160
/// <param name="cancellationToken">A cancellation token.</param>
160161
/// <returns>A task.</returns>

src/Grpc.Net.Client/Balancer/Resolver.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,15 @@ public abstract class Resolver : IDisposable
6060

6161
/// <summary>
6262
/// Refresh resolution. Can only be called after <see cref="Start(Action{ResolverResult})"/>.
63+
/// The default implementation is no-op.
6364
/// <para>
6465
/// This is only a hint. Implementation takes it as a signal but may not start resolution.
6566
/// </para>
6667
/// </summary>
67-
public abstract void Refresh();
68+
public virtual void Refresh()
69+
{
70+
// no-op
71+
}
6872

6973
/// <summary>
7074
/// Releases the unmanaged resources used by the <see cref="LoadBalancer"/> and optionally releases

src/Grpc.Net.Client/Balancer/StaticResolver.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,6 @@ public override void Start(Action<ResolverResult> listener)
5151
// Send addresses to listener once. They will never change.
5252
listener(ResolverResult.ForResult(_addresses, serviceConfig: null, serviceConfigStatus: null));
5353
}
54-
55-
public override void Refresh()
56-
{
57-
// no-op
58-
}
5954
}
6055

6156
/// <summary>

test/Grpc.Net.Client.Tests/GrpcChannelTests.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -841,11 +841,6 @@ public override void Start(Action<ResolverResult> listener)
841841
{
842842
throw new NotImplementedException();
843843
}
844-
845-
public override void Refresh()
846-
{
847-
throw new NotImplementedException();
848-
}
849844
}
850845
#endif
851846

test/Shared/TestResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
namespace Grpc.Tests.Shared
3232
{
33-
internal class TestResolver : AsyncResolver
33+
internal class TestResolver : PollingResolver
3434
{
3535
private readonly Func<Task>? _onRefreshAsync;
3636
private readonly TaskCompletionSource<object?> _hasResolvedTcs;

0 commit comments

Comments
 (0)