fix: retry 3x per chunk, 300ms delay
Deploy loadtest / validate (push) Waiting to run

This commit is contained in:
2026-07-10 23:18:23 +04:00
parent c448299c9d
commit 99e7113459
+20 -12
View File
@@ -214,28 +214,36 @@ async function uploadAll() {
fileSummary.textContent = summary;
}
/** uploadChunk(blob) — отправить чанк как raw тело */
/** uploadChunk(blob) — отправить чанк с ретраем до 3 раз */
function uploadChunk(blob) {
var MAX = 3;
var attempt = 0;
return new Promise(function (resolve, reject) {
function trySend() {
attempt++;
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.timeout = 10000;
xhr.timeout = 5000;
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.onload = function () {
try {
var r = JSON.parse(xhr.responseText);
if (r.ok) {
resolve({ bytes: r.bytes, elapsed_ms: r.elapsed_ms });
} else {
reject(new Error(r.error || 'Ошибка сервера'));
}
} catch (e) {
reject(new Error('Bad JSON'));
}
if (r.ok) { resolve({ bytes: r.bytes, elapsed_ms: r.elapsed_ms }); }
else { reject(new Error(r.error || 'Ошибка сервера')); }
} catch (e) { reject(new Error('Bad JSON')); }
};
xhr.onerror = function () {
if (attempt < MAX) { setTimeout(trySend, 300); }
else { reject(new Error('Сеть')); }
};
xhr.ontimeout = function () {
if (attempt < MAX) { setTimeout(trySend, 300); }
else { reject(new Error('Таймаут')); }
};
xhr.onerror = function () { reject(new Error('Сеть')); };
xhr.ontimeout = function () { reject(new Error('Таймаут')); };
xhr.send(blob);
}
trySend();
});
}