Skip to content

Commit a9ae9c6

Browse files
committed
Update the RabbitMQ prereq prompts
1 parent 200a75b commit a9ae9c6

File tree

4 files changed

+23
-16
lines changed

4 files changed

+23
-16
lines changed

src/ServiceControl.Config/Commands/ScmuCommandChecks.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected override async Task<bool> PromptForRabbitMqCheck(bool isUpgrade)
2121
{
2222
var title = isUpgrade ? "UPGRADE WARNING" : "INSTALL WARNING";
2323
var beforeWhat = isUpgrade ? "upgrading" : "installing";
24-
var message = $"ServiceControl version {Constants.CurrentVersion} requires RabbitMQ broker version 3.10.0 or higher. Also, the stream_queue and quorum_queue feature flags must be enabled on the broker. Please confirm your broker meets the minimum requirements before {beforeWhat}.";
24+
var message = $"ServiceControl version {Constants.CurrentVersion} requires:\n RabbitMQ broker version 3.10.0 or higher\n• The stream_queue and quorum_queue feature flags must be enabled\n• The management plugin must be enabled\n\nPlease confirm your broker meets the minimum requirements before {beforeWhat}.";
2525
var question = "Do you want to proceed?";
2626
var yes = "Yes, my RabbitMQ broker meets the minimum requirements";
2727
var no = "No, cancel the install";

src/ServiceControl.Management.PowerShell/Validation/AcknowledgementValues.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
static class AcknowledgementValues
44
{
55
public const string RabbitMQBrokerVersion310 = "RabbitMQBrokerVersion310";
6+
public const string RabbitMQManagementApi = "RabbitMQManagementApi";
67
}
78
}

src/ServiceControl.Management.PowerShell/Validation/PowerShellCommandChecks.cs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,23 @@ protected override Task NotifyForMissingSystemPrerequisites(string missingPrereq
7171

7272
protected override Task<bool> PromptForRabbitMqCheck(bool isUpgrade)
7373
{
74-
if (acknowledgements.Any(ack => ack.Equals(AcknowledgementValues.RabbitMQBrokerVersion310, StringComparison.OrdinalIgnoreCase)))
74+
if (!acknowledgements.Any(ack => ack.Equals(AcknowledgementValues.RabbitMQBrokerVersion310, StringComparison.OrdinalIgnoreCase)))
7575
{
76-
return Task.FromResult(true);
76+
var terminateMsg = $"ServiceControl version {Constants.CurrentVersion} requires RabbitMQ broker version 3.10.0 or higher. Also, the stream_queue and quorum_queue feature flags must be enabled on the broker. Use -Acknowledgements {AcknowledgementValues.RabbitMQBrokerVersion310} if you are sure your broker meets these requirements.";
77+
78+
Terminate(terminateMsg, "Install Error", ErrorCategory.InvalidArgument);
79+
return Task.FromResult(false);
7780
}
7881

79-
var terminateMsg = $"ServiceControl version {Constants.CurrentVersion} requires RabbitMQ broker version 3.10.0 or higher. Also, the stream_queue and quorum_queue feature flags must be enabled on the broker. Use -Acknowledgements {AcknowledgementValues.RabbitMQBrokerVersion310} if you are sure your broker meets these requirements.";
82+
if (!acknowledgements.Any(ack => ack.Equals(AcknowledgementValues.RabbitMQManagementApi, StringComparison.OrdinalIgnoreCase)))
83+
{
84+
var terminateMsg = $"ServiceControl version {Constants.CurrentVersion} requires that the management plugin be enabled and the management API be accessible. Use -Acknowledgements {AcknowledgementValues.RabbitMQManagementApi} if you are sure your broker meets these requirements.";
8085

81-
Terminate(terminateMsg, "Install Error", ErrorCategory.InvalidArgument);
82-
return Task.FromResult(false);
86+
Terminate(terminateMsg, "Install Error", ErrorCategory.InvalidArgument);
87+
return Task.FromResult(false);
88+
}
89+
90+
return Task.FromResult(true);
8391
}
8492

8593
protected override Task<bool> PromptToStopRunningInstance(BaseService instance)

src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.ServiceProcess;
66
using System.Threading.Tasks;
7+
using NuGet.Versioning;
78
using ServiceControl.LicenseManagement;
89
using ServiceControlInstaller.Engine.Configuration.ServiceControl;
910
using ServiceControlInstaller.Engine.Instances;
@@ -46,7 +47,7 @@ public async Task<bool> ValidateNewInstance(params IServiceInstance[] instances)
4647
.Select(i => i.TransportPackage)
4748
.First(t => t is not null);
4849

49-
var continueInstall = await RabbitMqCheckIsOK(transport, false).ConfigureAwait(false);
50+
var continueInstall = await RabbitMqCheckIsOK(transport, Constants.CurrentVersion, false).ConfigureAwait(false);
5051

5152
return continueInstall;
5253
}
@@ -81,22 +82,19 @@ async Task<bool> CanEditOrDelete(BaseService instance, bool isDelete)
8182
return true;
8283
}
8384

84-
async Task<bool> RabbitMqCheckIsOK(TransportInfo transport, bool isUpgrade)
85+
async Task<bool> RabbitMqCheckIsOK(TransportInfo transport, SemanticVersion instanceVersion, bool isUpgrade)
8586
{
86-
if (transport is null)
87-
{
88-
throw new ArgumentNullException(nameof(transport));
89-
}
87+
ArgumentNullException.ThrowIfNull(transport);
9088

9189
if (transport.ZipName != "RabbitMQ")
9290
{
9391
// not Rabbit, don't care
9492
return true;
9593
}
9694

97-
// Only way we DON'T need to warn is if we're updating an instance that's already on a "new" (AvailableInSCMU) Rabbit transport
98-
var needToWarn = !(isUpgrade && transport.AvailableInSCMU);
99-
if (!needToWarn)
95+
var newerThan650 = VersionComparer.Version.Compare(instanceVersion, new SemanticVersion(6, 5, 0)) > 0;
96+
97+
if (isUpgrade && newerThan650)
10098
{
10199
return true;
102100
}
@@ -166,7 +164,7 @@ public async Task<bool> CanUpgradeInstance(BaseService instance, bool forceUpgra
166164
}
167165
}
168166

169-
if (!await RabbitMqCheckIsOK(instance.TransportPackage, isUpgrade: true).ConfigureAwait(false))
167+
if (!await RabbitMqCheckIsOK(instance.TransportPackage, instance.Version, isUpgrade: true).ConfigureAwait(false))
170168
{
171169
return false;
172170
}

0 commit comments

Comments
 (0)