diff --git a/Docker/run/compose/mare-sharded.yml b/Docker/run/compose/mare-sharded.yml index 2b7c55c..f330eec 100644 --- a/Docker/run/compose/mare-sharded.yml +++ b/Docker/run/compose/mare-sharded.yml @@ -33,11 +33,11 @@ services: image: darkarchon/mare-synchronos-server:latest restart: on-failure environment: - MareSynchronos__CdnFullUrl: "${DEV_MARE_CDNURL}" + MareSynchronos__CdnFullUrl: "http://darkarchon.internet-box.ch:9999" MareSynchronos__CdnShardConfiguration__0__CdnFullUrl: "${DEV_MARE_CDNURL}" - MareSynchronos__CdnShardConfiguration__0__FileMatch: "^[01234567]" + MareSynchronos__CdnShardConfiguration__0__FileMatch: "^[012345678]" MareSynchronos__CdnShardConfiguration__1__CdnFullUrl: "${DEV_MARE_CDNURL2}" - MareSynchronos__CdnShardConfiguration__1__FileMatch: "^[89ABCDEF]" + MareSynchronos__CdnShardConfiguration__1__FileMatch: "^[789ABCDEF]" volumes: - ../config/sharded/server-shard-main.json:/opt/MareSynchronosServer/appsettings.json - ../log/server-shard-main/:/opt/MareSynchronosServer/logs/:rw diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs index 1eb426a..6f4fc66 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Files.cs @@ -1,5 +1,6 @@ using System.Security.Claims; using System.Security.Cryptography; +using System.Text.RegularExpressions; using Google.Protobuf; using Grpc.Core; using MareSynchronos.API; @@ -53,13 +54,13 @@ public partial class MareHub var cacheFile = await _dbContext.Files.AsNoTracking().Where(f => hashes.Contains(f.Hash)).AsNoTracking().Select(k => new { k.Hash, k.Size }).AsNoTracking().ToListAsync().ConfigureAwait(false); - var shardConfig = _configurationService.GetValueOrDefault(nameof(ServerConfiguration.CdnShardConfiguration), new List()); + var shardConfig = new List(_configurationService.GetValueOrDefault(nameof(ServerConfiguration.CdnShardConfiguration), new List())); foreach (var file in cacheFile) { var forbiddenFile = forbiddenFiles.SingleOrDefault(f => string.Equals(f.Hash, file.Hash, StringComparison.OrdinalIgnoreCase)); - var matchedShardConfig = shardConfig.OrderBy(g => Guid.NewGuid()).FirstOrDefault(f => f.FileMatchRegex.Match(file.Hash).Success); + var matchedShardConfig = shardConfig.OrderBy(g => Guid.NewGuid()).FirstOrDefault(f => new Regex(f.FileMatch).IsMatch(file.Hash)); var baseUrl = matchedShardConfig?.CdnFullUrl ?? _mainCdnFullUrl; response.Add(new DownloadFileDto diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs index 6d1cdf8..c3951e4 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs @@ -28,7 +28,7 @@ public partial class MareHub : Hub, IMareHub private readonly int _maxExistingGroupsByUser; private readonly int _maxJoinedGroupsByUser; private readonly int _maxGroupUserCount; - private IConfigurationService _configurationService; + private readonly IConfigurationService _configurationService; public MareHub(MareMetrics mareMetrics, FileService.FileServiceClient fileServiceClient, MareDbContext mareDbContext, ILogger logger, SystemInfoService systemInfoService, diff --git a/MareSynchronosServer/MareSynchronosShared/Services/MareConfigurationServiceClient.cs b/MareSynchronosServer/MareSynchronosShared/Services/MareConfigurationServiceClient.cs index dfe9ed7..d8fa2ef 100644 --- a/MareSynchronosServer/MareSynchronosShared/Services/MareConfigurationServiceClient.cs +++ b/MareSynchronosServer/MareSynchronosShared/Services/MareConfigurationServiceClient.cs @@ -10,15 +10,12 @@ using System.Globalization; using System.Reflection; using System.Text; using System.Text.Json; -using System.Text.RegularExpressions; using static MareSynchronosShared.Protos.ConfigurationService; namespace MareSynchronosShared.Services; public class MareConfigurationServiceClient : IHostedService, IConfigurationService where T : class, IMareConfiguration { - internal record RemoteCachedEntry(object Value, DateTime Inserted); - private readonly T _config; private readonly ConcurrentDictionary _cachedRemoteProperties = new(StringComparer.Ordinal); private readonly ILogger> _logger; @@ -121,10 +118,10 @@ public class MareConfigurationServiceClient : IHostedService, IConfigurationS var properties = _config.GetType().GetProperties(); foreach (var prop in properties) { - _logger.LogInformation("Checking Property " + prop.Name); try { if (!prop.GetCustomAttributes(typeof(RemoteConfigurationAttribute), true).Any()) continue; + _logger.LogInformation("Checking Property " + prop.Name); var mi = GetType().GetMethod(nameof(GetValueFromGrpc), BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(prop.PropertyType); var defaultValue = prop.PropertyType.IsValueType ? Activator.CreateInstance(prop.PropertyType) : null; var task = (Task)mi.Invoke(this, new[] { _configurationServiceClient, prop.Name, defaultValue }); @@ -136,6 +133,7 @@ public class MareConfigurationServiceClient : IHostedService, IConfigurationS if (resultValue != defaultValue) { _cachedRemoteProperties[prop.Name] = resultValue; + _logger.LogInformation(prop.Name + " is now " + resultValue.ToString()); } } catch (Exception ex) @@ -147,16 +145,17 @@ public class MareConfigurationServiceClient : IHostedService, IConfigurationS if (!_initialized) { _initialized = true; - _logger.LogInformation("Finished initial getting properties from GRPC"); - _logger.LogInformation(ToString()); } + + _logger.LogInformation("Saved properties from GRPC are now:"); + _logger.LogInformation(ToString()); } catch (Exception ex) { _logger.LogError(ex, "Failure getting or updating properties from GRPC, retrying in 30min"); } - await Task.Delay(TimeSpan.FromMinutes(30), ct).ConfigureAwait(false); + await Task.Delay(TimeSpan.FromMinutes(1), ct).ConfigureAwait(false); } } diff --git a/MareSynchronosServer/MareSynchronosShared/Utils/CdnShardConfiguration.cs b/MareSynchronosServer/MareSynchronosShared/Utils/CdnShardConfiguration.cs index 601c4a0..7805498 100644 --- a/MareSynchronosServer/MareSynchronosShared/Utils/CdnShardConfiguration.cs +++ b/MareSynchronosServer/MareSynchronosShared/Utils/CdnShardConfiguration.cs @@ -6,8 +6,6 @@ namespace MareSynchronosShared.Utils; public class CdnShardConfiguration { public string FileMatch { get; set; } - [JsonIgnore] - public Regex FileMatchRegex => new Regex(FileMatch); public Uri CdnFullUrl { get; set; } public override string ToString()