Make peer recovery send file chunks async #44468
Merged
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.
This PR reintroduces #44040 with an additional commit fixing the notify once assertion. We can call
MultiFileTransfer#onComplete
twice if the recovery is canceled during the clean_files step.Send_files step calls
MultiFileTransfer#onComplete(null)
to start the clean_files stepClean_files sends and receives a response before the method returns. The response notifies the phase 1 listener (either success or failure).
Before returning, the clean_files method checkForCancel and throws an exception as the recovery was canceled. This causes the send_files listener to notify the phase1 listener. However, the phase1 listener was notified in step 2 already. The phase1 listener must be notified at most once as it delegates to ListenerFuture.
The new commit allows StepListener to be notified multiple times.
Relates #44040
Relates #36195