diff --git a/src/Orleans.Runtime/MembershipService/MembershipGossiper.cs b/src/Orleans.Runtime/MembershipService/MembershipGossiper.cs index 2ad1fc50b7..0693672d2c 100644 --- a/src/Orleans.Runtime/MembershipService/MembershipGossiper.cs +++ b/src/Orleans.Runtime/MembershipService/MembershipGossiper.cs @@ -1,41 +1,34 @@ +#nullable enable using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -namespace Orleans.Runtime.MembershipService +namespace Orleans.Runtime.MembershipService; + +internal class MembershipGossiper(IServiceProvider serviceProvider, ILogger logger) : IMembershipGossiper { - internal class MembershipGossiper : IMembershipGossiper + private MembershipSystemTarget? _membershipSystemTarget; + + public Task GossipToRemoteSilos( + List gossipPartners, + MembershipTableSnapshot snapshot, + SiloAddress updatedSilo, + SiloStatus updatedStatus) { - private readonly IServiceProvider serviceProvider; - private readonly ILogger log; + if (gossipPartners.Count == 0) return Task.CompletedTask; - public MembershipGossiper(IServiceProvider serviceProvider, ILogger log) + if (logger.IsEnabled(LogLevel.Debug)) { - this.serviceProvider = serviceProvider; - this.log = log; + logger.LogDebug( + "Gossiping {Silo} status {Status} to {NumPartners} partners", + updatedSilo, + updatedStatus, + gossipPartners.Count); } - public Task GossipToRemoteSilos( - List gossipPartners, - MembershipTableSnapshot snapshot, - SiloAddress updatedSilo, - SiloStatus updatedStatus) - { - if (gossipPartners.Count == 0) return Task.CompletedTask; - - if (log.IsEnabled(LogLevel.Debug)) - { - this.log.LogDebug( - "Gossiping {Silo} status {Status} to {NumPartners} partners", - updatedSilo, - updatedStatus, - gossipPartners.Count); - } - - var systemTarget = this.serviceProvider.GetRequiredService(); - return systemTarget.GossipToRemoteSilos(gossipPartners, snapshot, updatedSilo, updatedStatus); - } + var systemTarget = _membershipSystemTarget ??= serviceProvider.GetRequiredService(); + return systemTarget.GossipToRemoteSilos(gossipPartners, snapshot, updatedSilo, updatedStatus); } }