Byse rejects uploads with status like "not enough disk space on your account" when the account's storage is exhausted. The parser was flagging every non-OK status as err.fileRejected=true, and the upload- manager classifier additionally matched the generic "lehnte Datei ab" prefix as file-rejected. Result: rotation was skipped on a full account and every subsequent file failed on the same dead account. - hosters.js: byse parser now distinguishes account-level phrases (disk space / storage / quota / insufficient / account full) and sets err.accountError=true for those. File-specific failures (Duplicate, wrong format, size) keep err.fileRejected=true. - upload-manager.js: _isFileRejectedError no longer matches the generic "lehnte Datei ab" prefix and short-circuits when err.accountError is true. _shouldSkipRetryOnAccountError honors the flag and has added regex patterns as a safety net. - Tests: 5 new unit tests covering disk-space/account-level/duplicate and the accountError-wins-over-fileRejected precedence.
2.3 KiB
2.3 KiB
Rotation-Bug: Byse "not enough disk space" wird als file-rejected klassifiziert
Problem
Log zeigt: Byse-Account ist voll ("not enough disk space on your account"), aber das System klassifiziert den Fehler als file-rejected und rotiert deshalb NICHT zum Fallback-Account. Jede nächste Datei landet beim selben vollen Account → endlose Fails.
Root Cause
lib/hosters.js:223-227— Byse-Parser setzterr.fileRejected = truefür JEDEN status-String der nichtok/success/doneist.lib/upload-manager.js:67—_isFileRejectedErrorregex matcht generisch"lehnte Datei ab"→ gilt für ALLE Byse-Errors unabhängig vom eigentlichen Grund.- Upload-manager flow:
_isFileRejectedError→ break retry →skip-rotation-file-rejected→ return. Keinmark-failed, kein Fallback-Resolve. Account bleibt aktiv für die nächste Datei.
Fix
lib/hosters.js: Byse-Parser erkennt account-level phrases (disk space / storage / quota / insufficient / account full) → setzterr.accountError = truestattfileRejected.lib/upload-manager.js—_isFileRejectedError: generischenlehnte Datei abMatch entfernt. Explicit:accountError === true→ früher out (ist NICHT file-rejected).lib/upload-manager.js—_shouldSkipRetryOnAccountError: honorierterr.accountError === trueFlag. Patterns erweitert um disk-space/storage/quota/account-voll Phrasen (Safety-Net falls Flag mal fehlt).tests/upload-manager.test.js: 5 neue Tests für die Klassifikation (disk-space ist account-level; Duplicate bleibt file-rejected; accountError gewinnt gegen fileRejected).npm test— 76/76 grün.- Release als 3.1.4 (auf User-OK).
Expected Behavior nach Fix
Log-Pattern ab Fix:
[retries-exhausted] hoster=byse.sx ... lastError=Byse lehnte Datei ab: 0:0:0:not enough disk space...
[mark-failed] hoster=byse.sx accountId=byse.sx-1773722669098-qc45
[switchAccount] hoster=byse.sx → fallback byse.sx-XXXXX
[rotate] hoster=byse.sx → nächster Account
Bei Fast-Fail (über _shouldSkipRetryOnAccountError) entfällt der 5×3s Retry-Wait → rotation setzt sofort ein.
Review
Zwei-Schichten-Ansatz: Byse-Parser setzt explicit accountError Flag (richtige Stelle weil der Parser den status-String direkt sieht), Upload-Manager honoriert den Flag und hat parallel Regex-Safety-Net. Test deckt beide Pfade ab.