From f5a95d5d6df61f5633e7e2b2dad624058e2f5822 Mon Sep 17 00:00:00 2001 From: Rhys Bevilaqua Date: Tue, 3 Nov 2026 11:13:29 +0800 Subject: [PATCH 1/3] Rename PersistenceType to StorageType --- .../AcceptanceTestStorageConfiguration.cs | 2 +- .../AcceptanceTestStorageConfiguration.cs | 2 +- .../StartupModeTests.cs | 2 +- .../AcceptanceTestStorageConfiguration.cs | 2 +- .../ClockRegistrationTests.cs | 2 +- .../MaintenanceModeTests.cs | 4 +-- .../When_hosting_error_ingestion_only.cs | 2 +- .../IAcceptanceTestStorageConfiguration.cs | 2 +- .../ServiceControlComponentRunner.cs | 2 +- ...hen_triggering_a_manual_retention_purge.cs | 6 ++-- .../AcceptanceTestStorageConfiguration.cs | 2 +- .../AcceptanceTestStorageConfiguration.cs | 2 +- .../AcceptanceTestStorageConfiguration.cs | 2 +- .../AcceptanceTest.cs | 2 +- .../MaintenanceModeTests.cs | 4 +-- .../IAcceptanceTestStorageConfiguration.cs | 2 +- .../ServiceControlComponentRunner.cs | 2 +- .../PersistenceManifest.cs | 16 ++++----- ...rovals.PlatformSampleSettings.approved.txt | 2 +- .../PersistenceManifestLibraryTests.cs | 4 +-- src/ServiceControl.Audit/App.config | 8 ++--- src/ServiceControl.Audit/Dockerfile | 2 +- .../HostApplicationBuilderExtensions.cs | 2 +- .../Commands/MaintenanceModeCommand.cs | 2 +- .../Infrastructure/Settings/Settings.cs | 6 ++-- .../Infrastructure/WebApi/RootController.cs | 2 +- .../PersistenceConfigurationFactory.cs | 4 +-- .../SharedRavenStorageConfiguration.cs | 4 +-- .../PersistenceManifest.cs | 22 ++++++------ .../API/APIApprovals.cs | 2 +- src/ServiceControl/App.config | 6 ++-- src/ServiceControl/Dockerfile | 2 +- .../Commands/ErrorIngestionOnlyCommand.cs | 4 +-- .../Infrastructure/Settings/Settings.cs | 6 ++-- .../Persistence/PersistenceFactory.cs | 6 ++-- ..._expected_config_file.RavenDB.approved.txt | 2 +- ...odern_raven_for_new_instances.approved.txt | 2 +- .../Validation/StorageEngineUpgradeTests.cs | 2 +- .../AuditInstanceSettingsList.cs | 10 +++++- .../ServiceControl/ServiceControlAppConfig.cs | 3 +- .../ServiceControlAuditAppConfig.cs | 3 +- .../ServiceControl/SettingsList.cs | 10 +++++- .../Instances/ServiceControlAuditInstance.cs | 15 ++++++-- .../Instances/ServiceControlInstance.cs | 15 ++++++-- tools/testing-tool/README.md | 26 +++++++------- .../TestingTool.AppHost/AppHost.cs | 12 +++---- .../HostBuilderExtensions.cs | 34 +++++++++---------- .../{PersistenceType.cs => StorageType.cs} | 4 +-- .../TestingTool/wwwroot/index.html | 2 +- 49 files changed, 159 insertions(+), 123 deletions(-) rename tools/testing-tool/TestingTool.AppHost/{PersistenceType.cs => StorageType.cs} (72%) diff --git a/src/ServiceControl.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs b/src/ServiceControl.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs index 786d9b4cb4..384f1c8a38 100644 --- a/src/ServiceControl.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs @@ -13,7 +13,7 @@ namespace ServiceControl.AcceptanceTests.PostgreSql; public class AcceptanceTestStorageConfiguration : IAcceptanceTestStorageConfiguration { - public string PersistenceType { get; } = "PostgreSQL"; + public string StorageType { get; } = "PostgreSQL"; public async Task CustomizeSettings(Settings settings, CancellationToken cancellationToken = default) { diff --git a/src/ServiceControl.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs b/src/ServiceControl.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs index 29ef393e10..59a727951b 100644 --- a/src/ServiceControl.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs @@ -12,7 +12,7 @@ public class AcceptanceTestStorageConfiguration : IAcceptanceTestStorageConfiguration { - public string PersistenceType { get; } = "RavenDB"; + public string StorageType { get; } = "RavenDB"; public async Task CustomizeSettings(Settings settings, CancellationToken cancellationToken = default) diff --git a/src/ServiceControl.AcceptanceTests.RavenDB/StartupModeTests.cs b/src/ServiceControl.AcceptanceTests.RavenDB/StartupModeTests.cs index 1cd5328ce9..7a7424db8a 100644 --- a/src/ServiceControl.AcceptanceTests.RavenDB/StartupModeTests.cs +++ b/src/ServiceControl.AcceptanceTests.RavenDB/StartupModeTests.cs @@ -28,7 +28,7 @@ public async Task InitializeSettings() transportType: transportIntegration.TypeName, forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(1), - persisterType: "RavenDB") + storageType: "RavenDB") { TransportConnectionString = transportIntegration.ConnectionString, AssemblyLoadContextResolver = static _ => AssemblyLoadContext.Default diff --git a/src/ServiceControl.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs b/src/ServiceControl.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs index fd453c930a..f51131109e 100644 --- a/src/ServiceControl.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs @@ -13,7 +13,7 @@ namespace ServiceControl.AcceptanceTests.SqlServer; public class AcceptanceTestStorageConfiguration : IAcceptanceTestStorageConfiguration { - public string PersistenceType { get; } = "SQLServer"; + public string StorageType { get; } = "SQLServer"; public async Task CustomizeSettings(Settings settings, CancellationToken cancellationToken = default) { diff --git a/src/ServiceControl.AcceptanceTests/ClockRegistrationTests.cs b/src/ServiceControl.AcceptanceTests/ClockRegistrationTests.cs index 7dba9a1c84..2c43b3c83b 100644 --- a/src/ServiceControl.AcceptanceTests/ClockRegistrationTests.cs +++ b/src/ServiceControl.AcceptanceTests/ClockRegistrationTests.cs @@ -20,7 +20,7 @@ public async Task InitializeSettings() { settings = new Settings( transportType: TransportIntegration.TypeName, - persisterType: StorageConfiguration.PersistenceType, + storageType: StorageConfiguration.StorageType, forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(1)) { diff --git a/src/ServiceControl.AcceptanceTests/MaintenanceModeTests.cs b/src/ServiceControl.AcceptanceTests/MaintenanceModeTests.cs index 549cd87221..bf3cfeb603 100644 --- a/src/ServiceControl.AcceptanceTests/MaintenanceModeTests.cs +++ b/src/ServiceControl.AcceptanceTests/MaintenanceModeTests.cs @@ -15,7 +15,7 @@ public void Should_refuse_maintenance_mode() { var settings = new Settings( transportType: TransportIntegration.TypeName, - persisterType: StorageConfiguration.PersistenceType, + storageType: StorageConfiguration.StorageType, forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(1)) { @@ -25,7 +25,7 @@ public void Should_refuse_maintenance_mode() var exception = Assert.Throws(() => new ServiceCollection().AddPersistence(settings, maintenanceMode: true)); - Assert.That(exception.Message, Does.Contain("Maintenance mode is not supported").And.Contain(StorageConfiguration.PersistenceType)); + Assert.That(exception.Message, Does.Contain("Maintenance mode is not supported").And.Contain(StorageConfiguration.StorageType)); } } } \ No newline at end of file diff --git a/src/ServiceControl.AcceptanceTests/Recoverability/When_hosting_error_ingestion_only.cs b/src/ServiceControl.AcceptanceTests/Recoverability/When_hosting_error_ingestion_only.cs index 58cef8074f..bb1be1345c 100644 --- a/src/ServiceControl.AcceptanceTests/Recoverability/When_hosting_error_ingestion_only.cs +++ b/src/ServiceControl.AcceptanceTests/Recoverability/When_hosting_error_ingestion_only.cs @@ -350,7 +350,7 @@ static async Task WaitForFailedMessage(IHost host, string m async Task CreateSettings() { - var settings = new Settings(TransportIntegration.TypeName, StorageConfiguration.PersistenceType, + var settings = new Settings(TransportIntegration.TypeName, StorageConfiguration.StorageType, CreateLoggingSettings(), forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(10)) { InstanceName = $"IngestOnly.{Guid.NewGuid():n}", diff --git a/src/ServiceControl.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs b/src/ServiceControl.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs index b79507a129..37b48e8604 100644 --- a/src/ServiceControl.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs @@ -7,7 +7,7 @@ namespace ServiceControl.AcceptanceTests.TestSupport; public interface IAcceptanceTestStorageConfiguration { - string PersistenceType { get; } + string StorageType { get; } Task CustomizeSettings(Settings settings, CancellationToken cancellationToken = default); diff --git a/src/ServiceControl.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs b/src/ServiceControl.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs index f810c9acf0..867316201e 100644 --- a/src/ServiceControl.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs +++ b/src/ServiceControl.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs @@ -61,7 +61,7 @@ async Task InitializeServiceControlCore(ScenarioContext context) var loggingSettings = new LoggingSettings(Settings.SettingsRootNamespace, defaultLevel: LogLevel.Debug, logPath: logPath); LoggerUtil.ActiveLoggers = Loggers.Test; - var settings = new Settings(transportToUse.TypeName, persistenceToUse.PersistenceType, loggingSettings, forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(10)) + var settings = new Settings(transportToUse.TypeName, persistenceToUse.StorageType, loggingSettings, forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(10)) { InstanceName = instanceName, AllowMessageEditing = true, diff --git a/src/ServiceControl.AcceptanceTests/WebApi/When_triggering_a_manual_retention_purge.cs b/src/ServiceControl.AcceptanceTests/WebApi/When_triggering_a_manual_retention_purge.cs index 91660ca073..e4239d72c4 100644 --- a/src/ServiceControl.AcceptanceTests/WebApi/When_triggering_a_manual_retention_purge.cs +++ b/src/ServiceControl.AcceptanceTests/WebApi/When_triggering_a_manual_retention_purge.cs @@ -17,7 +17,7 @@ class When_triggering_a_manual_retention_purge : AcceptanceTest [Test] public async Task Should_be_available_on_efcore_persisters() { - if (StorageConfiguration.PersistenceType == "RavenDB") + if (StorageConfiguration.StorageType == "RavenDB") { Assert.Ignore("RavenDB has no sweeper — covered by Should_return_501_on_a_ravendb_backed_instance."); return; @@ -67,7 +67,7 @@ await Define() [Test] public async Task Should_report_background_completion_via_status() { - if (StorageConfiguration.PersistenceType == "RavenDB") + if (StorageConfiguration.StorageType == "RavenDB") { Assert.Ignore("RavenDB has no sweeper — covered by Should_return_501_on_a_ravendb_backed_instance."); return; @@ -101,7 +101,7 @@ await Define() [Test] public async Task Should_return_501_on_a_ravendb_backed_instance() { - if (StorageConfiguration.PersistenceType != "RavenDB") + if (StorageConfiguration.StorageType != "RavenDB") { Assert.Ignore("EFCore persisters support the purge — covered by the efcore tests."); return; diff --git a/src/ServiceControl.Audit.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs b/src/ServiceControl.Audit.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs index 82c9ed933b..c06150463e 100644 --- a/src/ServiceControl.Audit.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.Audit.AcceptanceTests.PostgreSql/AcceptanceTestStorageConfiguration.cs @@ -12,7 +12,7 @@ namespace ServiceControl.Audit.AcceptanceTests.PostgreSql; public class AcceptanceTestStorageConfiguration : IAcceptanceTestStorageConfiguration { - public string PersistenceType { get; } = "PostgreSQL"; + public string StorageType { get; } = "PostgreSQL"; public async Task> CustomizeSettings(CancellationToken cancellationToken = default) { diff --git a/src/ServiceControl.Audit.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs b/src/ServiceControl.Audit.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs index 2a34743384..ae04b428cb 100644 --- a/src/ServiceControl.Audit.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.Audit.AcceptanceTests.RavenDB/AcceptanceTestStorageConfiguration.cs @@ -13,7 +13,7 @@ public class AcceptanceTestStorageConfiguration : IAcceptanceTestStorageConfiguration { - public string PersistenceType { get; } = "RavenDB"; + public string StorageType { get; } = "RavenDB"; EmbeddedDatabase databaseInstance; string databaseName; diff --git a/src/ServiceControl.Audit.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs b/src/ServiceControl.Audit.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs index 54c4b0a87d..89a51ffd5e 100644 --- a/src/ServiceControl.Audit.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.Audit.AcceptanceTests.SqlServer/AcceptanceTestStorageConfiguration.cs @@ -12,7 +12,7 @@ namespace ServiceControl.Audit.AcceptanceTests.SqlServer; public class AcceptanceTestStorageConfiguration : IAcceptanceTestStorageConfiguration { - public string PersistenceType { get; } = "SQLServer"; + public string StorageType { get; } = "SQLServer"; public async Task> CustomizeSettings(CancellationToken cancellationToken = default) { diff --git a/src/ServiceControl.Audit.AcceptanceTests/AcceptanceTest.cs b/src/ServiceControl.Audit.AcceptanceTests/AcceptanceTest.cs index dafe95f451..74fed98307 100644 --- a/src/ServiceControl.Audit.AcceptanceTests/AcceptanceTest.cs +++ b/src/ServiceControl.Audit.AcceptanceTests/AcceptanceTest.cs @@ -47,7 +47,7 @@ public void Setup() StorageConfiguration = new AcceptanceTestStorageConfiguration(); serviceControlRunnerBehavior = new ServiceControlComponentBehavior(TransportIntegration, StorageConfiguration, s => SetSettings(s), s => CustomConfiguration(s), d => SetStorageConfiguration(d), hb => CustomizeHostBuilder(hb)); - TestContext.Out.WriteLine($"Using persistence {StorageConfiguration.PersistenceType}"); + TestContext.Out.WriteLine($"Using storage type {StorageConfiguration.StorageType}"); } [TearDown] diff --git a/src/ServiceControl.Audit.AcceptanceTests/MaintenanceModeTests.cs b/src/ServiceControl.Audit.AcceptanceTests/MaintenanceModeTests.cs index 85e4ea25fd..c01418e8e6 100644 --- a/src/ServiceControl.Audit.AcceptanceTests/MaintenanceModeTests.cs +++ b/src/ServiceControl.Audit.AcceptanceTests/MaintenanceModeTests.cs @@ -13,7 +13,7 @@ class MaintenanceModeTests : AcceptanceTest [Test] public void Should_refuse_unsupported_persister_before_starting_host() { - var settings = new Settings(persisterType: StorageConfiguration.PersistenceType) + var settings = new Settings(storageType: StorageConfiguration.StorageType) { AssemblyLoadContextResolver = static _ => AssemblyLoadContext.Default }; @@ -21,7 +21,7 @@ public void Should_refuse_unsupported_persister_before_starting_host() var exception = Assert.ThrowsAsync(async () => await new MaintenanceModeCommand().Execute(new HostArguments([]), settings)); - Assert.That(exception.Message, Does.Contain("Maintenance mode is not supported").And.Contain(StorageConfiguration.PersistenceType)); + Assert.That(exception.Message, Does.Contain("Maintenance mode is not supported").And.Contain(StorageConfiguration.StorageType)); } } } diff --git a/src/ServiceControl.Audit.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs b/src/ServiceControl.Audit.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs index ad8c43e24b..909defdc76 100644 --- a/src/ServiceControl.Audit.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs +++ b/src/ServiceControl.Audit.AcceptanceTests/TestSupport/IAcceptanceTestStorageConfiguration.cs @@ -7,7 +7,7 @@ namespace ServiceControl.Audit.AcceptanceTests.TestSupport; public interface IAcceptanceTestStorageConfiguration { - string PersistenceType { get; } + string StorageType { get; } Task> CustomizeSettings(CancellationToken cancellationToken = default); diff --git a/src/ServiceControl.Audit.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs b/src/ServiceControl.Audit.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs index 81d73b1386..e85345813a 100644 --- a/src/ServiceControl.Audit.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs +++ b/src/ServiceControl.Audit.AcceptanceTests/TestSupport/ServiceControlComponentRunner.cs @@ -61,7 +61,7 @@ async Task InitializeServiceControlCore(ScenarioContext context) var loggingSettings = new LoggingSettings(Settings.SettingsRootNamespace, defaultLevel: LogLevel.Debug, logPath: logPath); LoggerUtil.ActiveLoggers = Loggers.Test; - settings = new Settings(transportToUse.TypeName, persistenceToUse.PersistenceType, loggingSettings) + settings = new Settings(transportToUse.TypeName, persistenceToUse.StorageType, loggingSettings) { InstanceName = instanceName, TransportConnectionString = transportToUse.ConnectionString, diff --git a/src/ServiceControl.Audit.Persistence/PersistenceManifest.cs b/src/ServiceControl.Audit.Persistence/PersistenceManifest.cs index 45b5d89572..7aeb0d5801 100644 --- a/src/ServiceControl.Audit.Persistence/PersistenceManifest.cs +++ b/src/ServiceControl.Audit.Persistence/PersistenceManifest.cs @@ -26,10 +26,10 @@ public class PersistenceManifest public string[] Aliases { get; set; } = []; - internal bool IsMatch(string persistenceType) => - string.Equals(TypeName, persistenceType, StringComparison.Ordinal) // Type names are case-sensitive - || string.Equals(Name, persistenceType, StringComparison.OrdinalIgnoreCase) - || Aliases.Contains(persistenceType, StringComparer.Ordinal); + internal bool IsMatch(string storageType) => + string.Equals(TypeName, storageType, StringComparison.Ordinal) // Type names are case-sensitive + || string.Equals(Name, storageType, StringComparison.OrdinalIgnoreCase) + || Aliases.Contains(storageType, StringComparer.Ordinal); } public static class PersistenceManifestLibrary @@ -95,14 +95,14 @@ static string GetAssemblyDirectory() return Path.GetDirectoryName(assemblyLocation); } - public static PersistenceManifest Find(string persistenceType) + public static PersistenceManifest Find(string storageType) { - if (persistenceType == null) + if (storageType == null) { - throw new Exception("No persistenceType has been configured. Either provide a Type or Name in the PersistenceType setting."); + throw new Exception("No storageType has been configured. Either provide a Type or Name in the StorageType setting."); } - var persistenceManifest = PersistenceManifests.FirstOrDefault(w => w.IsMatch(persistenceType)); + var persistenceManifest = PersistenceManifests.FirstOrDefault(w => w.IsMatch(storageType)); return persistenceManifest; } diff --git a/src/ServiceControl.Audit.UnitTests/ApprovalFiles/APIApprovals.PlatformSampleSettings.approved.txt b/src/ServiceControl.Audit.UnitTests/ApprovalFiles/APIApprovals.PlatformSampleSettings.approved.txt index f0948c181f..25643e8f0a 100644 --- a/src/ServiceControl.Audit.UnitTests/ApprovalFiles/APIApprovals.PlatformSampleSettings.approved.txt +++ b/src/ServiceControl.Audit.UnitTests/ApprovalFiles/APIApprovals.PlatformSampleSettings.approved.txt @@ -50,7 +50,7 @@ "Hostname": "localhost", "VirtualDirectory": "", "TransportType": "LearningTransport", - "PersistenceType": "RavenDB", + "StorageType": "RavenDB", "AuditQueue": "audit", "ForwardAuditMessages": false, "IngestAuditMessages": true, diff --git a/src/ServiceControl.Audit.UnitTests/Infrastructure/PersistenceManifestLibraryTests.cs b/src/ServiceControl.Audit.UnitTests/Infrastructure/PersistenceManifestLibraryTests.cs index 19b5559ece..8c23889787 100644 --- a/src/ServiceControl.Audit.UnitTests/Infrastructure/PersistenceManifestLibraryTests.cs +++ b/src/ServiceControl.Audit.UnitTests/Infrastructure/PersistenceManifestLibraryTests.cs @@ -33,8 +33,8 @@ public void Should_find_persistence_manifest_by_type() [Test] public void Should_return_null_for_not_found_persistence_type() { - var fakePersistenceType = "My.fake.persistence, fakeTransportAssembly"; - var persistenceManifest = PersistenceManifestLibrary.Find(fakePersistenceType); + var fakeStorageType = "My.fake.persistence, fakeTransportAssembly"; + var persistenceManifest = PersistenceManifestLibrary.Find(fakeStorageType); Assert.That(persistenceManifest, Is.Null); } diff --git a/src/ServiceControl.Audit/App.config b/src/ServiceControl.Audit/App.config index 18f35bd6c5..e2284f20d8 100644 --- a/src/ServiceControl.Audit/App.config +++ b/src/ServiceControl.Audit/App.config @@ -18,10 +18,10 @@ These settings are only here so that we can debug ServiceControl while developin - - - - + + + + diff --git a/src/ServiceControl.Audit/Dockerfile b/src/ServiceControl.Audit/Dockerfile index 4dee310716..8d1778629b 100644 --- a/src/ServiceControl.Audit/Dockerfile +++ b/src/ServiceControl.Audit/Dockerfile @@ -19,7 +19,7 @@ EXPOSE 44444 COPY --from=build /deploy/Particular.ServiceControl.Audit /app COPY --from=build /healthcheck /healthcheck -ENV PersistenceType=RavenDB \ +ENV StorageType=RavenDB \ AuditRetentionPeriod=7 HEALTHCHECK --start-period=10s CMD ["/healthcheck/healthcheck", "http://localhost:44444/api/configuration"] diff --git a/src/ServiceControl.Audit/HostApplicationBuilderExtensions.cs b/src/ServiceControl.Audit/HostApplicationBuilderExtensions.cs index be2856badd..e0c0c6d527 100644 --- a/src/ServiceControl.Audit/HostApplicationBuilderExtensions.cs +++ b/src/ServiceControl.Audit/HostApplicationBuilderExtensions.cs @@ -136,7 +136,7 @@ static void RecordStartup(Settings settings, EndpointConfiguration endpointConfi Forwarding Audit Messages: {settings.ForwardAuditMessages} ServiceControl Logging Level: {settings.LoggingSettings.LogLevel} Transport Customization: {settings.TransportType}, -Persistence Customization: {settings.PersistenceType}, +Persistence Customization: {settings.StorageType}, Persistence: {persistenceConfiguration.Name} -------------------------------------------------------------"; diff --git a/src/ServiceControl.Audit/Infrastructure/Hosting/Commands/MaintenanceModeCommand.cs b/src/ServiceControl.Audit/Infrastructure/Hosting/Commands/MaintenanceModeCommand.cs index a868a3bfbb..7c6f4a0179 100644 --- a/src/ServiceControl.Audit/Infrastructure/Hosting/Commands/MaintenanceModeCommand.cs +++ b/src/ServiceControl.Audit/Infrastructure/Hosting/Commands/MaintenanceModeCommand.cs @@ -16,7 +16,7 @@ public override async Task Execute(HostArguments args, Settings settings, Cancel var persistenceConfiguration = PersistenceConfigurationFactory.LoadPersistenceConfiguration(settings); if (!persistenceConfiguration.SupportsMaintenanceMode) { - throw new InvalidOperationException($"Maintenance mode is not supported by the {settings.PersistenceType} persister."); + throw new InvalidOperationException($"Maintenance mode is not supported by the {settings.StorageType} persister."); } var persistenceSettings = persistenceConfiguration.BuildPersistenceSettings(settings); diff --git a/src/ServiceControl.Audit/Infrastructure/Settings/Settings.cs b/src/ServiceControl.Audit/Infrastructure/Settings/Settings.cs index da096a3720..88a1ddd7c9 100644 --- a/src/ServiceControl.Audit/Infrastructure/Settings/Settings.cs +++ b/src/ServiceControl.Audit/Infrastructure/Settings/Settings.cs @@ -14,7 +14,7 @@ public class Settings { - public Settings(string transportType = null, string persisterType = null, LoggingSettings loggingSettings = null) + public Settings(string transportType = null, string storageType = null, LoggingSettings loggingSettings = null) { LoggingSettings = loggingSettings ?? new(SettingsRootNamespace); @@ -31,7 +31,7 @@ public Settings(string transportType = null, string persisterType = null, Loggin TransportType = transportType ?? SettingsReader.Read(SettingsRootNamespace, "TransportType"); - PersistenceType = persisterType ?? SettingsReader.Read(SettingsRootNamespace, "PersistenceType"); + StorageType = storageType ?? SettingsReader.Read(SettingsRootNamespace, "StorageType"); TransportConnectionString = GetConnectionString(); @@ -153,7 +153,7 @@ public string RootUrl public string TransportType { get; private set; } - public string PersistenceType { get; private set; } + public string StorageType { get; private set; } public string AuditQueue { get; set; } diff --git a/src/ServiceControl.Audit/Infrastructure/WebApi/RootController.cs b/src/ServiceControl.Audit/Infrastructure/WebApi/RootController.cs index 6334d612a6..47eece5591 100644 --- a/src/ServiceControl.Audit/Infrastructure/WebApi/RootController.cs +++ b/src/ServiceControl.Audit/Infrastructure/WebApi/RootController.cs @@ -76,7 +76,7 @@ public OkObjectResult Config() }, Persistence = new { - settings.PersistenceType + PersistenceType = settings.StorageType }, Plugins = new { diff --git a/src/ServiceControl.Audit/Persistence/PersistenceConfigurationFactory.cs b/src/ServiceControl.Audit/Persistence/PersistenceConfigurationFactory.cs index d79ee76fe0..8723ea97f1 100644 --- a/src/ServiceControl.Audit/Persistence/PersistenceConfigurationFactory.cs +++ b/src/ServiceControl.Audit/Persistence/PersistenceConfigurationFactory.cs @@ -11,7 +11,7 @@ public static IPersistenceConfiguration LoadPersistenceConfiguration(Settings se { try { - var persistenceManifest = PersistenceManifestLibrary.Find(settings.PersistenceType); + var persistenceManifest = PersistenceManifestLibrary.Find(settings.StorageType); var assemblyPath = Path.Combine(persistenceManifest.Location, $"{persistenceManifest.AssemblyName}.dll"); var loadContext = settings.AssemblyLoadContextResolver(assemblyPath); var customizationType = Type.GetType(persistenceManifest.TypeName, loadContext.LoadFromAssemblyName, null, true); @@ -20,7 +20,7 @@ public static IPersistenceConfiguration LoadPersistenceConfiguration(Settings se } catch (Exception e) { - throw new Exception($"Could not load persistence customization type {settings.PersistenceType}.", e); + throw new Exception($"Could not load persistence customization type {settings.StorageType}.", e); } } diff --git a/src/ServiceControl.MultiInstance.AcceptanceTests/TestSupport/SharedRavenStorageConfiguration.cs b/src/ServiceControl.MultiInstance.AcceptanceTests/TestSupport/SharedRavenStorageConfiguration.cs index 0b599318fb..b5da9105b1 100644 --- a/src/ServiceControl.MultiInstance.AcceptanceTests/TestSupport/SharedRavenStorageConfiguration.cs +++ b/src/ServiceControl.MultiInstance.AcceptanceTests/TestSupport/SharedRavenStorageConfiguration.cs @@ -18,9 +18,9 @@ namespace ServiceControl.MultiInstance.AcceptanceTests.TestSupport class SharedRavenStorageConfiguration : PrimaryStorageConfiguration, AuditStorageConfiguration { // Both persisters ship a manifest named RavenDB, and only one of them survives the copy into this project's output folder - string PrimaryStorageConfiguration.PersistenceType => TypeNameOf(typeof(RavenPersistenceConfiguration)); + string PrimaryStorageConfiguration.StorageType => TypeNameOf(typeof(RavenPersistenceConfiguration)); - string AuditStorageConfiguration.PersistenceType => TypeNameOf(typeof(AuditRavenPersistenceConfiguration)); + string AuditStorageConfiguration.StorageType => TypeNameOf(typeof(AuditRavenPersistenceConfiguration)); async Task PrimaryStorageConfiguration.CustomizeSettings(PrimaryInstanceSettings settings, CancellationToken cancellationToken) { diff --git a/src/ServiceControl.Persistence/PersistenceManifest.cs b/src/ServiceControl.Persistence/PersistenceManifest.cs index 7f5f0a1d67..905d557e43 100644 --- a/src/ServiceControl.Persistence/PersistenceManifest.cs +++ b/src/ServiceControl.Persistence/PersistenceManifest.cs @@ -27,19 +27,19 @@ public class PersistenceManifest public string[] Aliases { get; set; } = []; - internal bool IsMatch(string persistenceType) => - string.Equals(Name, persistenceType, StringComparison.OrdinalIgnoreCase) - || Aliases.Contains(persistenceType, StringComparer.Ordinal) - || IsTypeMatch(persistenceType); + internal bool IsMatch(string storageType) => + string.Equals(Name, storageType, StringComparison.OrdinalIgnoreCase) + || Aliases.Contains(storageType, StringComparer.Ordinal) + || IsTypeMatch(storageType); - bool IsTypeMatch(string persistenceType) + bool IsTypeMatch(string storageType) { - if (string.Equals(TypeName, persistenceType, StringComparison.Ordinal)) // Type names are case-sensitive + if (string.Equals(TypeName, storageType, StringComparison.Ordinal)) // Type names are case-sensitive { return true; } - var type = Type.GetType(persistenceType); + var type = Type.GetType(storageType); if (type == null) { return false; @@ -115,14 +115,14 @@ static string GetAssemblyDirectory() ?? throw new InvalidOperationException("The persistence assembly has no containing directory."); } - public static PersistenceManifest? Find(string persistenceType) + public static PersistenceManifest? Find(string storageType) { - if (persistenceType == null) + if (storageType == null) { - throw new Exception("No persistenceType has been configured. Either provide a Type or Name in the PersistenceType setting."); + throw new Exception("No storageType has been configured. Either provide a Type or Name in the StorageType setting."); } - var persistenceManifest = PersistenceManifests.FirstOrDefault(w => w.IsMatch(persistenceType)); + var persistenceManifest = PersistenceManifests.FirstOrDefault(w => w.IsMatch(storageType)); return persistenceManifest; } diff --git a/src/ServiceControl.UnitTests/API/APIApprovals.cs b/src/ServiceControl.UnitTests/API/APIApprovals.cs index dee1ef8c12..29134fdcde 100644 --- a/src/ServiceControl.UnitTests/API/APIApprovals.cs +++ b/src/ServiceControl.UnitTests/API/APIApprovals.cs @@ -192,7 +192,7 @@ string RemoveDataStoreSettings(string json) var result = string.Empty; - var dataStoreSettings = new[] { nameof(Settings.PersistenceType) }; + var dataStoreSettings = new[] { nameof(Settings.StorageType) }; foreach (var settingLine in settingsLines) { diff --git a/src/ServiceControl/App.config b/src/ServiceControl/App.config index 8afc7351d0..8bc0d1f457 100644 --- a/src/ServiceControl/App.config +++ b/src/ServiceControl/App.config @@ -23,9 +23,9 @@ These settings are only here so that we can debug ServiceControl while developin - - - + + + diff --git a/src/ServiceControl/Dockerfile b/src/ServiceControl/Dockerfile index 777bbc4224..28a5af6006 100644 --- a/src/ServiceControl/Dockerfile +++ b/src/ServiceControl/Dockerfile @@ -19,7 +19,7 @@ EXPOSE 33333 COPY --from=build /deploy/Particular.ServiceControl /app COPY --from=build /healthcheck /healthcheck -ENV PersistenceType=RavenDB \ +ENV StorageType=RavenDB \ ForwardErrorMessages=false \ ErrorRetentionPeriod=15 diff --git a/src/ServiceControl/Hosting/Commands/ErrorIngestionOnlyCommand.cs b/src/ServiceControl/Hosting/Commands/ErrorIngestionOnlyCommand.cs index 00d38bb0b3..c9081c954e 100644 --- a/src/ServiceControl/Hosting/Commands/ErrorIngestionOnlyCommand.cs +++ b/src/ServiceControl/Hosting/Commands/ErrorIngestionOnlyCommand.cs @@ -58,12 +58,12 @@ internal static WebApplication BuildHost(Settings settings, Action(SettingsRootNamespace, "TransportType"); - PersistenceType = persisterType ?? SettingsReader.Read(SettingsRootNamespace, "PersistenceType"); + StorageType = storageType ?? SettingsReader.Read(SettingsRootNamespace, "StorageType"); AuditRetentionPeriod = GetAuditRetentionPeriod(); ForwardErrorMessages = forwardErrorMessages ?? GetForwardErrorMessages(); ErrorRetentionPeriod = errorRetentionPeriod ?? GetErrorRetentionPeriod(); @@ -184,7 +184,7 @@ public string InstanceId public TimeSpan HeartbeatGracePeriod { get; set; } public string TransportType { get; set; } - public string PersistenceType { get; private set; } + public string StorageType { get; private set; } public string ErrorLogQueue { get; set; } public string ErrorQueue { get; set; } diff --git a/src/ServiceControl/Persistence/PersistenceFactory.cs b/src/ServiceControl/Persistence/PersistenceFactory.cs index 892920cf18..7512488c80 100644 --- a/src/ServiceControl/Persistence/PersistenceFactory.cs +++ b/src/ServiceControl/Persistence/PersistenceFactory.cs @@ -12,7 +12,7 @@ public static IPersistence Create(Settings settings, bool maintenanceMode = fals if (maintenanceMode && !persistenceConfiguration.SupportsMaintenanceMode) { - throw new Exception($"Maintenance mode is not supported by the {settings.PersistenceType} persister. It is only available on RavenDB, where it starts the embedded database so RavenDB Studio can be used."); + throw new Exception($"Maintenance mode is not supported by the {settings.StorageType} persister. It is only available on RavenDB, where it starts the embedded database so RavenDB Studio can be used."); } //HINT: This is false when executed from acceptance tests @@ -28,7 +28,7 @@ static IPersistenceConfiguration CreatePersistenceConfiguration(Settings setting { try { - var persistenceManifest = PersistenceManifestLibrary.Find(settings.PersistenceType); + var persistenceManifest = PersistenceManifestLibrary.Find(settings.StorageType); var assemblyPath = Path.Combine(persistenceManifest.Location, $"{persistenceManifest.AssemblyName}.dll"); var loadContext = settings.AssemblyLoadContextResolver(assemblyPath); var customizationType = Type.GetType(persistenceManifest.TypeName, loadContext.LoadFromAssemblyName, null, true); @@ -37,7 +37,7 @@ static IPersistenceConfiguration CreatePersistenceConfiguration(Settings setting } catch (Exception e) { - throw new Exception($"Could not load persistence customization type {settings.PersistenceType}.", e); + throw new Exception($"Could not load persistence customization type {settings.StorageType}.", e); } } } diff --git a/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/InstallationTests.Audit_install_should_write_expected_config_file.RavenDB.approved.txt b/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/InstallationTests.Audit_install_should_write_expected_config_file.RavenDB.approved.txt index 5050490958..db48111a86 100644 --- a/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/InstallationTests.Audit_install_should_write_expected_config_file.RavenDB.approved.txt +++ b/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/InstallationTests.Audit_install_should_write_expected_config_file.RavenDB.approved.txt @@ -6,7 +6,7 @@ - + diff --git a/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/NewAuditInstanceTests.Should_install_modern_raven_for_new_instances.approved.txt b/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/NewAuditInstanceTests.Should_install_modern_raven_for_new_instances.approved.txt index 5050490958..db48111a86 100644 --- a/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/NewAuditInstanceTests.Should_install_modern_raven_for_new_instances.approved.txt +++ b/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/NewAuditInstanceTests.Should_install_modern_raven_for_new_instances.approved.txt @@ -6,7 +6,7 @@ - + diff --git a/src/ServiceControlInstaller.Engine.UnitTests/Validation/StorageEngineUpgradeTests.cs b/src/ServiceControlInstaller.Engine.UnitTests/Validation/StorageEngineUpgradeTests.cs index 54a1268282..fbb52668a1 100644 --- a/src/ServiceControlInstaller.Engine.UnitTests/Validation/StorageEngineUpgradeTests.cs +++ b/src/ServiceControlInstaller.Engine.UnitTests/Validation/StorageEngineUpgradeTests.cs @@ -32,7 +32,7 @@ public void Every_shipped_primary_storage_engine_gets_its_decided_upgrade_answer public void Every_shipped_audit_storage_engine_gets_its_decided_upgrade_answer() => AssertDecidedAnswers(ServiceControlPersisters.GetAllAuditManifests(), AuditUpgradableInPlace); - // A null persistence type is how a version 4 config with no PersistenceType setting resolves, which is RavenDB 3.5. + // A null storage type is how a version 4 config with no legacy PersistenceType setting resolves, which is RavenDB 3.5. [TestCase(null, ExpectedResult = false)] [TestCase("NotAKnownPersister", ExpectedResult = false)] public bool Whether_an_unlisted_primary_persistence_type_can_be_upgraded_in_place(string persistenceType) => diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/AuditInstanceSettingsList.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/AuditInstanceSettingsList.cs index d557bf4bcf..64239d65c3 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/AuditInstanceSettingsList.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/AuditInstanceSettingsList.cs @@ -23,7 +23,15 @@ public static class AuditInstanceSettingsList public static readonly SettingInfo DBPath = new() { Name = "ServiceControl.Audit/DBPath" }; public static readonly SettingInfo ForwardAuditMessages = new() { Name = "ServiceControl.Audit/ForwardAuditMessages" }; public static readonly SettingInfo TransportType = new() { Name = "ServiceControl.Audit/TransportType" }; - public static readonly SettingInfo PersistenceType = new() { Name = "ServiceControl.Audit/PersistenceType" }; + + public static readonly SettingInfo StorageType = new() { Name = "ServiceControl.Audit/StorageType" }; + + // Legacy name of StorageType. Not version gated for writes: a 6.x runtime ignores the unknown StorageType key, and RemoveIfRetired drops this key once the instance runs 7.0.0 + public static readonly SettingInfo PersistenceType = new() + { + Name = "ServiceControl.Audit/PersistenceType", + RemovedFrom = new(7, 0, 0) + }; public static readonly SettingInfo AuditQueue = new() { Name = "ServiceBus/AuditQueue" }; public static readonly SettingInfo AuditLogQueue = new() { Name = "ServiceBus/AuditLogQueue" }; public static readonly SettingInfo AuditRetentionPeriod = new() { Name = "ServiceControl.Audit/AuditRetentionPeriod" }; diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs index 3f2ef78627..757a006b9e 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs @@ -31,7 +31,7 @@ protected override void UpdateSettings() settings.Set(ServiceControlSettings.DBPath, details.DBPath); settings.Set(ServiceControlSettings.ForwardErrorMessages, details.ForwardErrorMessages.ToString(), version); settings.Set(ServiceControlSettings.TransportType, details.TransportPackage.Name, version); - settings.Set(ServiceControlSettings.PersistenceType, details.PersistenceManifest.Name); // TODO: Why is it set here AND at ServiceControlInstance.ApplySettingsChanges 🤬 + settings.Set(ServiceControlSettings.StorageType, details.PersistenceManifest.Name); // TODO: Why is it set here AND at ServiceControlInstance.ApplySettingsChanges 🤬 settings.Set(ServiceControlSettings.ErrorQueue, details.ErrorQueue); settings.Set(ServiceControlSettings.ErrorLogQueue, details.ForwardErrorMessages ? details.ErrorLogQueue : null); settings.Set(ServiceControlSettings.AuditRetentionPeriod, details.AuditRetentionPeriod.ToString(), version); @@ -51,6 +51,7 @@ protected override void UpdateSettings() settings.RemoveIfRetired(ServiceControlSettings.AuditLogQueue, version); settings.RemoveIfRetired(ServiceControlSettings.ForwardAuditMessages, version); settings.RemoveIfRetired(ServiceControlSettings.InternalQueueName, version); + settings.RemoveIfRetired(ServiceControlSettings.PersistenceType, version); settings.RemoveIfRetired(ServiceControlSettings.LicensingComponentRabbitMqManagementApiUrl, version); settings.RemoveIfRetired(ServiceControlSettings.LicensingComponentRabbitMqManagementApiUsername, version); settings.RemoveIfRetired(ServiceControlSettings.LicensingComponentRabbitMqManagementApiPassword, version); diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAuditAppConfig.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAuditAppConfig.cs index 81386283eb..926bb03313 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAuditAppConfig.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAuditAppConfig.cs @@ -23,7 +23,7 @@ protected override void UpdateSettings() settings.Set(AuditInstanceSettingsList.LogPath, instance.LogPath); settings.Set(AuditInstanceSettingsList.ForwardAuditMessages, instance.ForwardAuditMessages.ToString().ToLowerInvariant()); settings.Set(AuditInstanceSettingsList.TransportType, instance.TransportPackage.Name, version); - settings.Set(AuditInstanceSettingsList.PersistenceType, instance.PersistenceManifest.Name); // TODO: Why is it set here AND at ServiceControlAuditInstance.ApplySettingsChanges 🤬 + settings.Set(AuditInstanceSettingsList.StorageType, instance.PersistenceManifest.Name); // TODO: Why is it set here AND at ServiceControlAuditInstance.ApplySettingsChanges 🤬 settings.Set(AuditInstanceSettingsList.AuditQueue, instance.AuditQueue); settings.Set(AuditInstanceSettingsList.AuditLogQueue, instance.ForwardAuditMessages ? instance.AuditLogQueue : null); settings.Set(AuditInstanceSettingsList.AuditRetentionPeriod, instance.AuditRetentionPeriod.ToString(), version); @@ -74,6 +74,7 @@ protected override void UpdateSettings() // Retired setting settings.RemoveIfRetired(AuditInstanceSettingsList.InternalQueueName, version); + settings.RemoveIfRetired(AuditInstanceSettingsList.PersistenceType, version); RemoveRavenDB35Settings(settings, version); } diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs index e209253c27..d3394a281f 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs @@ -40,7 +40,15 @@ public static class ServiceControlSettings }; public static readonly SettingInfo TransportType = new() { Name = "ServiceControl/TransportType" }; - public static readonly SettingInfo PersistenceType = new() { Name = "ServiceControl/PersistenceType" }; + + public static readonly SettingInfo StorageType = new() { Name = "ServiceControl/StorageType" }; + + // Legacy name of StorageType. Not version gated for writes: a 6.x runtime ignores the unknown StorageType key, and RemoveIfRetired drops this key once the instance runs 7.0.0 + public static readonly SettingInfo PersistenceType = new() + { + Name = "ServiceControl/PersistenceType", + RemovedFrom = new(7, 0, 0) + }; public static readonly SettingInfo AuditQueue = new() { Name = "ServiceBus/AuditQueue", diff --git a/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs b/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs index e280cfaba9..48a3070d61 100644 --- a/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs +++ b/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs @@ -69,7 +69,10 @@ protected override void ApplySettingsChanges(KeyValueConfigurationCollection set settings.Set(AuditInstanceSettingsList.AuditQueue, AuditQueue, Version); settings.Set(AuditInstanceSettingsList.AuditLogQueue, AuditLogQueue, Version); settings.Set(AuditInstanceSettingsList.EnableFullTextSearchOnBodies, EnableFullTextSearchOnBodies.ToString().ToLowerInvariant(), Version); - settings.Set(AuditInstanceSettingsList.PersistenceType, PersistenceManifest.Name); + settings.Set(AuditInstanceSettingsList.StorageType, PersistenceManifest.Name); + + // Retired settings + settings.RemoveIfRetired(AuditInstanceSettingsList.PersistenceType, Version); } protected override AppConfig CreateAppConfig() @@ -114,8 +117,14 @@ public override void Reload() InMaintenanceMode = AppConfig.Read(AuditInstanceSettingsList.MaintenanceMode, false); ServiceControlQueueAddress = AppConfig.Read(AuditInstanceSettingsList.ServiceControlQueueAddress, null); - var persistenceType = AppConfig.Read(AuditInstanceSettingsList.PersistenceType, null); - PersistenceManifest = ServiceControlPersisters.GetAuditPersistence(persistenceType); + var storageType = AppConfig.Read(AuditInstanceSettingsList.StorageType, null); + if (string.IsNullOrWhiteSpace(storageType)) + { + // A pre-7.0.0 config carries the setting under its legacy name; a config rewrite migrates it to StorageType + storageType = AppConfig.Read(AuditInstanceSettingsList.PersistenceType, null); + } + + PersistenceManifest = ServiceControlPersisters.GetAuditPersistence(storageType); TransportPackage = DetermineTransportPackage(); ConnectionString = ReadConnectionString(); diff --git a/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs b/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs index 34328ebe5d..d6aa4d604b 100644 --- a/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs +++ b/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs @@ -150,8 +150,14 @@ public override void Reload() Description = GetDescription(); ServiceAccount = Service.Account; - var persistenceType = AppConfig.Read(ServiceControlSettings.PersistenceType, null); - PersistenceManifest = ServiceControlPersisters.GetPrimaryPersistence(persistenceType); + var storageType = AppConfig.Read(ServiceControlSettings.StorageType, null); + if (string.IsNullOrWhiteSpace(storageType)) + { + // A pre-7.0.0 config carries the setting under its legacy name; a config rewrite migrates it to StorageType + storageType = AppConfig.Read(ServiceControlSettings.PersistenceType, null); + } + + PersistenceManifest = ServiceControlPersisters.GetPrimaryPersistence(storageType); ForwardErrorMessages = AppConfig.Read(ServiceControlSettings.ForwardErrorMessages, false); if (ForwardErrorMessages) @@ -213,7 +219,7 @@ protected override void ApplySettingsChanges(KeyValueConfigurationCollection set settings.Set(ServiceControlSettings.AuditLogQueue, AuditLogQueue, Version); settings.Set(ServiceControlSettings.ErrorLogQueue, ErrorLogQueue, Version); settings.Set(ServiceControlSettings.EnableFullTextSearchOnBodies, EnableFullTextSearchOnBodies.ToString(), Version); - settings.Set(ServiceControlSettings.PersistenceType, PersistenceManifest.Name); + settings.Set(ServiceControlSettings.StorageType, PersistenceManifest.Name); settings.Set(ServiceControlSettings.EnableIntegratedServicePulse, EnableIntegratedServicePulse.ToString(), Version); if (RemoteInstances != null) @@ -228,6 +234,9 @@ protected override void ApplySettingsChanges(KeyValueConfigurationCollection set settings.Set(ServiceControlSettings.RemoteInstances, RemoteInstanceConverter.ToJson(RemoteInstances), Version); } + + // Retired settings + settings.RemoveIfRetired(ServiceControlSettings.PersistenceType, Version); } protected override void Prepare(string zipFilePath, string destDir) diff --git a/tools/testing-tool/README.md b/tools/testing-tool/README.md index 45b0992af1..4e552362b3 100644 --- a/tools/testing-tool/README.md +++ b/tools/testing-tool/README.md @@ -92,7 +92,7 @@ A share of claims instead emit a whole **saga episode**: the three messages that `sagaSnapshotRatio` is saga snapshots per processed message; the default `0.2` emits two saga snapshots for every ten processed messages. `0` disables saga episodes. -Audit ingestion needs a ServiceControl.Audit instance on SQL Server or PostgreSQL, so pair `--audit-instances` with `--persistence:PostgreSql` or `--persistence:SqlServer`. Under `--persistence:RavenDb` the audit instance runs on RavenDB and the EF path is not exercised. +Audit ingestion needs a ServiceControl.Audit instance on SQL Server or PostgreSQL, so pair `--audit-instances` with `--storage:PostgreSql` or `--storage:SqlServer`. Under `--storage:RavenDb` the audit instance runs on RavenDB and the EF path is not exercised. The testing tool's own endpoint also audits its successfully handled load messages to the same queue, which is what makes its installers create the queue before the writer first sends into it. @@ -151,7 +151,7 @@ builds the solution and the container image on every change under `tools/testing ## Run with Aspire The Aspire AppHost orchestrates the testing tool together with the full Particular platform -(ServiceControl + RabbitMQ or SQL Server transport + RavenDB/SQL Server/PostgreSQL persistence + ServicePulse) and a complete observability +(ServiceControl + RabbitMQ or SQL Server transport + RavenDB/SQL Server/PostgreSQL storage + ServicePulse) and a complete observability stack (OTel Collector, Jaeger, Prometheus, Grafana), so a single command brings up the whole system locally: @@ -165,17 +165,17 @@ To test a specific ServiceControl image tag (e.g. a PR-based prerelease tag): aspire run tools/testing-tool/TestingTool.AppHost/TestingTool.AppHost.csproj -- --tag pr-1234 ``` -To select a persistence backend for the ServiceControl error instance (`RavenDb`, +To select a storage backend for the ServiceControl error instance (`RavenDb`, `SqlServer`, or `PostgreSql`; defaults to `RavenDb`): ```bash -aspire run tools/testing-tool/TestingTool.AppHost/TestingTool.AppHost.csproj -- --persistence:RavenDb +aspire run tools/testing-tool/TestingTool.AppHost/TestingTool.AppHost.csproj -- --storage:RavenDb ``` -`--persistence RavenDb` (space separator) is accepted too. Both flags may be combined: +`--storage RavenDb` (space separator) is accepted too. Both flags may be combined: ```bash -aspire run tools/testing-tool/TestingTool.AppHost/TestingTool.AppHost.csproj -- --tag pr-1234 --persistence:SqlServer +aspire run tools/testing-tool/TestingTool.AppHost/TestingTool.AppHost.csproj -- --tag pr-1234 --storage:SqlServer ``` ### AppHost CLI options @@ -185,13 +185,13 @@ separator) or `--name:value` (colon separator): | Flag | Default | Values | Description | |---|---|---|---| -| `--persistence` | `RavenDb` | `RavenDb`, `SqlServer`, `PostgreSql` | Persistence backend for the ServiceControl error instance and for the audit instances | -| `--transport` | `RabbitMq` | `RabbitMq`, `SqlServer` | Transport shared by ServiceControl and the testing tool. `SqlServer` reuses the persistence SQL Server container with a separate `Transport` database | +| `--storage` | `RavenDb` | `RavenDb`, `SqlServer`, `PostgreSql` | Storage backend for the ServiceControl error instance and for the audit instances | +| `--transport` | `RabbitMq` | `RabbitMq`, `SqlServer` | Transport shared by ServiceControl and the testing tool. `SqlServer` reuses the storage SQL Server container with a separate `Transport` database | | `--tag` | *(none — uses the current build's image)* | any image tag, e.g. `pr-1234` or `6.3.1` | Override the ServiceControl container image tag (useful for testing PR-based prereleases) | | `--error-ingestion-scale-unit` | `0` | non-negative integer | Number of additional error-ingestion-only scale-out instances to spin up alongside the primary error instance (each runs with `--error-ingestion-only`) | -| `--audit-instances` | `1` | non-negative integer | Number of ServiceControl.Audit instances to add. They take the same `--persistence` backend, report custom checks to the primary and export OTel to the collector | -| `--azure-blob-body-storage` | *(none — uses file-system body storage)* | `""` | Store message bodies in Azure Blob Storage instead of the container file system. Applies only with `--persistence:SqlServer` or `--persistence:PostgreSql`. Quote the value because connection strings contain semicolons. The error instance and its scale-out units share the `error-bodies` container, and each audit instance gets its own `audit-bodies-` container | -| `--s3-body-storage` | *(none — uses file-system body storage)* | `` | Store message bodies in an S3 bucket instead of the container file system. Applies only with `--persistence:SqlServer` or `--persistence:PostgreSql`, and cannot be combined with `--azure-blob-body-storage`. Setup creates the bucket if it is missing and the credentials permit it. The error instance and its scale-out units share the `error-bodies/` key prefix, and each audit instance gets its own `audit-bodies-/` prefix | +| `--audit-instances` | `1` | non-negative integer | Number of ServiceControl.Audit instances to add. They take the same `--storage` backend, report custom checks to the primary and export OTel to the collector | +| `--azure-blob-body-storage` | *(none — uses file-system body storage)* | `""` | Store message bodies in Azure Blob Storage instead of the container file system. Applies only with `--storage:SqlServer` or `--storage:PostgreSql`. Quote the value because connection strings contain semicolons. The error instance and its scale-out units share the `error-bodies` container, and each audit instance gets its own `audit-bodies-` container | +| `--s3-body-storage` | *(none — uses file-system body storage)* | `` | Store message bodies in an S3 bucket instead of the container file system. Applies only with `--storage:SqlServer` or `--storage:PostgreSql`, and cannot be combined with `--azure-blob-body-storage`. Setup creates the bucket if it is missing and the credentials permit it. The error instance and its scale-out units share the `error-bodies/` key prefix, and each audit instance gets its own `audit-bodies-/` prefix | | `--s3-region` | SDK default | region name, e.g. `eu-west-1` | Region for `--s3-body-storage`. Requires `--s3-body-storage` | | `--s3-service-url` | AWS | absolute `http` or `https` URL | S3-compatible endpoint, e.g. MinIO or LocalStack. The ServiceControl containers connect to it, so it must be reachable from inside a container. Requires `--s3-body-storage` | | `--s3-access-key-id`, `--s3-secret-access-key` | *(none — default AWS credential chain)* | key pair | Static credentials for `--s3-body-storage`. Set both or neither. Without them, the AWS default credential chain runs inside each container; the host's credentials are not forwarded. Static keys appear in the container environment | @@ -200,7 +200,7 @@ Pass static credentials explicitly, or omit both key options when the containers ```bash aspire run tools/testing-tool/TestingTool.AppHost/TestingTool.AppHost.csproj -- \ - --persistence PostgreSql --s3-body-storage my-bodies --s3-region eu-west-1 \ + --storage PostgreSql --s3-body-storage my-bodies --s3-region eu-west-1 \ --s3-access-key-id "$AWS_ACCESS_KEY_ID" --s3-secret-access-key "$AWS_SECRET_ACCESS_KEY" ``` @@ -208,7 +208,7 @@ For MinIO or LocalStack, use an endpoint reachable from the containers. This exa ```bash aspire run tools/testing-tool/TestingTool.AppHost/TestingTool.AppHost.csproj -- \ - --persistence SqlServer --s3-body-storage bodies --s3-region us-east-1 \ + --storage SqlServer --s3-body-storage bodies --s3-region us-east-1 \ --s3-service-url http://host.docker.internal:9000 \ --s3-access-key-id minioadmin --s3-secret-access-key minioadmin ``` diff --git a/tools/testing-tool/TestingTool.AppHost/AppHost.cs b/tools/testing-tool/TestingTool.AppHost/AppHost.cs index eb2c3c0225..7be6d5586e 100644 --- a/tools/testing-tool/TestingTool.AppHost/AppHost.cs +++ b/tools/testing-tool/TestingTool.AppHost/AppHost.cs @@ -2,7 +2,7 @@ using TestingTool.AppHost; var options = CliOptions.Parse(args); -var persistenceType = options.GetValue("persistence", PersistenceType.RavenDb); +var storageType = options.GetValue("storage", StorageType.RavenDb); var imageTag = options.GetValueOrDefault("tag"); var azureBlobBodyStorage = options.GetValueOrDefault("azure-blob-body-storage"); if (azureBlobBodyStorage is not null && string.IsNullOrWhiteSpace(azureBlobBodyStorage)) @@ -10,7 +10,7 @@ throw new ArgumentException("--azure-blob-body-storage requires a non-blank Azure Storage connection string."); } var s3BodyStorage = S3BodyStorageOptions.Parse(options, azureBlobBodyStorage is not null); -Console.WriteLine($"Using persistence type: {persistenceType}"); +Console.WriteLine($"Using storage type: {storageType}"); var builder = DistributedApplication.CreateBuilder(args); @@ -34,7 +34,7 @@ .WithEnvironment("SERVICECONTROL_ALLOWMESSAGEEDITING", "true") .WithEnvironment("SERVICECONTROL_DISABLEEXTERNALINTEGRATIONSPUBLISHING", "true") .WithEnvironment("OTEL_EXPORTER_OTLP_ENDPOINT", observability.Collector.GetEndpoint("otlp-grpc")) - .WithPersistenceType(persistenceType, azureBlobBodyStorage, s3BodyStorage) + .WithStorageType(storageType, azureBlobBodyStorage, s3BodyStorage) .WithRunMode(PlatformRunMode.SetupAndRun); for (int i = 0; i < options.GetValue("error-ingestion-scale-unit", 0); i++) { @@ -52,7 +52,7 @@ .WithEnvironment("SERVICECONTROL_ERRORINGESTIONBATCHTIMEOUT", "00:00:00.100") //.WaitFor(primaryErrorInstance) - .WithPersistenceType(persistenceType, azureBlobBodyStorage, s3BodyStorage) + .WithStorageType(storageType, azureBlobBodyStorage, s3BodyStorage) .WithRunMode(PlatformRunMode.Run); } @@ -60,7 +60,7 @@ // EF persistence lives in the audit instance itself, so audit load needs a real audit container. // The platform persistence argument stays RavenDB because the Aspire package only knows about -// platform persistences; the SQL wiring is layered on with WithPersistenceType. +// platform persistences; the SQL wiring is layered on with WithStorageType. var auditInstanceCount = options.GetValue("audit-instances", 0); for (int i = 0; i < auditInstanceCount; i++) @@ -76,7 +76,7 @@ .WithAuditQueueName(i == 0 ? "audit" : "audit" + i) .WithRunMode(PlatformRunMode.SetupAndRun) .WithIngestionTuning() - .WithPersistenceType(persistenceType, azureBlobBodyStorage, s3BodyStorage); + .WithStorageType(storageType, azureBlobBodyStorage, s3BodyStorage); } // --- Testing tool --- diff --git a/tools/testing-tool/TestingTool.AppHost/HostBuilderExtensions.cs b/tools/testing-tool/TestingTool.AppHost/HostBuilderExtensions.cs index 973bc47eb8..e5a43bbb73 100644 --- a/tools/testing-tool/TestingTool.AppHost/HostBuilderExtensions.cs +++ b/tools/testing-tool/TestingTool.AppHost/HostBuilderExtensions.cs @@ -43,10 +43,10 @@ public static IResourceBuilder AddPostgresPersist return postgres.AddDatabase(databaseResource, databaseName); } - public static IResourceBuilder WithPersistenceType( - this IResourceBuilder error, PersistenceType type, string? azureBlobConnectionString = null, S3BodyStorageOptions? s3 = null) + public static IResourceBuilder WithStorageType( + this IResourceBuilder error, StorageType type, string? azureBlobConnectionString = null, S3BodyStorageOptions? s3 = null) { - if (type == PersistenceType.RavenDb) + if (type == StorageType.RavenDb) { //ravenDB is currently set up explicitly even if you aren't using it return error; @@ -54,8 +54,8 @@ public static IResourceBuilder WithPersiste var db = type switch { - PersistenceType.SqlServer => error.ApplicationBuilder.AddSqlServerPersistence("ServiceControl"), - PersistenceType.PostgreSql => error.ApplicationBuilder.AddPostgresPersistence("servicecontrol"), + StorageType.SqlServer => error.ApplicationBuilder.AddSqlServerPersistence("ServiceControl"), + StorageType.PostgreSql => error.ApplicationBuilder.AddPostgresPersistence("servicecontrol"), _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) }; @@ -74,7 +74,7 @@ public static IResourceBuilder WithPersiste return error .WaitFor(db) - .WithEnvironment("SERVICECONTROL_PERSISTENCETYPE", PersistenceTypeName(type)) + .WithEnvironment("SERVICECONTROL_STORAGETYPE", StorageTypeName(type)) .WithEnvironment("SERVICECONTROL_DATABASE_CONNECTIONSTRING", db); } @@ -87,21 +87,21 @@ public static IResourceBuilder WithPersiste /// The setting root namespace is "ServiceControl.Audit", and the settings reader rewrites both /// the dot and the slash to an underscore, so ServiceControl.Audit/Database/ConnectionString is /// SERVICECONTROL_AUDIT_DATABASE_CONNECTIONSTRING. The unprefixed names the audit container's - /// Dockerfile bakes in (PersistenceType, AuditRetentionPeriod) are later in the lookup order, + /// Dockerfile bakes in (StorageType, AuditRetentionPeriod) are later in the lookup order, /// so the namespaced form wins. /// - public static IResourceBuilder WithPersistenceType( - this IResourceBuilder audit, PersistenceType type, string? azureBlobConnectionString = null, S3BodyStorageOptions? s3 = null) + public static IResourceBuilder WithStorageType( + this IResourceBuilder audit, StorageType type, string? azureBlobConnectionString = null, S3BodyStorageOptions? s3 = null) { - if (type == PersistenceType.RavenDb) + if (type == StorageType.RavenDb) { return audit; } var db = type switch { - PersistenceType.SqlServer => audit.ApplicationBuilder.AddSqlServerPersistence("ServiceControl"), - PersistenceType.PostgreSql => audit.ApplicationBuilder.AddPostgresPersistence("servicecontrol"), + StorageType.SqlServer => audit.ApplicationBuilder.AddSqlServerPersistence("ServiceControl"), + StorageType.PostgreSql => audit.ApplicationBuilder.AddPostgresPersistence("servicecontrol"), _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) }; @@ -122,7 +122,7 @@ public static IResourceBuilder WithPersiste return audit .WaitFor(db) - .WithEnvironment("SERVICECONTROL_AUDIT_PERSISTENCETYPE", PersistenceTypeName(type)) + .WithEnvironment("SERVICECONTROL_AUDIT_STORAGETYPE", StorageTypeName(type)) .WithEnvironment("SERVICECONTROL_AUDIT_DATABASE_CONNECTIONSTRING", db); } @@ -190,10 +190,10 @@ static IResourceBuilder WithS3Environment(this IResourceBuilder builder return builder; } - static string PersistenceTypeName(PersistenceType persistence) => persistence switch + static string StorageTypeName(StorageType storage) => storage switch { - PersistenceType.SqlServer => "SQLServer", - PersistenceType.PostgreSql => "PostgreSQL", - _ => throw new ArgumentOutOfRangeException(nameof(persistence)) + StorageType.SqlServer => "SQLServer", + StorageType.PostgreSql => "PostgreSQL", + _ => throw new ArgumentOutOfRangeException(nameof(storage)) }; } \ No newline at end of file diff --git a/tools/testing-tool/TestingTool.AppHost/PersistenceType.cs b/tools/testing-tool/TestingTool.AppHost/StorageType.cs similarity index 72% rename from tools/testing-tool/TestingTool.AppHost/PersistenceType.cs rename to tools/testing-tool/TestingTool.AppHost/StorageType.cs index aa10ff9f68..c2caa2e626 100644 --- a/tools/testing-tool/TestingTool.AppHost/PersistenceType.cs +++ b/tools/testing-tool/TestingTool.AppHost/StorageType.cs @@ -1,8 +1,8 @@ namespace TestingTool.AppHost; -public enum PersistenceType +public enum StorageType { RavenDb, SqlServer, PostgreSql -} \ No newline at end of file +} diff --git a/tools/testing-tool/TestingTool/wwwroot/index.html b/tools/testing-tool/TestingTool/wwwroot/index.html index 0aa7f9ac50..4afb60252e 100644 --- a/tools/testing-tool/TestingTool/wwwroot/index.html +++ b/tools/testing-tool/TestingTool/wwwroot/index.html @@ -264,7 +264,7 @@

Direct Audit-Queue Writer

endpoint would have stamped, so the audit instance records endpoints, message types, conversations and processing times. A share of them are whole saga episodes: the three messages that drove a saga through New, Updated and Completed, each followed by the snapshot it produced, linked by the InvokedSagas headers. Needs an audit instance - on SQL Server or PostgreSQL (--audit-instances with --persistence). + on SQL Server or PostgreSQL (--audit-instances with --storage).
Rate (claims/s): From ae654038fc53a9700ed7eb5ff200c771f0f2cce2 Mon Sep 17 00:00:00 2001 From: Rhys Bevilaqua Date: Tue, 3 Nov 2026 11:22:06 +0800 Subject: [PATCH 2/3] docs updates --- docs/load-testing.md | 2 +- ....Should_update_existing_persister.approved.txt | 15 --------------- .../Instances/PersistenceManifest.cs | 8 ++++---- .../Instances/ServiceControlAuditInstance.cs | 4 ++-- .../Instances/ServiceControlInstance.cs | 4 ++-- 5 files changed, 9 insertions(+), 24 deletions(-) delete mode 100644 src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/AuditInstanceTests.Should_update_existing_persister.approved.txt diff --git a/docs/load-testing.md b/docs/load-testing.md index 7ed99b96f1..75245ef57b 100644 --- a/docs/load-testing.md +++ b/docs/load-testing.md @@ -19,7 +19,7 @@ Useful flags, passed after `--`: | Flag | Description | |---|---| | `--tag ` | Test a specific ServiceControl image tag, for example a PR prerelease like `pr-1234` | -| `--persistence ` | Persistence for the error instance: `RavenDb` (default), `SqlServer`, or `PostgreSql` | +| `--storage ` | Storage for the error instance: `RavenDb` (default), `SqlServer`, or `PostgreSql` | | `--error-ingestion-scale-unit ` | Start `n` additional error-ingestion-only ServiceControl instances | | `--azure-blob-body-storage ""` | Store message bodies in Azure Blob Storage instead of the container file system. Applies only to `SqlServer` and `PostgreSql`. The error instance and its scale-out units share one container, and each audit instance gets its own | | `--s3-body-storage ` | Store message bodies in S3 instead of the container file system. Applies only to `SqlServer` and `PostgreSql`, and is mutually exclusive with `--azure-blob-body-storage`. The error instance and its scale-out units share the `error-bodies/` prefix, and each audit instance gets its own | diff --git a/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/AuditInstanceTests.Should_update_existing_persister.approved.txt b/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/AuditInstanceTests.Should_update_existing_persister.approved.txt deleted file mode 100644 index c43ed4e591..0000000000 --- a/src/ServiceControlInstaller.Engine.UnitTests/ApprovalFiles/AuditInstanceTests.Should_update_existing_persister.approved.txt +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/ServiceControlInstaller.Engine/Instances/PersistenceManifest.cs b/src/ServiceControlInstaller.Engine/Instances/PersistenceManifest.cs index 12c1b36478..8b01ab3181 100644 --- a/src/ServiceControlInstaller.Engine/Instances/PersistenceManifest.cs +++ b/src/ServiceControlInstaller.Engine/Instances/PersistenceManifest.cs @@ -21,10 +21,10 @@ public class PersistenceManifest public string[] Aliases { get; set; } = []; - internal bool IsMatch(string persistenceType) => - string.Equals(TypeName, persistenceType, StringComparison.Ordinal) // Type names are case-sensitive - || string.Equals(Name, persistenceType, StringComparison.OrdinalIgnoreCase) - || Aliases.Contains(persistenceType, StringComparer.Ordinal); + internal bool IsMatch(string storageType) => + string.Equals(TypeName, storageType, StringComparison.Ordinal) // Type names are case-sensitive + || string.Equals(Name, storageType, StringComparison.OrdinalIgnoreCase) + || Aliases.Contains(storageType, StringComparer.Ordinal); public class Setting { diff --git a/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs b/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs index 48a3070d61..f1eda8ea34 100644 --- a/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs +++ b/src/ServiceControlInstaller.Engine/Instances/ServiceControlAuditInstance.cs @@ -70,8 +70,8 @@ protected override void ApplySettingsChanges(KeyValueConfigurationCollection set settings.Set(AuditInstanceSettingsList.AuditLogQueue, AuditLogQueue, Version); settings.Set(AuditInstanceSettingsList.EnableFullTextSearchOnBodies, EnableFullTextSearchOnBodies.ToString().ToLowerInvariant(), Version); settings.Set(AuditInstanceSettingsList.StorageType, PersistenceManifest.Name); - - // Retired settings + + // Retired settings settings.RemoveIfRetired(AuditInstanceSettingsList.PersistenceType, Version); } diff --git a/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs b/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs index d6aa4d604b..79834da36b 100644 --- a/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs +++ b/src/ServiceControlInstaller.Engine/Instances/ServiceControlInstance.cs @@ -234,8 +234,8 @@ protected override void ApplySettingsChanges(KeyValueConfigurationCollection set settings.Set(ServiceControlSettings.RemoteInstances, RemoteInstanceConverter.ToJson(RemoteInstances), Version); } - - // Retired settings + + // Retired settings settings.RemoveIfRetired(ServiceControlSettings.PersistenceType, Version); } From eccdaacd4cbfa91c2c76c72a9445b91ba7a1d426 Mon Sep 17 00:00:00 2001 From: Rhys Bevilaqua Date: Wed, 4 Nov 2026 11:03:30 +0800 Subject: [PATCH 3/3] Fix up rebase --- src/ServiceControl/Infrastructure/Api/ConfigurationApi.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ServiceControl/Infrastructure/Api/ConfigurationApi.cs b/src/ServiceControl/Infrastructure/Api/ConfigurationApi.cs index 21eeaa37e7..ff5e77c072 100644 --- a/src/ServiceControl/Infrastructure/Api/ConfigurationApi.cs +++ b/src/ServiceControl/Infrastructure/Api/ConfigurationApi.cs @@ -79,7 +79,7 @@ public Task GetConfig(CancellationToken cancellationToken = default) PersistenceSettings = settings.PersisterSpecificSettings, Storage = new { - StorageType = PersistenceManifestLibrary.Find(settings.PersistenceType)?.Name + StorageType = PersistenceManifestLibrary.Find(settings.StorageType)?.Name }, Transport = new {