We need to think about temporary vs. permanent failures in source mirroring
Background
The Source Mirroring implementation currently treats any kind of BstError raised in Source.fetch(), Source.track() or SourceFetcher.fetch()` as non-critical, and only if all fetch/track calls fail does it raise the last exception.
This is going to have unexpected behaviour when the final call was a temporary error, but the previous ones were not.
Task description
- Check whether the below plan makes sense.
- When the error is temporary, try the next call.
- When the error is not temporary, raise it.
Acceptance Criteria
- When a non-temporary error is raised by
Source.fetch(),Source.track()orSourceFetcher.fetch(), buildstream aborts. - When a temporary error is raised by the above methods, but not every call, buildstream proceeds as normal.
- When a temporary error is raised every time the above methods are called, buildstream aborts.