Skip to content

Commit 6ca6c1d

Browse files
committed
Ensure connection string settings are migrated during upgrade
1 parent e72fe21 commit 6ca6c1d

File tree

2 files changed

+28
-22
lines changed

2 files changed

+28
-22
lines changed

src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
namespace ServiceControlInstaller.Engine.Configuration.ServiceControl
22
{
33
using System;
4+
using System.Configuration;
45
using System.Data.Common;
56
using System.IO;
67
using Instances;
8+
using NuGet.Versioning;
79

810
public class ServiceControlAppConfig : AppConfig
911
{
@@ -14,9 +16,12 @@ public ServiceControlAppConfig(IServiceControlInstance instance) : base(Path.Com
1416

1517
protected override void UpdateSettings()
1618
{
17-
Config.ConnectionStrings.ConnectionStrings.Set("NServiceBus/Transport", UpdateConnectionString());
19+
UpdateConnectionString();
20+
Config.ConnectionStrings.ConnectionStrings.Set("NServiceBus/Transport", details.ConnectionString);
21+
1822
var settings = Config.AppSettings.Settings;
1923
var version = details.Version;
24+
2025
settings.Set(ServiceControlSettings.InstanceName, details.InstanceName, version);
2126
settings.Set(ServiceControlSettings.VirtualDirectory, details.VirtualDirectory);
2227
settings.Set(ServiceControlSettings.Port, details.Port.ToString());
@@ -73,40 +78,41 @@ public override void SetTransportType(string transportTypeName)
7378
settings.Set(ServiceControlSettings.TransportType, transportTypeName, version);
7479
}
7580

76-
string UpdateConnectionString()
81+
void UpdateConnectionString()
7782
{
78-
var connectionStringBuilder = new DbConnectionStringBuilder { ConnectionString = details.ConnectionString };
79-
80-
MigrateLicensingComponentRabbitMqManagementApiSettings(connectionStringBuilder);
81-
82-
return connectionStringBuilder.ConnectionString;
83+
if (details.TransportPackage.Name.Contains("rabbitmq", StringComparison.OrdinalIgnoreCase))
84+
{
85+
MigrateLicensingComponentRabbitMqManagementApiSettings();
86+
}
8387
}
8488

85-
void MigrateLicensingComponentRabbitMqManagementApiSettings(DbConnectionStringBuilder connectionStringBuilder)
89+
void MigrateLicensingComponentRabbitMqManagementApiSettings()
8690
{
87-
if (!details.TransportPackage.Name.Contains("rabbitmq", StringComparison.OrdinalIgnoreCase))
91+
if (details.ConnectionString.StartsWith("amqp", StringComparison.OrdinalIgnoreCase))
8892
{
8993
return;
9094
}
9195

92-
var settings = Config.AppSettings.Settings;
96+
var shouldMigrate = VersionComparer.Version.Compare(details.Version, new SemanticVersion(6, 5, 0)) >= 0;
9397

94-
var legacySetting = settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiUrl.Name];
95-
if (legacySetting is not null && !connectionStringBuilder.ContainsKey("ManagementApiUrl"))
98+
if (shouldMigrate)
9699
{
97-
connectionStringBuilder.Add("ManagementApiUrl", legacySetting.Value);
98-
}
100+
var connectionStringBuilder = new DbConnectionStringBuilder { ConnectionString = details.ConnectionString };
101+
var settings = Config.AppSettings.Settings;
99102

100-
legacySetting = settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiUsername.Name];
101-
if (legacySetting is not null && !connectionStringBuilder.ContainsKey("ManagementApiUserName"))
102-
{
103-
connectionStringBuilder.Add("ManagementApiUserName", legacySetting.Value);
103+
MigrateSetting(connectionStringBuilder, settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiUrl.Name], "ManagementApiUrl");
104+
MigrateSetting(connectionStringBuilder, settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiUsername.Name], "ManagementApiUserName");
105+
MigrateSetting(connectionStringBuilder, settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiPassword.Name], "ManagementApiPassword");
106+
107+
details.ConnectionString = connectionStringBuilder.ConnectionString;
104108
}
105109

106-
legacySetting = settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiPassword.Name];
107-
if (legacySetting is not null && !connectionStringBuilder.ContainsKey("ManagementApiPassword"))
110+
static void MigrateSetting(DbConnectionStringBuilder connectionStringBuilder, KeyValueConfigurationElement setting, string connectionStringSettingName)
108111
{
109-
connectionStringBuilder.Add("ManagementApiPassword", legacySetting.Value);
112+
if (setting is not null && !connectionStringBuilder.ContainsKey(connectionStringSettingName))
113+
{
114+
connectionStringBuilder.Add(connectionStringSettingName, setting.Value);
115+
}
110116
}
111117
}
112118

src/ServiceControlInstaller.Engine/Interfaces.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public interface ILogging
1616
public interface ITransportConfig
1717
{
1818
TransportInfo TransportPackage { get; }
19-
string ConnectionString { get; }
19+
string ConnectionString { get; set; }
2020
}
2121

2222
public interface IPersistenceConfig

0 commit comments

Comments
 (0)