Skip to content

Commit 417d284

Browse files
committed
Refactoring
1 parent 0979b6c commit 417d284

3 files changed

Lines changed: 45 additions & 69 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using StackExchange.Redis;
2+
using System.Diagnostics;
3+
using System.Net;
4+
5+
namespace OrchardCoreContrib.Garnet;
6+
7+
internal class GarnetOptionsConverter
8+
{
9+
public static ConfigurationOptions ConvertToConfigurationOptions(GarnetOptions garnetOptions)
10+
{
11+
var endPoints = new EndPointCollection
12+
{
13+
new DnsEndPoint(garnetOptions.Host, garnetOptions.Port)
14+
};
15+
var configurationOptions = new ConfigurationOptions
16+
{
17+
EndPoints = endPoints,
18+
ConnectTimeout = (int)TimeSpan.FromSeconds(2).TotalMilliseconds,
19+
SyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
20+
AsyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
21+
ReconnectRetryPolicy = new LinearRetry((int)TimeSpan.FromSeconds(10).TotalMilliseconds),
22+
ConnectRetry = 5,
23+
IncludeDetailInExceptions = true,
24+
AbortOnConnectFail = true,
25+
User = garnetOptions.UserName,
26+
Password = garnetOptions.Password
27+
};
28+
29+
if (Debugger.IsAttached)
30+
{
31+
configurationOptions.SyncTimeout = (int)TimeSpan.FromHours(2).TotalMilliseconds;
32+
configurationOptions.AsyncTimeout = (int)TimeSpan.FromHours(2).TotalMilliseconds;
33+
}
34+
35+
return configurationOptions;
36+
}
37+
}

src/OrchardCoreContrib.Garnet/Services/GarnetBus.cs

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using OrchardCore.Caching.Distributed;
44
using OrchardCore.Environment.Shell;
55
using StackExchange.Redis;
6-
using System.Diagnostics;
76
using System.Net;
87

98
namespace OrchardCoreContrib.Garnet.Services;
@@ -21,7 +20,7 @@ public class GarnetBus(
2120
ShellSettings shellSettings,
2221
ILogger<GarnetBus> logger) : IMessageBus
2322
{
24-
private readonly GarnetOptions _garnetOptions = garnetOptions.Value;
23+
private readonly ConfigurationOptions _configurationOptions = GarnetOptionsConverter.ConvertToConfigurationOptions(garnetOptions.Value);
2524
private readonly string _hostName = Dns.GetHostName() + ':' + Environment.ProcessId;
2625
private readonly string _channelPrefix = garnetService.InstancePrefix + shellSettings.Name + ':';
2726

@@ -40,7 +39,7 @@ public async Task SubscribeAsync(string channel, Action<string, string> handler)
4039
}
4140
}
4241

43-
var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(GetConfigurationOptions(_garnetOptions));
42+
var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(_configurationOptions);
4443

4544
try
4645
{
@@ -79,7 +78,7 @@ public async Task PublishAsync(string channel, string message)
7978
}
8079
}
8180

82-
var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(GetConfigurationOptions(_garnetOptions));
81+
var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(_configurationOptions);
8382

8483
try
8584
{
@@ -91,33 +90,4 @@ await connectionMultiplexer.GetSubscriber()
9190
logger.LogError(e, "Unable to publish to the channel '{ChannelName}'.", _channelPrefix + channel);
9291
}
9392
}
94-
95-
private static ConfigurationOptions GetConfigurationOptions(GarnetOptions garnetOptions)
96-
{
97-
var endPoints = new EndPointCollection
98-
{
99-
new DnsEndPoint(garnetOptions.Host, garnetOptions.Port)
100-
};
101-
var configOptions = new ConfigurationOptions
102-
{
103-
EndPoints = endPoints,
104-
ConnectTimeout = (int)TimeSpan.FromSeconds(2).TotalMilliseconds,
105-
SyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
106-
AsyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
107-
ReconnectRetryPolicy = new LinearRetry((int)TimeSpan.FromSeconds(10).TotalMilliseconds),
108-
ConnectRetry = 5,
109-
IncludeDetailInExceptions = true,
110-
AbortOnConnectFail = true,
111-
User = garnetOptions.UserName,
112-
Password = garnetOptions.Password
113-
};
114-
115-
if (Debugger.IsAttached)
116-
{
117-
configOptions.SyncTimeout = (int)TimeSpan.FromHours(2).TotalMilliseconds;
118-
configOptions.AsyncTimeout = (int)TimeSpan.FromHours(2).TotalMilliseconds;
119-
}
120-
121-
return configOptions;
122-
}
12393
}

