From 4f0221256248c52addf58b3157417dfb71fa78ca Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 9 Oct 2023 14:17:36 +0900 Subject: [PATCH] Make redis initialisation lazy --- osu.Server.QueueProcessor/QueueProcessor.cs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/osu.Server.QueueProcessor/QueueProcessor.cs b/osu.Server.QueueProcessor/QueueProcessor.cs index 990d4ce..d4a4bc3 100644 --- a/osu.Server.QueueProcessor/QueueProcessor.cs +++ b/osu.Server.QueueProcessor/QueueProcessor.cs @@ -46,11 +46,10 @@ public abstract class QueueProcessor where T : QueueItem private readonly QueueConfiguration config; - /// - /// An option queue to push to when finished. - /// - private readonly ConnectionMultiplexer redis = ConnectionMultiplexer.Connect( - Environment.GetEnvironmentVariable("REDIS_HOST") ?? "localhost"); + private readonly Lazy redis = new Lazy(() => ConnectionMultiplexer.Connect( + Environment.GetEnvironmentVariable("REDIS_HOST") ?? "localhost")); + + private IDatabase getRedisDatabase() => redis.Value.GetDatabase(); private long totalProcessed; @@ -92,7 +91,7 @@ public void Run(CancellationToken cancellation = default) using (var threadPool = new ThreadedTaskScheduler(Environment.ProcessorCount, "workers")) { - var database = redis.GetDatabase(); + IDatabase database = getRedisDatabase(); while (!cts.Token.IsCancellationRequested) { @@ -229,19 +228,19 @@ private void outputStats() /// /// public void PushToQueue(T item) => - redis.GetDatabase().ListLeftPush(QueueName, JsonConvert.SerializeObject(item)); + getRedisDatabase().ListLeftPush(QueueName, JsonConvert.SerializeObject(item)); /// /// Push multiple items to the queue. /// /// public void PushToQueue(IEnumerable items) => - redis.GetDatabase().ListLeftPush(QueueName, items.Select(obj => new RedisValue(JsonConvert.SerializeObject(obj))).ToArray()); + getRedisDatabase().ListLeftPush(QueueName, items.Select(obj => new RedisValue(JsonConvert.SerializeObject(obj))).ToArray()); public long GetQueueSize() => - redis.GetDatabase().ListLength(QueueName); + getRedisDatabase().ListLength(QueueName); - public void ClearQueue() => redis.GetDatabase().KeyDelete(QueueName); + public void ClearQueue() => getRedisDatabase().KeyDelete(QueueName); /// /// Publishes a message to a Redis channel with the supplied . @@ -255,7 +254,7 @@ public long GetQueueSize() => /// The type of message to be published. public void PublishMessage(string channelName, TMessage message) { - redis.GetDatabase().Publish(channelName, JsonConvert.SerializeObject(message)); + getRedisDatabase().Publish(channelName, JsonConvert.SerializeObject(message)); DogStatsd.Increment("messages_published", tags: new[] { $"channel:{channelName}", $"type:{typeof(TMessage).FullName}" }); }