Skip to content

Commit

Permalink
Activate the JTF integration on descriptors automatically at the cont…
Browse files Browse the repository at this point in the history
…ainer level
  • Loading branch information
AArnott committed Mar 1, 2023
1 parent 85a76e5 commit 9ad93b0
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,7 @@ public void Dispose()
: this.Descriptor;

IServiceBroker serviceBroker = this.Container.GetSecureServiceBroker(options);
descriptor = descriptor
.WithTraceSource(await this.Container.GetTraceSourceForConnectionAsync(serviceBroker, serviceMoniker, options, clientRole: false, cancellationToken).ConfigureAwait(false));
descriptor = await this.Container.ApplyDescriptorSettingsAsync(descriptor, serviceBroker, options, clientRole: false, cancellationToken).ConfigureAwait(false);

using (options.ApplyCultureToCurrentContext())
{
Expand Down Expand Up @@ -151,8 +150,7 @@ public void Dispose()
cancellationToken.ThrowIfCancellationRequested();

IServiceBroker serviceBroker = this.Container.GetSecureServiceBroker(options);
serviceDescriptor = serviceDescriptor
.WithTraceSource(await this.Container.GetTraceSourceForConnectionAsync(serviceBroker, serviceDescriptor.Moniker, options, clientRole: false, cancellationToken).ConfigureAwait(false));
serviceDescriptor = await this.Container.ApplyDescriptorSettingsAsync(serviceDescriptor, serviceBroker, options, clientRole: false, cancellationToken).ConfigureAwait(false);

object? liveObject = await this.InvokeFactoryAsync(serviceBroker, serviceDescriptor.Moniker, options, cancellationToken).ConfigureAwait(false);
try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ internal ProfferedViewIntrinsicService(GlobalBrokeredServiceContainer container,
: this.Descriptor;

IServiceBroker serviceBroker = this.Container.GetSecureServiceBroker(options);
descriptor = descriptor
.WithTraceSource(await this.Container.GetTraceSourceForConnectionAsync(serviceBroker, serviceMoniker, options, clientRole: false, cancellationToken).ConfigureAwait(false));
descriptor = await this.Container.ApplyDescriptorSettingsAsync(descriptor, serviceBroker, options, clientRole: false, cancellationToken).ConfigureAwait(false);

using (options.ApplyCultureToCurrentContext())
{
Expand Down Expand Up @@ -114,8 +113,7 @@ internal ProfferedViewIntrinsicService(GlobalBrokeredServiceContainer container,
where T : class
{
IServiceBroker serviceBroker = this.Container.GetSecureServiceBroker(options);
serviceDescriptor = serviceDescriptor
.WithTraceSource(await this.Container.GetTraceSourceForConnectionAsync(serviceBroker, serviceDescriptor.Moniker, options, clientRole: false, cancellationToken).ConfigureAwait(false));
serviceDescriptor = await this.Container.ApplyDescriptorSettingsAsync(serviceDescriptor, serviceBroker, options, clientRole: false, cancellationToken).ConfigureAwait(false);
var liveObject = (T?)await this.factory(view, serviceDescriptor.Moniker, options, serviceBroker, cancellationToken).ConfigureAwait(false);
return serviceDescriptor.ConstructLocalProxy(liveObject);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,7 @@ public event EventHandler<BrokeredServicesChangedEventArgs>? AvailabilityChanged
(proffered, errorCode) = await this.TryGetProfferingSourceAsync(serviceDescriptor.Moniker, cancellationToken).ConfigureAwait(false);
if (proffered is object)
{
serviceDescriptor = serviceDescriptor
.WithTraceSource(await this.container.GetTraceSourceForConnectionAsync(this, serviceDescriptor.Moniker, options, clientRole: true, cancellationToken).ConfigureAwait(false));
serviceDescriptor = await this.container.ApplyDescriptorSettingsAsync(serviceDescriptor, this, options, clientRole: true, cancellationToken).ConfigureAwait(false);

GC.KeepAlive(typeof(ValueTask<T>)); // workaround CLR bug https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1358442
T? proxy = proffered is ProfferedViewIntrinsicService viewIntrinsic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,23 @@ public IServiceBroker GetSecureServiceBroker(ServiceActivationOptions options)
/// </devremarks>
public ValueTask<TraceSource?> GetTraceSourceForBrokeredServiceAsync(IServiceBroker serviceBroker, ServiceMoniker serviceMoniker, ServiceActivationOptions options, bool clientRole, CancellationToken cancellationToken) => this.GetTraceSourceForConnectionAsync(serviceBroker, serviceMoniker, options, clientRole, cancellationToken);

/// <summary>
/// Applies typical transformations on a descriptor fro brokered service clients and services.
/// </summary>
/// <param name="descriptor">The stock descriptor used for this service.</param>
/// <param name="serviceBroker">A service broker that may be used to acquire other, related services as necessary to mutate the <paramref name="descriptor"/>.</param>
/// <param name="serviceActivationOptions">The activation options for the service.</param>
/// <param name="clientRole">A value indicating whether the <paramref name="descriptor"/> is about to be used to activate a client proxy or client connection; use <see langword="false" /> when activating the service itself.</param>
/// <param name="cancellationToken">A cancellation token.</param>
/// <returns>The modified descriptor.</returns>
internal async ValueTask<ServiceRpcDescriptor> ApplyDescriptorSettingsAsync(ServiceRpcDescriptor descriptor, IServiceBroker serviceBroker, ServiceActivationOptions serviceActivationOptions, bool clientRole, CancellationToken cancellationToken)
{
TraceSource? traceSource = await this.GetTraceSourceForConnectionAsync(serviceBroker, descriptor.Moniker, serviceActivationOptions, clientRole, cancellationToken).ConfigureAwait(false);
return descriptor
.WithJoinableTaskFactory(this.joinableTaskFactory)
.WithTraceSource(traceSource);
}

/// <summary>
/// Registers a set of services with the global broker. This is separate from proffering a service. A service should be registered before it is proffered.
/// An <see cref="IServiceBroker.AvailabilityChanged"/> event is never
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,7 @@ public void RegisterAndProfferServices(GlobalBrokeredServiceContainer container)
return null;
}

ServiceRpcDescriptor descriptor = brokeredService.Descriptor
.WithTraceSource(await container.GetTraceSourceForBrokeredServiceAsync(contextualServiceBroker, serviceMoniker, options, clientRole: false, cancellationToken).ConfigureAwait(false));
ServiceRpcDescriptor descriptor = await container.ApplyDescriptorSettingsAsync(brokeredService.Descriptor, contextualServiceBroker, options, clientRole: false, cancellationToken).ConfigureAwait(false);

if (descriptor is ServiceJsonRpcDescriptor { MultiplexingStreamOptions: null } oldJsonRpcDescriptor)
{
Expand Down Expand Up @@ -163,8 +162,7 @@ public void RegisterAndProfferServices(GlobalBrokeredServiceContainer container)

try
{
serviceDescriptor = serviceDescriptor
.WithTraceSource(await container.GetTraceSourceForBrokeredServiceAsync(contextualServiceBroker, serviceDescriptor.Moniker, options, clientRole: false, cancellationToken).ConfigureAwait(false));
serviceDescriptor = await container.ApplyDescriptorSettingsAsync(serviceDescriptor, contextualServiceBroker, options, clientRole: false, cancellationToken).ConfigureAwait(false);

brokeredService = await export.Value.CreateBrokeredServiceAsync(cancellationToken).ConfigureAwait(false);
if (brokeredService is null)
Expand Down

0 comments on commit 9ad93b0

Please sign in to comment.