Description
When a chain update package fails and falls back to a full replacement package, the AbstractStrategy.ExecuteAsync loop continues processing remaining chain packages whose versions are ≤ the fallback version. Each one independently re-triggers the same full-package fallback, resulting in redundant decompression and pipeline execution.
For example, with versions [1.1.0 (chain), 2.0.0 (chain), 3.0.0 (chain)] and a full package F_v3.0.0:
- v1.1.0 chain fails → fallback to F_v3.0.0 → already at v3.0.0
- v2.0.0 chain fails → fallback to F_v3.0.0 again → redundant
- v3.0.0 chain fails → fallback to F_v3.0.0 again → redundant
Expected Behavior
After a full-package fallback, subsequent chain packages with version ≤ the fallback version should be skipped.
Fix
PR #526 introduces:
FallbackFullVersion property in VersionEntry and DownloadAsset
- Populate it in
DownloadPlanBuilder from the matching full package
- Track
fallbackEffectiveVersion in AbstractStrategy.ExecuteAsync
- Skip chain packages where
version ≤ fallbackEffectiveVersion
This ensures that once a full package brings the application to version X, all chain packages ≤ X are skipped.
Description
When a chain update package fails and falls back to a full replacement package, the
AbstractStrategy.ExecuteAsyncloop continues processing remaining chain packages whose versions are ≤ the fallback version. Each one independently re-triggers the same full-package fallback, resulting in redundant decompression and pipeline execution.For example, with versions [1.1.0 (chain), 2.0.0 (chain), 3.0.0 (chain)] and a full package F_v3.0.0:
Expected Behavior
After a full-package fallback, subsequent chain packages with version ≤ the fallback version should be skipped.
Fix
PR #526 introduces:
FallbackFullVersionproperty inVersionEntryandDownloadAssetDownloadPlanBuilderfrom the matching full packagefallbackEffectiveVersioninAbstractStrategy.ExecuteAsyncversion ≤ fallbackEffectiveVersionThis ensures that once a full package brings the application to version X, all chain packages ≤ X are skipped.