-
Notifications
You must be signed in to change notification settings - Fork 10.4k
[blazor] fix multiple calls to OnConnectionDownAsync #62518
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[blazor] fix multiple calls to OnConnectionDownAsync #62518
Conversation
if (this.Client.Connected) | ||
{ | ||
await OnConnectionDownAsync(CancellationToken.None); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this is the right change to fix the metric issue. It's changing an existing behavior of the system that users might be relying on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this event is called twice. That's a bug not a feature
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is causing the 2nd call?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@javiercn does this make sense or you have another proposal for the fix ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just tested the "close tab" and "navigate to non-interactive page". Both behave as expected, that is, they call the event once.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Terminate it's not being fired in those cases.
- Close tab will likely don't cause
unload
to fire. navigate to non-interactive page
- It takes a bit of time for the client to start the circuit disposal.
- If for some reason it's not happening, it's also a bug.
If we check for the circuit to be connected it won't fire when we want to eagerly terminate the circuit.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we need to call that event from places that call circuitHost.Client.SetDisconnected()
rather than relying that circuitHost.DisposeAsync()
would always call it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also I'm not sure that the new PauseAndDisposeCircuitHost
is calling SetDisconnected()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I made the calls to OnConnectionDownAsync
more explicit now, instead of relying on the DisposeAsync
.
@javiercn please review again.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rather than restructure the code in the current way. Isn't it simpler and safer to make OnConnectionDown
"idempotent"? Keeping a flag when you run it and resetting it with OnConnectionUp
.
That way we save ourselves the trouble of having to worry about when OnConnectionDown
should run and the change is localized into a single file and can be easily tested.
I worry that the current approach introduces subtle behavior changes and require us to carefully consider the correctness of all the locations where we are now explicitly handling the callbacks.
Also the If we rather introduce a new flag, should it be
Do you mean that we only fire
In other words, do you want to fix double-firing of Anyway, I'll give it a try with a new flag and I'll improve the fix for |
CircuitHost.OnConnectionDownAsync()
fromCircuitHost.DisposeAsync()
if it's not connected_circuitConnectedCounter.Add
fromCircuitMetrics.OnCircuitDown
Fixes #62219