Skip to content

Commit 0deb5bb

Browse files
deleteLaterCopilot
andauthored
refactor: should not log reconnect error when stopped by caller (#29)
* draft fix * adjust tests * chore * chore * chore * update log level * chore Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 4f8af8b commit 0deb5bb

5 files changed

Lines changed: 36 additions & 30 deletions

File tree

src/FeatBit.ServerSdk/DataSynchronizer/WebSocketDataSynchronizer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,11 @@ private Task OnReconnecting(Exception ex)
104104
return Task.CompletedTask;
105105
}
106106

107-
private Task OnClosed(Exception ex, WebSocketCloseStatus? closeStatus, string closeStatusDescription)
107+
private Task OnClosed(
108+
Exception ex,
109+
WebSocketCloseStatus? closeStatus,
110+
string closeStatusDescription,
111+
string closeMessage)
108112
{
109113
_statusManager.SetStatus(DataSynchronizerStatus.Stopped);
110114
return Task.CompletedTask;

src/FeatBit.ServerSdk/Transport/FbWebSocket.Log.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ private static partial class Log
7171
EventName = "AwaitingReconnectRetryDelay")]
7272
public static partial void AwaitingReconnectRetryDelay(ILogger logger, long retryTimes, TimeSpan retryDelay);
7373

74-
[LoggerMessage(19, LogLevel.Warning, "Connection stopped during reconnect delay. Done reconnecting.",
74+
[LoggerMessage(19, LogLevel.Debug, "FbWebSocket stopped during reconnect delay. Done reconnecting.",
7575
EventName = "ReconnectingStoppedDuringRetryDelay")]
7676
public static partial void ReconnectingStoppedDuringRetryDelay(ILogger logger);
7777

@@ -83,14 +83,14 @@ private static partial class Log
8383
[LoggerMessage(21, LogLevel.Debug, "Reconnect attempt failed.", EventName = "ReconnectAttemptFailed")]
8484
public static partial void ReconnectAttemptFailed(ILogger logger, Exception exception);
8585

86-
[LoggerMessage(22, LogLevel.Warning, "Connection stopped during reconnect attempt. Done reconnecting.",
86+
[LoggerMessage(22, LogLevel.Debug, "FbWebSocket stopped during reconnect attempt. Done reconnecting.",
8787
EventName = "ReconnectingStoppedDuringReconnectAttempt")]
8888
public static partial void ReconnectingStoppedDuringReconnectAttempt(ILogger logger);
8989

90-
[LoggerMessage(23, LogLevel.Trace, "Shutting down connection.", EventName = "ShuttingDown")]
91-
public static partial void ShuttingDown(ILogger logger);
90+
[LoggerMessage(23, LogLevel.Debug, "FbWebSocket is shutting down. Message: {Message}", EventName = "ShuttingDown")]
91+
public static partial void ShuttingDown(ILogger logger, string message);
9292

93-
[LoggerMessage(24, LogLevel.Error, "Connection is shutting down with an error.",
93+
[LoggerMessage(24, LogLevel.Error, "FbWebSocket is shutting down with an error.",
9494
EventName = "ShuttingDownWithError")]
9595
public static partial void ShuttingDownWithError(ILogger logger, Exception exception);
9696

src/FeatBit.ServerSdk/Transport/FbWebSocket.cs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal sealed partial class FbWebSocket
1717
public event Func<Task> OnKeepAlive;
1818
public event Func<Exception, Task> OnReconnecting;
1919
public event Func<Task> OnReconnected;
20-
public event Func<Exception, WebSocketCloseStatus?, string, Task> OnClosed;
20+
public event Func<Exception, WebSocketCloseStatus?, string, string, Task> OnClosed;
2121
public event Func<ReadOnlySequence<byte>, Task> OnReceived;
2222

2323
private static readonly ReadOnlyMemory<byte> PingMessage =
@@ -201,7 +201,7 @@ private async Task HandleConnectionCloseAsync()
201201
}
202202
else
203203
{
204-
CompleteClose(_closeException);
204+
CompleteClose(exception: _closeException);
205205
}
206206
}
207207

@@ -232,7 +232,7 @@ private async Task ReconnectAsync()
232232
if (!ShouldReconnect())
233233
{
234234
Log.GiveUpReconnect(_logger, _transport.CloseStatus);
235-
CompleteClose(_closeException);
235+
CompleteClose(message: "Give up reconnecting.");
236236
return;
237237
}
238238

@@ -242,12 +242,10 @@ private async Task ReconnectAsync()
242242
Log.AwaitingReconnectRetryDelay(_logger, retryTimes, nextRetryDelay);
243243
await Task.Delay(nextRetryDelay, _stopCts.Token).ConfigureAwait(false);
244244
}
245-
catch (OperationCanceledException ex)
245+
catch (OperationCanceledException)
246246
{
247247
Log.ReconnectingStoppedDuringRetryDelay(_logger);
248-
var stoppedEx =
249-
new Exception("FbWebSocket stopped during reconnect delay. Done reconnecting.", ex);
250-
CompleteClose(stoppedEx);
248+
CompleteClose(message: "FbWebSocket stopped during reconnect delay. Done reconnecting.");
251249

252250
return;
253251
}
@@ -271,10 +269,7 @@ private async Task ReconnectAsync()
271269
if (_stopCts.IsCancellationRequested)
272270
{
273271
Log.ReconnectingStoppedDuringReconnectAttempt(_logger);
274-
275-
var stoppedEx =
276-
new Exception("Connection stopped during reconnect attempt. Done reconnecting.", ex);
277-
CompleteClose(stoppedEx);
272+
CompleteClose(message: "FbWebSocket stopped during reconnect attempt. Done reconnecting.");
278273

279274
return;
280275
}
@@ -284,21 +279,22 @@ private async Task ReconnectAsync()
284279
}
285280
}
286281

287-
private void CompleteClose(Exception exception)
282+
private void CompleteClose(Exception exception = null, string message = "")
288283
{
289284
if (exception != null)
290285
{
291286
Log.ShuttingDownWithError(_logger, exception);
292287
}
293-
else
288+
289+
if (message != null)
294290
{
295-
Log.ShuttingDown(_logger);
291+
Log.ShuttingDown(_logger, message);
296292
}
297293

298294
_stopCts = new CancellationTokenSource();
299295

300296
Log.InvokingEventHandler(_logger, nameof(OnClosed));
301-
_ = OnClosed?.Invoke(exception, _transport.CloseStatus, _transport.CloseDescription).ConfigureAwait(false);
297+
_ = OnClosed?.Invoke(exception, _transport.CloseStatus, _transport.CloseDescription, message).ConfigureAwait(false);
302298

303299
if (_transport.CloseStatus.HasValue && _transport.CloseStatus != WebSocketCloseStatus.NormalClosure)
304300
{

tests/FeatBit.ServerSdk.Tests/FbClientOfflineTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void UseNullEventProcessor()
4747
public void UseNullEventProcessorWhenEventsAreDisabled()
4848
{
4949
var options = new FbOptionsBuilder()
50-
.Offline(false)
50+
.Offline(true)
5151
.DisableEvents(true)
5252
.Build();
5353

tests/FeatBit.ServerSdk.Tests/Transport/FbWebSocketTests.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,12 @@ public async Task TestOnClosed_ClientInitiated()
8484
var fbWebSocket = _app.CreateFbWebSocket("echo");
8585

8686
var onClosedCalled = false;
87-
fbWebSocket.OnClosed += (exception, closeStatus, closeDescription) =>
87+
fbWebSocket.OnClosed += (exception, closeStatus, closeDescription, closeMessage) =>
8888
{
8989
Assert.Null(exception);
9090
Assert.Equal(WebSocketCloseStatus.NormalClosure, closeStatus);
9191
Assert.Equal(string.Empty, closeDescription);
92+
Assert.Equal(string.Empty, closeMessage);
9293

9394
onClosedCalled = true;
9495
return Task.CompletedTask;
@@ -101,22 +102,24 @@ public async Task TestOnClosed_ClientInitiated()
101102
}
102103

103104
[Theory]
104-
[InlineData("close-normally", WebSocketCloseStatus.NormalClosure, "")]
105-
[InlineData("close-with-4003", (WebSocketCloseStatus)4003, "invalid request, close by server")]
105+
[InlineData("close-normally", WebSocketCloseStatus.NormalClosure, "", "")]
106+
[InlineData("close-with-4003", (WebSocketCloseStatus)4003, "invalid request, close by server", "")]
106107
public async Task TestOnClosed_ServerInitiated(
107108
string op,
108109
WebSocketCloseStatus expectCloseStatus,
109-
string expectCloseDescription)
110+
string expectCloseDescription,
111+
string expectCloseMessage)
110112
{
111113
var fbWebSocket = _app.CreateFbWebSocket(op);
112114

113115
var tcs = new TaskCompletionSource();
114116
var onClosedTask = tcs.Task;
115-
fbWebSocket.OnClosed += (exception, closeStatus, closeDescription) =>
117+
fbWebSocket.OnClosed += (exception, closeStatus, closeDescription, closeMessage) =>
116118
{
117119
Assert.Null(exception);
118120
Assert.Equal(expectCloseStatus, closeStatus);
119121
Assert.Equal(expectCloseDescription, closeDescription);
122+
Assert.Equal(expectCloseMessage, closeMessage);
120123

121124
tcs.SetResult();
122125
return Task.CompletedTask;
@@ -224,10 +227,13 @@ public async Task CanStopFbWebSocketWhenReconnecting()
224227

225228
var tcs = new TaskCompletionSource();
226229
var onClosedTask = tcs.Task;
227-
fbWebSocket.OnClosed += (exception, _, _) =>
230+
fbWebSocket.OnClosed += (exception, closeStatus, closeDescription, closeMessage) =>
228231
{
229-
Assert.NotNull(exception);
230-
Assert.Equal("FbWebSocket stopped during reconnect delay. Done reconnecting.", exception.Message);
232+
Assert.Null(exception);
233+
Assert.Equal(WebSocketCloseStatus.EndpointUnavailable, closeStatus);
234+
Assert.Equal("server going down", closeDescription);
235+
236+
Assert.Equal("FbWebSocket stopped during reconnect delay. Done reconnecting.", closeMessage);
231237

232238
tcs.SetResult();
233239
return Task.CompletedTask;

0 commit comments

Comments
 (0)