No instant solution expected. It’s a big job, but it’s good to hear agreement that infinite seems risky.
Maybe I’ll open a general issue, but I’m less confident about a completely general fix. Maybe partly.
Backends that allow cancel might be easier to deal with. How would you even get the others down?
might serve as a model for backends that respect some sort of cancel that could get them unstuck, however testing would still be needed to see if they really do. Extreme solution (maybe slow) might repartition Duplicati so that parts that are prone to get stuck can get killed without killing everything.
The point of my comment is to give that as an example of how specialized IBackend offshoots exist.
That’s why you would create a more sophisticated interface for those that are found able to do abort.
is another example. Of course, this doesn’t solve the underpinnings. It just keeps track of what’s what.
The mention of Get is a good point. How many remote operations can a backend run at once? If many, providing cancel capability one each on is a bigger interface change than if some global kill is possible.