Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
978e5029f3 | ||
|
|
011e4c303c |
@@ -393,6 +393,8 @@ function handleWorkerMessage(event) {
|
||||
latestRelay: message.latestRelay,
|
||||
latestError: message.latestError,
|
||||
relayUrls: message.relayUrls || [],
|
||||
batchCurrent: message.batchCurrent,
|
||||
batchTotal: message.batchTotal,
|
||||
}
|
||||
}));
|
||||
} else if (message.type === 'startupStatus') {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"VERSION": "v0.7.78",
|
||||
"VERSION_NUMBER": "0.7.78",
|
||||
"BUILD_DATE": "2026-06-30T14:33:14.964Z"
|
||||
"VERSION": "v0.7.80",
|
||||
"VERSION_NUMBER": "0.7.80",
|
||||
"BUILD_DATE": "2026-06-30T14:42:12.863Z"
|
||||
}
|
||||
|
||||
@@ -6322,7 +6322,21 @@ async function handlePublish(requestId, event, port) {
|
||||
for (let i = 0; i < broadcastOnlyUrls.length; i += BATCH_SIZE) {
|
||||
batches.push(broadcastOnlyUrls.slice(i, i + BATCH_SIZE));
|
||||
}
|
||||
console.log(`[Worker] Phase 2: Broadcasting to ${broadcastOnlyUrls.length} relays in ${batches.length} batches of ${BATCH_SIZE}`);
|
||||
const totalBatches = batches.length;
|
||||
console.log(`[Worker] Phase 2: Broadcasting to ${broadcastOnlyUrls.length} relays in ${totalBatches} batches of ${BATCH_SIZE}`);
|
||||
|
||||
// Emit a progress event showing batch info before starting batches.
|
||||
broadcast({
|
||||
type: 'broadcastProgress',
|
||||
sessionId: publishSessionId,
|
||||
phase: 'progress',
|
||||
total: totalTarget,
|
||||
successful: publishedSoFar.size,
|
||||
failed: failedSoFar.size + timedOutSoFar.size,
|
||||
latestRelay: null,
|
||||
batchCurrent: 0,
|
||||
batchTotal: totalBatches,
|
||||
});
|
||||
|
||||
for (let bi = 0; bi < batches.length; bi++) {
|
||||
const batch = batches[bi];
|
||||
@@ -6341,7 +6355,19 @@ async function handlePublish(requestId, event, port) {
|
||||
} catch (batchErr) {
|
||||
// Expected — some relays in this batch may fail.
|
||||
}
|
||||
console.log(`[Worker] Batch ${bi + 1}/${batches.length} complete — ` +
|
||||
// Emit a progress event with batch info after each batch.
|
||||
broadcast({
|
||||
type: 'broadcastProgress',
|
||||
sessionId: publishSessionId,
|
||||
phase: 'progress',
|
||||
total: totalTarget,
|
||||
successful: publishedSoFar.size,
|
||||
failed: failedSoFar.size + timedOutSoFar.size,
|
||||
latestRelay: null,
|
||||
batchCurrent: bi + 1,
|
||||
batchTotal: totalBatches,
|
||||
});
|
||||
console.log(`[Worker] Batch ${bi + 1}/${totalBatches} complete — ` +
|
||||
`${publishedSoFar.size}/${totalTarget} total succeeded, ` +
|
||||
`${failedSoFar.size + timedOutSoFar.size} failed/timeout so far`);
|
||||
}
|
||||
@@ -6367,18 +6393,25 @@ async function handlePublish(requestId, event, port) {
|
||||
} catch (_cleanupErr) { /* ignore */ }
|
||||
|
||||
// --- Failure marking (background, after all batches) ---
|
||||
const newSkips = Array.from(failedSoFar)
|
||||
// Skip-mark both explicit rejections AND timeouts. A relay that
|
||||
// times out is either down, too slow, or unreachable — skip it
|
||||
// next time to avoid wasting time on it.
|
||||
const allFailed = [...Array.from(failedSoFar), ...Array.from(timedOutSoFar)];
|
||||
const newSkips = allFailed
|
||||
.filter(url => broadcastRelayUrls.has(url) && !skippedRelayUrls.has(url));
|
||||
if (newSkips.length > 0) {
|
||||
for (const url of newSkips) {
|
||||
const isTimeout = timedOutSoFar.has(url);
|
||||
skippedRelayUrls.set(url, {
|
||||
reason: 'publish-rejected',
|
||||
reason: isTimeout ? 'publish-timeout' : 'publish-rejected',
|
||||
timestamp: Math.floor(Date.now() / 1000),
|
||||
});
|
||||
}
|
||||
scheduleSkipMarkSave();
|
||||
console.log(`[Worker] Skip-marked ${newSkips.length} rejected broadcast relays ` +
|
||||
`(${timedOutSoFar.size} timeouts excluded)`);
|
||||
const timeoutCount = newSkips.filter(u => timedOutSoFar.has(u)).length;
|
||||
const rejectCount = newSkips.length - timeoutCount;
|
||||
console.log(`[Worker] Skip-marked ${newSkips.length} failed broadcast relays ` +
|
||||
`(${rejectCount} rejected, ${timeoutCount} timed out)`);
|
||||
}
|
||||
|
||||
// Return early — we already sent the response above. The rest of
|
||||
@@ -6454,27 +6487,25 @@ async function handlePublish(requestId, event, port) {
|
||||
console.log('[Worker] ❌ Failed relays:', relayResults.failed.length);
|
||||
|
||||
// --- Failure marking for broadcast relays ---------------------------------
|
||||
// Persist skip-marks ONLY for broadcast relays that EXPLICITLY rejected
|
||||
// the publish (auth-required, blocked, invalid, etc.). We do NOT skip-mark
|
||||
// relays that timed out — with hundreds of relays, a timeout often means
|
||||
// the relay was slow to connect, not that it's broken. The relay:publish:failed
|
||||
// listener above separates timeouts (timedOutSoFar) from explicit rejections
|
||||
// (failedSoFar) by checking the error message for "timeout".
|
||||
// Skip-mark both explicit rejections AND timeouts. A relay that times
|
||||
// out is either down, too slow, or unreachable — skip it next time.
|
||||
if (isBroadcast) {
|
||||
const newSkips = Array.from(failedSoFar)
|
||||
const allFailed = [...Array.from(failedSoFar), ...Array.from(timedOutSoFar)];
|
||||
const newSkips = allFailed
|
||||
.filter(url => broadcastRelayUrls.has(url) && !skippedRelayUrls.has(url));
|
||||
if (newSkips.length > 0) {
|
||||
for (const url of newSkips) {
|
||||
const isTimeout = timedOutSoFar.has(url);
|
||||
skippedRelayUrls.set(url, {
|
||||
reason: 'publish-rejected',
|
||||
reason: isTimeout ? 'publish-timeout' : 'publish-rejected',
|
||||
timestamp: Math.floor(Date.now() / 1000),
|
||||
});
|
||||
}
|
||||
scheduleSkipMarkSave();
|
||||
console.log(`[Worker] Skip-marked ${newSkips.length} rejected broadcast relays ` +
|
||||
`(${timedOutSoFar.size} timeouts excluded from skip-marking)`);
|
||||
} else if (timedOutSoFar.size > 0) {
|
||||
console.log(`[Worker] ${timedOutSoFar.size} broadcast relays timed out (not skip-marked — will retry next publish)`);
|
||||
const timeoutCount2 = newSkips.filter(u => timedOutSoFar.has(u)).length;
|
||||
const rejectCount2 = newSkips.length - timeoutCount2;
|
||||
console.log(`[Worker] Skip-marked ${newSkips.length} failed broadcast relays ` +
|
||||
`(${rejectCount2} rejected, ${timeoutCount2} timed out)`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -831,7 +831,11 @@ import { initPostCards } from './js/post-interactions2.mjs';
|
||||
const shortRelay = d.latestRelay
|
||||
? d.latestRelay.replace(/^wss?:\/\//, '').replace(/\/.*$/, '').slice(0, 30)
|
||||
: '';
|
||||
spanBroadcastStatus.textContent = `📡 ${d.successful}/${d.total} relays · ${shortRelay}`;
|
||||
const batchInfo = (d.batchTotal && d.batchTotal > 0)
|
||||
? ` · ${d.batchCurrent}/${d.batchTotal} batches`
|
||||
: '';
|
||||
const relayInfo = shortRelay ? ` · ${shortRelay}` : '';
|
||||
spanBroadcastStatus.textContent = `📡 ${d.successful}/${d.total} relays${batchInfo}${relayInfo}`;
|
||||
} else if (d.phase === 'done') {
|
||||
// Keep the result displayed until the next publish overwrites it.
|
||||
spanBroadcastStatus.textContent = `✅ ${d.successful}/${d.total} relays` + (d.failed > 0 ? ` (${d.failed} failed)` : '');
|
||||
|
||||
Reference in New Issue
Block a user