src/OrchardCoreContrib.Garnet/Services/GarnetLock.cs

Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using OrchardCore.Locking;
55
using OrchardCore.Locking.Distributed;
66
using StackExchange.Redis;
7-
using System.Diagnostics;
87
using System.Net;
98

109
namespace OrchardCoreContrib.Garnet.Services;
@@ -25,9 +24,9 @@ public class GarnetLock(
2524
private static readonly double _baseDelay = 100;
2625
private static readonly double _maxDelay = 10000;
2726

28-
private readonly GarnetOptions _garnetOptions = garnetOptions.Value;
2927
private readonly string _hostName = Dns.GetHostName() + ':' + Environment.ProcessId;
3028
private readonly string _prefix = garnetService.InstancePrefix + shellSettings.Name + ':';
29+
private readonly ConfigurationOptions _configurationOptions = GarnetOptionsConverter.ConvertToConfigurationOptions(garnetOptions.Value);
3130

3231
/// <summary>
3332
/// Waits indefinitely until acquiring a named lock with a given expiration for the current tenant
@@ -94,7 +93,7 @@ public async Task<bool> IsLockAcquiredAsync(string key)
9493
try
9594
{
9695
var database = (await ConnectionMultiplexer
97-
.ConnectAsync(GetConfigurationOptions(_garnetOptions)))
96+
.ConnectAsync(_configurationOptions))
9897
.GetDatabase();
9998

10099
return (await database.LockQueryAsync(_prefix + key)).HasValue;
@@ -124,7 +123,7 @@ private async Task<bool> LockAsync(string key, TimeSpan expiry)
124123
try
125124
{
126125
var database = (await ConnectionMultiplexer
127-
.ConnectAsync(GetConfigurationOptions(_garnetOptions)))
126+
.ConnectAsync(_configurationOptions))
128127
.GetDatabase();
129128

130129
return await database.LockTakeAsync(_prefix + key, _hostName, expiry);
@@ -142,7 +141,7 @@ private async ValueTask ReleaseAsync(string key)
142141
try
143142
{
144143
var database = (await ConnectionMultiplexer
145-
.ConnectAsync(GetConfigurationOptions(_garnetOptions)))
144+
.ConnectAsync(_configurationOptions))
146145
.GetDatabase();
147146

148147
await database.LockReleaseAsync(_prefix + key, _hostName);
@@ -158,7 +157,7 @@ private void Release(string key)
158157
try
159158
{
160159
var database = ConnectionMultiplexer
161-
.ConnectAsync(GetConfigurationOptions(_garnetOptions))
160+
.ConnectAsync(_configurationOptions)
162161
.GetAwaiter()
163162
.GetResult()
164163
.GetDatabase();
@@ -206,34 +205,4 @@ private static TimeSpan GetDelay(double retries)
206205

207206
return TimeSpan.FromMilliseconds(Math.Min(delay, _maxDelay));
208207
}
209-
210-
// TODO: Use explicit conversion operators to convert between GarnetOptions and ConfigurationOptions
211-
private static ConfigurationOptions GetConfigurationOptions(GarnetOptions garnetOptions)
212-
{
213-
var endPoints = new EndPointCollection
214-
{
215-
new DnsEndPoint(garnetOptions.Host, garnetOptions.Port)
216-
};
217-
var configOptions = new ConfigurationOptions
218-
{
219-
EndPoints = endPoints,
220-
ConnectTimeout = (int)TimeSpan.FromSeconds(2).TotalMilliseconds,
221-
SyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
222-
AsyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
223-
ReconnectRetryPolicy = new LinearRetry((int)TimeSpan.FromSeconds(10).TotalMilliseconds),
224-
ConnectRetry = 5,
225-
IncludeDetailInExceptions = true,
226-
AbortOnConnectFail = true,
227-
User = garnetOptions.UserName,
228-
Password = garnetOptions.Password
229-
};
230-
231-
if (Debugger.IsAttached)
232-
{
233-
configOptions.SyncTimeout = (int)TimeSpan.FromHours(2).TotalMilliseconds;
234-
configOptions.AsyncTimeout = (int)TimeSpan.FromHours(2).TotalMilliseconds;
235-
}
236-
237-
return configOptions;
238-
}
239208
}

0 commit comments

Comments
 (0)