Merge pull request #2731 from pizzaboxer/feature/improve-connectivity-test

Improve connectivity test
This commit is contained in:
pizzaboxer 2024-08-25 22:26:51 +01:00 committed by GitHub
commit d47bb6c5e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,6 +4,8 @@
{ {
public const string DefaultChannel = "production"; public const string DefaultChannel = "production";
private const string VersionStudioHash = "version-012732894899482c";
public static string BaseUrl { get; private set; } = null!; public static string BaseUrl { get; private set; } = null!;
private static readonly Dictionary<string, ClientVersion> ClientVersionCache = new(); private static readonly Dictionary<string, ClientVersion> ClientVersionCache = new();
@ -18,23 +20,31 @@
{ "https://s3.amazonaws.com/setup.roblox.com", 4 } { "https://s3.amazonaws.com/setup.roblox.com", 4 }
}; };
private static async Task<string?> TestConnection(string url, int priority) private static async Task<string?> TestConnection(string url, int priority, CancellationToken token)
{ {
string LOG_IDENT = $"RobloxDeployment::TestConnection.{url}"; string LOG_IDENT = $"RobloxDeployment::TestConnection.{url}";
await Task.Delay(priority * 1000); await Task.Delay(priority * 1000, token);
if (BaseUrl is not null)
return null;
App.Logger.WriteLine(LOG_IDENT, "Connecting..."); App.Logger.WriteLine(LOG_IDENT, "Connecting...");
try try
{ {
var response = await App.HttpClient.GetAsync($"{url}/version"); var response = await App.HttpClient.GetAsync($"{url}/versionStudio", token);
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
throw new HttpResponseException(response); throw new HttpResponseException(response);
// versionStudio is the version hash for the last MFC studio to be deployed.
// the response body should always be "version-012732894899482c".
string content = await response.Content.ReadAsStringAsync(token);
if (content != VersionStudioHash)
throw new Exception($"versionStudio response does not match (expected \"{VersionStudioHash}\", got \"{content}\")");
}
catch (TaskCanceledException)
{
App.Logger.WriteLine(LOG_IDENT, "Connectivity test cancelled.");
throw;
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -56,11 +66,11 @@
// returns null for success // returns null for success
if (!String.IsNullOrEmpty(BaseUrl)) CancellationTokenSource tokenSource = new CancellationTokenSource();
return null; CancellationToken token = tokenSource.Token;
var exceptions = new List<Exception>(); var exceptions = new List<Exception>();
var tasks = (from entry in BaseUrls select TestConnection(entry.Key, entry.Value)).ToList(); var tasks = (from entry in BaseUrls select TestConnection(entry.Key, entry.Value, token)).ToList();
App.Logger.WriteLine(LOG_IDENT, "Testing connectivity..."); App.Logger.WriteLine(LOG_IDENT, "Testing connectivity...");
@ -79,6 +89,9 @@
break; break;
} }
// stop other running connectivity tests
tokenSource.Cancel();
if (String.IsNullOrEmpty(BaseUrl)) if (String.IsNullOrEmpty(BaseUrl))
return exceptions[0]; return exceptions[0];