From 72673999702270aef00c96d2db66bbe2c20fcf38 Mon Sep 17 00:00:00 2001 From: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com> Date: Fri, 13 Oct 2023 10:02:41 -0700 Subject: [PATCH] Refactor cleanup (#39264) --- .../Config/ServiceBusHostBuilderExtensions.cs | 2 +- .../Primitives/CachedClientCleanupService.cs | 46 ------------------- .../src/Primitives/CleanupService.cs | 29 ++++++++++++ .../src/Primitives/MessagingProvider.cs | 25 ++++++++++ 4 files changed, 55 insertions(+), 47 deletions(-) delete mode 100644 sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CachedClientCleanupService.cs create mode 100644 sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs index 7131723924936..c110b1daef908 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Config/ServiceBusHostBuilderExtensions.cs @@ -110,7 +110,7 @@ public static IWebJobsBuilder AddServiceBus(this IWebJobsBuilder builder, Action builder.Services.AddAzureClientsCore(); builder.Services.TryAddSingleton(); - builder.Services.AddHostedService(); + builder.Services.AddHostedService(); builder.Services.AddSingleton(); #if NET6_0_OR_GREATER builder.Services.AddSingleton(); diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CachedClientCleanupService.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CachedClientCleanupService.cs deleted file mode 100644 index 635d2e390e7bb..0000000000000 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CachedClientCleanupService.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.Azure.WebJobs.ServiceBus -{ - internal class CachedClientCleanupService : IHostedService - { - private readonly MessagingProvider _provider; - - public CachedClientCleanupService(MessagingProvider provider) - { - _provider = provider; - } - - public Task StartAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - - public async Task StopAsync(CancellationToken cancellationToken) - { - foreach (var receiver in _provider.MessageReceiverCache.Values) - { - await receiver.DisposeAsync().ConfigureAwait(false); - } - _provider.MessageReceiverCache.Clear(); - - foreach (var sender in _provider.MessageSenderCache.Values) - { - await sender.DisposeAsync().ConfigureAwait(false); - } - _provider.MessageSenderCache.Clear(); - - foreach (var client in _provider.ClientCache.Values) - { - await client.DisposeAsync().ConfigureAwait(false); - } - _provider.ClientCache.Clear(); - _provider.ActionsCache.Clear(); - } - } -} \ No newline at end of file diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs new file mode 100644 index 0000000000000..20c62728c220f --- /dev/null +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/CleanupService.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.Azure.WebJobs.ServiceBus +{ + internal class CleanupService : IHostedService + { + private readonly MessagingProvider _provider; + + public CleanupService(MessagingProvider provider) + { + _provider = provider; + } + + public Task StartAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + + public async Task StopAsync(CancellationToken cancellationToken) + { + await _provider.DisposeAsync().ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/MessagingProvider.cs b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/MessagingProvider.cs index 84af7e4585741..c3ecd8fe12d15 100644 --- a/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/MessagingProvider.cs +++ b/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Primitives/MessagingProvider.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Concurrent; +using System.Threading.Tasks; using Azure.Core; using Azure.Messaging.ServiceBus; using Microsoft.Azure.WebJobs.ServiceBus.Listeners; @@ -218,5 +219,29 @@ private static string GenerateCacheKey(string fullyQualifiedNamespace, string en { return $"{fullyQualifiedNamespace}/{entityPath}"; } + + // This class does not implement IAsyncDisposable as doing so could break existing user code. We can consider making this break + // on the next major version upgrade. + internal async Task DisposeAsync() + { + foreach (var receiver in MessageReceiverCache.Values) + { + await receiver.DisposeAsync().ConfigureAwait(false); + } + MessageReceiverCache.Clear(); + + foreach (var sender in MessageSenderCache.Values) + { + await sender.DisposeAsync().ConfigureAwait(false); + } + MessageSenderCache.Clear(); + + foreach (var client in ClientCache.Values) + { + await client.DisposeAsync().ConfigureAwait(false); + } + ClientCache.Clear(); + ActionsCache.Clear(); + } } }