Timeout provider after waiting a period of time for transfer to restart #655
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.
Goals
Currently, when a provider restarts when a data transfer is in progress, it goes into a waiting state for the client to restart the transfer. If the client doesn't restart the transfer, the provider simply stays in this state forever, never failing the deal. This can happen for example if the provider was offline long enough for the client to attempt restarts until it gave up and failed the deal on its own side.
Implementation
After a configurable amount of time (default 1 hour) in the awaiting restart state, if the transfer is not restart, fail the deal. This is accomplished via a state handler that fires a timeout event always after a the given time. If the state has transitioned by then, the event has no effect. If it has not transitioned to something else, and the provider is still waiting, the deal fails.