fix(dotnet-client): no ack retry, caller-owned channels, safe session dispose, typed diagnostics, AttachSession
This commit is contained in:
@@ -22,6 +22,7 @@ public sealed class GalaxyRepositoryClient : IAsyncDisposable
|
||||
private const int BrowseChildrenPageSize = 500;
|
||||
|
||||
private readonly GrpcChannel? _channel;
|
||||
private readonly bool _ownsChannel;
|
||||
private readonly IGalaxyRepositoryClientTransport _transport;
|
||||
private readonly ResiliencePipeline _safeUnaryRetryPipeline;
|
||||
private bool _disposed;
|
||||
@@ -48,9 +49,11 @@ public sealed class GalaxyRepositoryClient : IAsyncDisposable
|
||||
|
||||
private GalaxyRepositoryClient(
|
||||
GrpcChannel channel,
|
||||
IGalaxyRepositoryClientTransport transport)
|
||||
IGalaxyRepositoryClientTransport transport,
|
||||
bool ownsChannel)
|
||||
{
|
||||
_channel = channel;
|
||||
_ownsChannel = ownsChannel;
|
||||
_transport = transport;
|
||||
Options = transport.Options;
|
||||
_safeUnaryRetryPipeline = MxGatewayClientRetryPolicy.Create(
|
||||
@@ -95,7 +98,32 @@ public sealed class GalaxyRepositoryClient : IAsyncDisposable
|
||||
channel,
|
||||
new GrpcGalaxyRepositoryClientTransport(
|
||||
options,
|
||||
new GalaxyRepository.GalaxyRepositoryClient(channel)));
|
||||
new GalaxyRepository.GalaxyRepositoryClient(channel)),
|
||||
ownsChannel: true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a Galaxy Repository client over a caller-owned <see cref="GrpcChannel"/>.
|
||||
/// The client does not dispose the channel; the caller controls its lifetime and any
|
||||
/// TLS/handler configuration.
|
||||
/// </summary>
|
||||
/// <param name="channel">An existing channel, shared or pre-configured by the caller.</param>
|
||||
/// <param name="options">Client options (API key, timeouts, retry).</param>
|
||||
/// <returns>A new client instance that does not own the channel.</returns>
|
||||
public static GalaxyRepositoryClient Create(
|
||||
GrpcChannel channel,
|
||||
MxGatewayClientOptions options)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(channel);
|
||||
ArgumentNullException.ThrowIfNull(options);
|
||||
options.Validate();
|
||||
|
||||
return new GalaxyRepositoryClient(
|
||||
channel,
|
||||
new GrpcGalaxyRepositoryClientTransport(
|
||||
options,
|
||||
new GalaxyRepository.GalaxyRepositoryClient(channel)),
|
||||
ownsChannel: false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -436,7 +464,11 @@ public sealed class GalaxyRepositoryClient : IAsyncDisposable
|
||||
}
|
||||
|
||||
_disposed = true;
|
||||
_channel?.Dispose();
|
||||
if (_ownsChannel)
|
||||
{
|
||||
_channel?.Dispose();
|
||||
}
|
||||
|
||||
return ValueTask.CompletedTask;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user