chore: separate shutdown and close for ProtocolClient #5969
+44
−14
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.
Add
ProtocolClient::Shutdown()which does not close the socket.For cluster:
When a migration is cancelled, we should not Close() the socket inside
Migration::Finish(). The reason is thatdoes not block and wait
Migration::SyncFbto complete. In this context, error is empty so there is no error handler to join on.Then within sync fb the dispatched callbacks of OnAllShards execute:
And initiate IO on a
Closed()fd triggering the check fd >0 within the socket destructor.Replication:
Also similarly, calling
sock->close()early can lead to the same crash in dfly flows. The reason is that the soon to be cancelled fiber attempts to do IO and crashes because of the check fail. Now instead, we shutdown, wait for the flows to complete and then close the socket.resolves #5968 and #5982