Draft: Retry logic for object storage
not tested. probably won't even compile currently.
lower layer sometimes could yield temporary errors. like 503 from S3, or a unexpected network error.
this layer's work is; distinguish temporary errors from permanent ones (like NotFound).
- Temporary Error => delay a bit and retry again, within limits. Yield the final error if all attempts fail.
- Permanent Error => yield as is
- Ok => yield as is