Skip to content

Commit

Permalink
Avoid mutating IPEndPoint in RedisGatewayListProvider (#9146)
Browse files Browse the repository at this point in the history
Avoid mutating IPEndPoint in RedisGatewayListProvider
  • Loading branch information
ReubenBond authored Sep 24, 2024
1 parent 2d21b3f commit ad8d22d
Showing 1 changed file with 25 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,44 +7,37 @@
using System.Linq;
using Microsoft.Extensions.Options;

namespace Orleans.Clustering.Redis
{
internal class RedisGatewayListProvider : IGatewayListProvider
{
private readonly RedisMembershipTable _table;
private readonly GatewayOptions _gatewayOptions;

public RedisGatewayListProvider(RedisMembershipTable table, IOptions<GatewayOptions> options)
{
_gatewayOptions = options.Value;
_table = table;
}

public TimeSpan MaxStaleness => _gatewayOptions.GatewayListRefreshPeriod;
namespace Orleans.Clustering.Redis;

public bool IsUpdatable => true;
internal sealed class RedisGatewayListProvider(RedisMembershipTable table, IOptions<GatewayOptions> options) : IGatewayListProvider
{
private readonly RedisMembershipTable _table = table;
private readonly GatewayOptions _gatewayOptions = options.Value;

public async Task<IList<Uri>> GetGateways()
{
if (!_table.IsInitialized)
{
await _table.InitializeMembershipTable(true);
}
public TimeSpan MaxStaleness => _gatewayOptions.GatewayListRefreshPeriod;

var all = await _table.ReadAll();
var result = all.Members
.Where(x => x.Item1.Status == SiloStatus.Active && x.Item1.ProxyPort != 0)
.Select(x =>
{
x.Item1.SiloAddress.Endpoint.Port = x.Item1.ProxyPort;
return x.Item1.SiloAddress.ToGatewayUri();
}).ToList();
return result;
}
public bool IsUpdatable => true;

public async Task InitializeGatewayListProvider()
public async Task<IList<Uri>> GetGateways()
{
if (!_table.IsInitialized)
{
await _table.InitializeMembershipTable(true);
}

var all = await _table.ReadAll();
var result = all.Members
.Where(x => x.Item1.Status == SiloStatus.Active && x.Item1.ProxyPort != 0)
.Select(x =>
{
var entry = x.Item1;
return SiloAddress.New(entry.SiloAddress.Endpoint.Address, entry.ProxyPort, entry.SiloAddress.Generation).ToGatewayUri();
}).ToList();
return result;
}

public async Task InitializeGatewayListProvider()
{
await _table.InitializeMembershipTable(true);
}
}

0 comments on commit ad8d22d

Please sign in to comment.