Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I have encountered a problem with reconnecting from the client side. The reconnectable block is triggered only before the first successful connection.
Here is a minimal example that reproduces the problem.
If the server is initially offline, the reconnectable block is called until a successful connection. But if the server is restarted after a successful connection, the connection is no longer restored, the reconnectable block is not called.
It looks like the problem is on the client side in io.rsocket.kotlin.connection.KeepAliveHandler
The coroutine is suspended on outbound.sendKeepAlive(true, EmptyBuffer, 0) and can no longer complete when keepAlive.maxLifetimeMillis is exceeded. If you look deeper, it looks like the frame is sent to the io.rsocket.kotlin.transport.internal.PrioritizationFrameQueue#priorityFrames channel, it looks like it just overflows, which leads to the suspension of the coroutine. I tried to move the logic for sending to a child coroutine - this solves the problem