Checklist
What happened?
ExtractError::should_retry() in crates/rattler_package_streaming/src/lib.rs returns true for all IoError and CouldNotCreateDestination variants, regardless of the underlying error kind. This means permanent, non-recoverable failures like PermissionDenied, NotFound, InvalidInput, and disk-full errors are incorrectly treated as transient and will be retried indefinitely.
Affected variants:
ExtractError::IoError(_) => true, // retries PermissionDenied, NotFound
etc.
ExtractError::CouldNotCreateDestination(_) => true, // same problem
Expected behavior: Only genuinely transient network-related error kinds should trigger a retry:
- BrokenPipe, ConnectionReset, ConnectionAborted, ConnectionRefused
- NotConnected, TimedOut, UnexpectedEof, Interrupted
Permanent errors that must not retry:
- PermissionDenied — retrying won't fix a permissions problem
- NotFound — the file/path doesn't exist; retrying won't create it
- InvalidInput / InvalidData — malformed data; retrying returns the same data
- Others include catch-all, unknown, should not be assumed transient
Impact: Any caller that uses should_retry() to drive retry logic (e.g. in pixi's download/cache layer) will spin on permanent failures, wasting resources and hanging indefinitely instead of surfacing a clear error to the user.
@baszalmstra
Additional Context
No response
Checklist
What happened?
ExtractError::should_retry()incrates/rattler_package_streaming/src/lib.rsreturns true for all IoError and CouldNotCreateDestination variants, regardless of the underlying error kind. This means permanent, non-recoverable failures like PermissionDenied, NotFound, InvalidInput, and disk-full errors are incorrectly treated as transient and will be retried indefinitely.Affected variants:
Expected behavior: Only genuinely transient network-related error kinds should trigger a retry:
Permanent errors that must not retry:
Impact: Any caller that uses should_retry() to drive retry logic (e.g. in pixi's download/cache layer) will spin on permanent failures, wasting resources and hanging indefinitely instead of surfacing a clear error to the user.
@baszalmstra
Additional Context
No response