From f8c9d1e64f17603d5a169d6708ff069d0fa99cd9 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 1 Jan 2023 17:32:22 +0100 Subject: [PATCH] shuffle cdn shard configs to allow for multiple file shards to handle one file, randomly distributing --- .../MareSynchronosServer/Hubs/MareHub.Files.cs | 1 + .../MareSynchronosShared/Utils/StringUtils.cs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs index 6d0655b..cf0cf9d 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs @@ -59,6 +59,7 @@ public partial class MareHub { var forbiddenFile = forbiddenFiles.SingleOrDefault(f => string.Equals(f.Hash, file.Hash, StringComparison.OrdinalIgnoreCase)); + shardConfig.Shuffle(); var matchedShardConfig = shardConfig.Find(f => f.FileMatchRegex.Match(file.Hash).Success); var baseUrl = matchedShardConfig?.CdnFullUrl ?? _mainCdnFullUrl; diff --git a/MareSynchronosServer/MareSynchronosShared/Utils/StringUtils.cs b/MareSynchronosServer/MareSynchronosShared/Utils/StringUtils.cs index 052bda9..ede0ec3 100644 --- a/MareSynchronosServer/MareSynchronosShared/Utils/StringUtils.cs +++ b/MareSynchronosServer/MareSynchronosShared/Utils/StringUtils.cs @@ -29,3 +29,21 @@ public static class StringUtils return BitConverter.ToString(sha256.ComputeHash(Encoding.UTF8.GetBytes(input))).Replace("-", "", StringComparison.OrdinalIgnoreCase); } } + +public static class ListUtils +{ + private static Random rng = new(); + + public static void Shuffle(this IList list) + { + int n = list.Count; + while (n > 1) + { + n--; + int k = rng.Next(n + 1); + T value = list[k]; + list[k] = list[n]; + list[n] = value; + } + } +} \ No newline at end of file