From e5e3fd4bc97dddd26ea0382d490cceee868a3b2b Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Mon, 8 Jul 2019 08:05:57 +0200 Subject: [PATCH 01/10] Warn about timeout manager --- .../SqlServerTransportInfrastructure.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs index d84f86be6..2aa0fc91c 100644 --- a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs +++ b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs @@ -7,6 +7,7 @@ namespace NServiceBus.Transport.SQLServer using System.Transactions; using DelayedDelivery; using Features; + using NServiceBus.Logging; using Performance.TimeToBeReceived; using Routing; using Settings; @@ -24,6 +25,11 @@ internal SqlServerTransportInfrastructure(QueueAddressTranslator addressTranslat delayedDeliverySettings = settings.GetOrDefault(); var timeoutManagerFeatureDisabled = !settings.IsFeatureEnabled(typeof(TimeoutManager)); + if (!timeoutManagerFeatureDisabled) + { + Logger.Warn("TimeoutManager feature has been enabled. SqlTransport supports delayed delivery natively and it is recommended to use the Native Timeout Manager instead."); + } + diagnostics.Add("NServiceBus.Transport.SqlServer.TimeoutManager", new { FeatureEnabled = !timeoutManagerFeatureDisabled @@ -344,5 +350,6 @@ public override string MakeCanonicalForm(string transportAddress) DelayedMessageHandler delayedMessageHandler; DelayedDeliverySettings delayedDeliverySettings; Dictionary diagnostics = new Dictionary(); + static ILog Logger = LogManager.GetLogger(); } } \ No newline at end of file From d77f3a868b27971f1d30c928ef7c7591a8877bd2 Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Mon, 8 Jul 2019 08:56:22 +0200 Subject: [PATCH 02/10] Remove qualifier --- src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs index 2aa0fc91c..bfa3eedaa 100644 --- a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs +++ b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs @@ -7,7 +7,7 @@ namespace NServiceBus.Transport.SQLServer using System.Transactions; using DelayedDelivery; using Features; - using NServiceBus.Logging; + using Logging; using Performance.TimeToBeReceived; using Routing; using Settings; From 3c197f9b47ce187276d560235265574553480912 Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Tue, 9 Jul 2019 07:52:10 +0200 Subject: [PATCH 03/10] Move timeout check later in pipeline --- .../DelayedDelivery/DelayedDeliveryInfrastructure.cs | 10 ++++++++++ .../SqlServerTransportInfrastructure.cs | 6 ------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs index 8d2e0e444..564ded404 100644 --- a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs +++ b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs @@ -1,11 +1,19 @@ namespace NServiceBus.Transport.SQLServer { + using NServiceBus.Features; + using NServiceBus.Logging; using Settings; static class DelayedDeliveryInfrastructure { public static StartupCheckResult CheckForInvalidSettings(SettingsHolder settings) { + var timeoutManagerEnabled = settings.IsFeatureEnabled(typeof(TimeoutManager)); + if (timeoutManagerEnabled) + { + Logger.Warn("Current configuration of the endpoint uses TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery`."); + } + var sendOnlyEndpoint = settings.GetOrDefault("Endpoint.SendOnly"); if (sendOnlyEndpoint) { @@ -13,5 +21,7 @@ public static StartupCheckResult CheckForInvalidSettings(SettingsHolder settings } return StartupCheckResult.Success; } + + static ILog Logger = LogManager.GetLogger("DelayedDeliveryInfrastructure"); } } \ No newline at end of file diff --git a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs index bfa3eedaa..06cfa0ec1 100644 --- a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs +++ b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs @@ -25,11 +25,6 @@ internal SqlServerTransportInfrastructure(QueueAddressTranslator addressTranslat delayedDeliverySettings = settings.GetOrDefault(); var timeoutManagerFeatureDisabled = !settings.IsFeatureEnabled(typeof(TimeoutManager)); - if (!timeoutManagerFeatureDisabled) - { - Logger.Warn("TimeoutManager feature has been enabled. SqlTransport supports delayed delivery natively and it is recommended to use the Native Timeout Manager instead."); - } - diagnostics.Add("NServiceBus.Transport.SqlServer.TimeoutManager", new { FeatureEnabled = !timeoutManagerFeatureDisabled @@ -350,6 +345,5 @@ public override string MakeCanonicalForm(string transportAddress) DelayedMessageHandler delayedMessageHandler; DelayedDeliverySettings delayedDeliverySettings; Dictionary diagnostics = new Dictionary(); - static ILog Logger = LogManager.GetLogger(); } } \ No newline at end of file From 57aecf87cba20ca1b314fdaff08b3e5ae0bd86a5 Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Tue, 9 Jul 2019 07:52:50 +0200 Subject: [PATCH 04/10] Remove specifier --- .../DelayedDelivery/DelayedDeliveryInfrastructure.cs | 4 ++-- src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs index 564ded404..da56be91b 100644 --- a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs +++ b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs @@ -1,7 +1,7 @@ namespace NServiceBus.Transport.SQLServer { - using NServiceBus.Features; - using NServiceBus.Logging; + using Features; + using Logging; using Settings; static class DelayedDeliveryInfrastructure diff --git a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs index 06cfa0ec1..d84f86be6 100644 --- a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs +++ b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs @@ -7,7 +7,6 @@ namespace NServiceBus.Transport.SQLServer using System.Transactions; using DelayedDelivery; using Features; - using Logging; using Performance.TimeToBeReceived; using Routing; using Settings; From 436fd7d61f191bfd99b830dad8221f3a1bbc1fe2 Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Thu, 11 Jul 2019 15:12:35 +0200 Subject: [PATCH 05/10] Check active instead of enabled --- .../DelayedDelivery/DelayedDeliveryInfrastructure.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs index da56be91b..abbf15679 100644 --- a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs +++ b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs @@ -8,7 +8,7 @@ static class DelayedDeliveryInfrastructure { public static StartupCheckResult CheckForInvalidSettings(SettingsHolder settings) { - var timeoutManagerEnabled = settings.IsFeatureEnabled(typeof(TimeoutManager)); + var timeoutManagerEnabled = settings.GetOrDefault(typeof(TimeoutManager).FullName) == FeatureState.Active; if (timeoutManagerEnabled) { Logger.Warn("Current configuration of the endpoint uses TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery`."); From a9d272f519bca1214f5901860bd2f3ce9f2d3152 Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Thu, 11 Jul 2019 15:24:35 +0200 Subject: [PATCH 06/10] Always check for TimeoutManager --- .../DelayedDeliveryInfrastructure.cs | 13 +++++++++---- .../SqlServerTransportInfrastructure.cs | 10 +--------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs index abbf15679..3d830501a 100644 --- a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs +++ b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs @@ -11,14 +11,19 @@ public static StartupCheckResult CheckForInvalidSettings(SettingsHolder settings var timeoutManagerEnabled = settings.GetOrDefault(typeof(TimeoutManager).FullName) == FeatureState.Active; if (timeoutManagerEnabled) { - Logger.Warn("Current configuration of the endpoint uses TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery`."); + Logger.Warn("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`."); } - var sendOnlyEndpoint = settings.GetOrDefault("Endpoint.SendOnly"); - if (sendOnlyEndpoint) + var delayedDeliverySettings = settings.GetOrDefault(); + if (delayedDeliverySettings != null) { - return StartupCheckResult.Failed("Native delayed delivery is only supported for endpoints capable of receiving messages."); + var sendOnlyEndpoint = settings.GetOrDefault("Endpoint.SendOnly"); + if (sendOnlyEndpoint) + { + return StartupCheckResult.Failed("Native delayed delivery is only supported for endpoints capable of receiving messages."); + } } + return StartupCheckResult.Success; } diff --git a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs index d84f86be6..5ded99732 100644 --- a/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs +++ b/src/NServiceBus.SqlServer/SqlServerTransportInfrastructure.cs @@ -222,15 +222,7 @@ public override TransportSendInfrastructure ConfigureSendInfrastructure() var dispatcher = new MessageDispatcher(new TableBasedQueueDispatcher(connectionFactory, queueOperationsReader), addressTranslator); return dispatcher; }, - () => - { - var result = StartupCheckResult.Success; - if (delayedDeliverySettings != null) - { - result = DelayedDeliveryInfrastructure.CheckForInvalidSettings(settings); - } - return Task.FromResult(result); - }); + () => Task.FromResult(DelayedDeliveryInfrastructure.CheckForInvalidSettings(settings))); } DelayedMessageTable CreateDelayedMessageTable() From 71824ae676358edd8f8d5622664190a000299f4c Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Fri, 12 Jul 2019 10:42:06 +0200 Subject: [PATCH 07/10] Add tests for log state --- .../When_configuring_delayed_delivery.cs | 91 +++++++++++++++++++ .../DelayedDeliveryInfrastructure.cs | 14 +-- 2 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs diff --git a/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs new file mode 100644 index 000000000..906449133 --- /dev/null +++ b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs @@ -0,0 +1,91 @@ +namespace NServiceBus.AcceptanceTests.NativeTimeouts +{ + using System.Linq; + using System.Threading.Tasks; + using AcceptanceTesting; + using EndpointTemplates; + using Features; + using Logging; + using NUnit.Framework; + using Transport.SQLServer; + + public class When_configuring_delayed_delivery : NServiceBusAcceptanceTest + { + [Test] + public async Task Should_warn_when_timeoutmanager_is_configured_without_native_delayed_delivery() + { + Requires.MessageDrivenPubSub(); + + var context = await Scenario.Define() + .WithEndpoint() + .Done(c => c.EndpointsStarted) + .Run(); + + Assert.True(context.EndpointsStarted, "because it should not prevent endpoint startup"); + + var log = context.Logs.Single(l => l.Message.Contains("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`.")); + Assert.AreEqual(LogLevel.Warn, log.Level); + } + + [Test] + public async Task Should_not_warn_when_timeoutmanager_and_native_delayed_delivery_are_both_configured() + { + Requires.MessageDrivenPubSub(); + + var context = await Scenario.Define() + .WithEndpoint() + .Done(c => c.EndpointsStarted) + .Run(); + + Assert.True(context.EndpointsStarted, "because it should not prevent endpoint startup"); + + Assert.IsEmpty(context.Logs.Where(l => l.Message.Contains("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`."))); + } + + [Test] + public async Task Should_not_warn_when_only_native_delayed_delivery_is_configured() + { + Requires.MessageDrivenPubSub(); + + var context = await Scenario.Define() + .WithEndpoint() + .Done(c => c.EndpointsStarted) + .Run(); + + Assert.True(context.EndpointsStarted, "because it should not prevent endpoint startup"); + + Assert.IsEmpty(context.Logs.Where(l => l.Message.Contains("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`."))); + } + + public class EndpointWithTimeoutManagerAndNotNative : EndpointConfigurationBuilder + { + public EndpointWithTimeoutManagerAndNotNative() + { + EndpointSetup(config => config.EnableFeature()); + } + } + + public class EndpointWithTimeoutManagerAndNative : EndpointConfigurationBuilder + { + public EndpointWithTimeoutManagerAndNative() + { + EndpointSetup(config => + { + config.UseTransport().UseNativeDelayedDelivery(); + config.EnableFeature(); + }); + } + } + + public class EndpointWithOnlyNative : EndpointConfigurationBuilder + { + public EndpointWithOnlyNative() + { + EndpointSetup(config => + { + config.UseTransport().UseNativeDelayedDelivery(); + }); + } + } + } +} \ No newline at end of file diff --git a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs index 3d830501a..992f7ef39 100644 --- a/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs +++ b/src/NServiceBus.SqlServer/DelayedDelivery/DelayedDeliveryInfrastructure.cs @@ -8,12 +8,6 @@ static class DelayedDeliveryInfrastructure { public static StartupCheckResult CheckForInvalidSettings(SettingsHolder settings) { - var timeoutManagerEnabled = settings.GetOrDefault(typeof(TimeoutManager).FullName) == FeatureState.Active; - if (timeoutManagerEnabled) - { - Logger.Warn("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`."); - } - var delayedDeliverySettings = settings.GetOrDefault(); if (delayedDeliverySettings != null) { @@ -23,6 +17,14 @@ public static StartupCheckResult CheckForInvalidSettings(SettingsHolder settings return StartupCheckResult.Failed("Native delayed delivery is only supported for endpoints capable of receiving messages."); } } + else + { + var timeoutManagerEnabled = settings.IsFeatureActive(typeof(TimeoutManager)); + if (timeoutManagerEnabled) + { + Logger.Warn("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`."); + } + } return StartupCheckResult.Success; } From 9ed3e849d84d90bf3398b9f2dc3e4cc3470914f1 Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Mon, 15 Jul 2019 10:28:55 +0200 Subject: [PATCH 08/10] Disable timeout compatibility --- .../NativeTimeouts/When_configuring_delayed_delivery.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs index 906449133..e6363e48a 100644 --- a/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs +++ b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs @@ -83,7 +83,8 @@ public EndpointWithOnlyNative() { EndpointSetup(config => { - config.UseTransport().UseNativeDelayedDelivery(); + var settings = config.UseTransport().UseNativeDelayedDelivery(); + settings.DisableTimeoutManagerCompatibility(); }); } } From 5fc4978928a846329342688ac0a1411fc4c426a8 Mon Sep 17 00:00:00 2001 From: WilliamBZA Date: Wed, 17 Jul 2019 17:52:00 +0200 Subject: [PATCH 09/10] Add missing test case --- .../When_configuring_delayed_delivery.cs | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs index e6363e48a..43c933d3f 100644 --- a/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs +++ b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs @@ -57,6 +57,21 @@ public async Task Should_not_warn_when_only_native_delayed_delivery_is_configure Assert.IsEmpty(context.Logs.Where(l => l.Message.Contains("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`."))); } + [Test] + public async Task Should_not_warn_when_both_native_delayed_delivery_and_timeoutmanage_is_configured_with_compatibility_disabled() + { + Requires.MessageDrivenPubSub(); + + var context = await Scenario.Define() + .WithEndpoint() + .Done(c => c.EndpointsStarted) + .Run(); + + Assert.True(context.EndpointsStarted, "because it should not prevent endpoint startup"); + + Assert.IsEmpty(context.Logs.Where(l => l.Message.Contains("Current configuration of the endpoint uses the TimeoutManager feature for delayed delivery - an option which is not recommended for new deployments. SqlTransport native delayed delivery should be used instead. It can be enabled by calling `UseNativeDelayedDelivery()`."))); + } + public class EndpointWithTimeoutManagerAndNotNative : EndpointConfigurationBuilder { public EndpointWithTimeoutManagerAndNotNative() @@ -71,8 +86,8 @@ public EndpointWithTimeoutManagerAndNative() { EndpointSetup(config => { - config.UseTransport().UseNativeDelayedDelivery(); config.EnableFeature(); + config.UseTransport().UseNativeDelayedDelivery(); }); } } @@ -88,5 +103,19 @@ public EndpointWithOnlyNative() }); } } + + public class EndpointWithTimeoutManagerAndNativeEnabledButCompatibilityDisabled : EndpointConfigurationBuilder + { + public EndpointWithTimeoutManagerAndNativeEnabledButCompatibilityDisabled() + { + EndpointSetup(config => + { + config.EnableFeature(); + + var settings = config.UseTransport().UseNativeDelayedDelivery(); + settings.DisableTimeoutManagerCompatibility(); + }); + } + } } } \ No newline at end of file From 58f2256c50d78bae21a96cdc4c2ec5fbd8494f17 Mon Sep 17 00:00:00 2001 From: Brandon Ording Date: Tue, 23 Jul 2019 11:06:47 -0400 Subject: [PATCH 10/10] Typo --- .../NativeTimeouts/When_configuring_delayed_delivery.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs index 43c933d3f..4b8cefd91 100644 --- a/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs +++ b/src/NServiceBus.SqlServer.AcceptanceTests/NativeTimeouts/When_configuring_delayed_delivery.cs @@ -58,7 +58,7 @@ public async Task Should_not_warn_when_only_native_delayed_delivery_is_configure } [Test] - public async Task Should_not_warn_when_both_native_delayed_delivery_and_timeoutmanage_is_configured_with_compatibility_disabled() + public async Task Should_not_warn_when_both_native_delayed_delivery_and_timeoutmanager_is_configured_with_compatibility_disabled() { Requires.MessageDrivenPubSub(); @@ -118,4 +118,4 @@ public EndpointWithTimeoutManagerAndNativeEnabledButCompatibilityDisabled() } } } -} \ No newline at end of file +}