Remove downstream channel in noncancellable context
Fixes #435
Explanation: When downstream flow is aborted (this is happening when first operator is called on flow -> which is called in Store.fresh extension), than coroutine context in which is subflow (created from channel) is cancelling. In this case the channel is cancelled too, but there is no guarantee that channel is properly removed from the channel manager. In the next run when the channel manager is trying to send msg (ChannelManager::doDispatchValue) to this cancelled channel, it throws AbortFlowException. This exception is caught in StoreRealActor and this caused that all channels(and Multicaster itself) are closed.
I try to prepare tests for this behaviour in next few days
Thanks! Will merge once we have a test. Thank you for fixing.
please run ./gradlew multicast:apiDump to fix the failure
please CR
Generally looks good. I'm curious why creation of new class/rename rather than fixing inline? The concern is we will lose git history
i don't like when implementation is mixed with interfaces, but if this is preferred way, i can change it..
Got it that makes sense. Can we flip do that the impl is in old file. It's mostly just history I care about
ok, i will change it
Codecov Report
:exclamation: No coverage uploaded for pull request base (
main@9721acd). Click here to learn what that means. Patch has no changes to coverable lines.
Additional details and impacted files
@@ Coverage Diff @@
## main #440 +/- ##
=======================================
Coverage ? 84.40%
Complexity ? 173
=======================================
Files ? 49
Lines ? 917
Branches ? 132
=======================================
Hits ? 774
Misses ? 78
Partials ? 65
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.
:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.
@digitalbuddha is it ok now?