Skip to content

Commit a2ac956

Browse files
authored
Investigate #3007; defensive code in maintenance events, and resubscription; fix inappropriate async void (#3013)
1 parent 98eb6a2 commit a2ac956

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

src/StackExchange.Redis/Maintenance/AzureMaintenanceEvent.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,24 +124,32 @@ internal static async Task AddListenerAsync(ConnectionMultiplexer multiplexer, A
124124
try
125125
{
126126
var sub = multiplexer.GetSubscriber();
127-
if (sub == null)
127+
// ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
128+
if (sub is null)
128129
{
129130
log?.Invoke("Failed to GetSubscriber for AzureRedisEvents");
130131
return;
131132
}
132133

133-
await sub.SubscribeAsync(RedisChannel.Literal(PubSubChannelName), async (_, message) =>
134+
await sub.SubscribeAsync(RedisChannel.Literal(PubSubChannelName), (_, message) =>
134135
{
135-
var newMessage = new AzureMaintenanceEvent(message!);
136-
newMessage.NotifyMultiplexer(multiplexer);
136+
try
137+
{
138+
var newMessage = new AzureMaintenanceEvent(message!);
139+
newMessage.NotifyMultiplexer(multiplexer);
137140

138-
switch (newMessage.NotificationType)
141+
switch (newMessage.NotificationType)
142+
{
143+
case AzureNotificationType.NodeMaintenanceEnded:
144+
case AzureNotificationType.NodeMaintenanceFailoverComplete:
145+
case AzureNotificationType.NodeMaintenanceScaleComplete:
146+
multiplexer.ReconfigureAsync($"Azure Event: {newMessage.NotificationType.ToString()}").RedisFireAndForget();
147+
break;
148+
}
149+
}
150+
catch (Exception e)
139151
{
140-
case AzureNotificationType.NodeMaintenanceEnded:
141-
case AzureNotificationType.NodeMaintenanceFailoverComplete:
142-
case AzureNotificationType.NodeMaintenanceScaleComplete:
143-
await multiplexer.ReconfigureAsync($"Azure Event: {newMessage.NotificationType}").ForAwait();
144-
break;
152+
log?.Invoke($"Encountered exception: {e}");
145153
}
146154
}).ForAwait();
147155
}

src/StackExchange.Redis/RedisSubscriber.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,14 @@ internal long EnsureSubscriptions(CommandFlags flags = CommandFlags.None)
135135
var subscriber = DefaultSubscriber;
136136
foreach (var pair in subscriptions)
137137
{
138-
count += pair.Value.EnsureSubscribedToServer(subscriber, pair.Key, flags, true);
138+
try
139+
{
140+
count += pair.Value.EnsureSubscribedToServer(subscriber, pair.Key, flags, true);
141+
}
142+
catch (Exception ex)
143+
{
144+
OnInternalError(ex);
145+
}
139146
}
140147
return count;
141148
}

0 commit comments

Comments
 (0)