diff --git a/src/Redis/Orleans.Clustering.Redis/Providers/RedisClusteringOptions.cs b/src/Redis/Orleans.Clustering.Redis/Providers/RedisClusteringOptions.cs index 06730320e5e..0274916438a 100644 --- a/src/Redis/Orleans.Clustering.Redis/Providers/RedisClusteringOptions.cs +++ b/src/Redis/Orleans.Clustering.Redis/Providers/RedisClusteringOptions.cs @@ -2,7 +2,9 @@ using Orleans.Runtime; using StackExchange.Redis; using System; +using System.Text; using System.Threading.Tasks; +using Orleans.Configuration; namespace Orleans.Clustering.Redis { @@ -22,6 +24,11 @@ public class RedisClusteringOptions /// public Func> CreateMultiplexer { get; set; } = DefaultCreateMultiplexer; + /// + /// The delegate used to create redis key for RedisMembershipTable. + /// + public Func CreateRedisKey { get; set; } = DefaultCreateRedisKey; + /// /// Entry expiry, null by default. A value should be set ONLY for ephemeral environments (like in tests). /// Setting a value different from null will cause entries to be deleted after some period of time. @@ -35,6 +42,15 @@ public static async Task DefaultCreateMultiplexer(RedisC { return await ConnectionMultiplexer.ConnectAsync(options.ConfigurationOptions); } + + /// + /// The default multiplexer creation redis key for RedisMembershipTable. + /// + /// + public static RedisKey DefaultCreateRedisKey(ClusterOptions clusterOptions) + { + return Encoding.UTF8.GetBytes($"{clusterOptions.ServiceId}/members/{clusterOptions.ClusterId}"); + } } internal class RedactRedisConfigurationOptions : RedactAttribute diff --git a/src/Redis/Orleans.Clustering.Redis/Storage/RedisMembershipTable.cs b/src/Redis/Orleans.Clustering.Redis/Storage/RedisMembershipTable.cs index 52d702d9421..f2933b71efb 100644 --- a/src/Redis/Orleans.Clustering.Redis/Storage/RedisMembershipTable.cs +++ b/src/Redis/Orleans.Clustering.Redis/Storage/RedisMembershipTable.cs @@ -8,7 +8,6 @@ using System.Linq; using Microsoft.Extensions.Options; using System.Globalization; -using System.Text; using System.Diagnostics.CodeAnalysis; namespace Orleans.Clustering.Redis @@ -28,7 +27,7 @@ public RedisMembershipTable(IOptions redisOptions, IOpti { _redisOptions = redisOptions.Value; _clusterOptions = clusterOptions.Value; - _clusterKey = Encoding.UTF8.GetBytes($"{_clusterOptions.ServiceId}/members/{_clusterOptions.ClusterId}"); + _clusterKey = _redisOptions.CreateRedisKey(_clusterOptions); _jsonSerializerSettings = JsonSettings.JsonSerializerSettings; }