Only emit permanent errors and otherwise keep retrying#52
Uh oh!
There was an error while loading. Please reload this page.
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.
Only report errors if nothing could be sent.
Any hard (permanent) error will fail to send any data at all.
Sending excessive amounts of data will only flush some data and then
report a temporary error (EAGAIN) which we do not raise here in order
to keep the stream open for further tries to write.
Should this turn out to be a permanent error later, it will eventually
send nothing and we can detect this.
This fixes a (very sublte) regression introduced via #25.
This also adds a bunch of unit tests so we hopefully no longer rely on any external test cases. The Buffer now has 100% code coverage in our tests.
I've intentionally kept this changeset to a minimum in order to ease review. I'll file a second PR to streamline the error handling system after this PR is in.
Also note that this changeset has an implicit dependency on #51, empty writes would otherwise raise an error event (see that PR for more details).