fix(#726): handle broadcast Lagged + clear on SSE reconnect
Distinguish RecvError::Lagged from Closed in the build-log stream loop: Lagged continues (next recv delivers the full accumulated delta via saved cursors), Closed returns (shutdown path). Clear pre.textContent and reset cursor lengths in es.onerror when readyState is CONNECTING so auto-reconnect doesn't double-append the replay from cursor=0.
This commit is contained in:
parent
050e130eba
commit
12985ade6d
2 changed files with 9 additions and 2 deletions
|
|
@ -1216,7 +1216,13 @@ window.marked = marked;
|
|||
}
|
||||
};
|
||||
es.onerror = () => {
|
||||
if (es.readyState === EventSource.CLOSED) {
|
||||
if (es.readyState === EventSource.CONNECTING) {
|
||||
// Auto-reconnect: clear accumulated content so the
|
||||
// fresh stream from cursor=0 doesn't double-append.
|
||||
pre.textContent = '';
|
||||
stdoutLen = 0;
|
||||
stderrLen = 0;
|
||||
} else if (es.readyState === EventSource.CLOSED) {
|
||||
detail._es = null;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1789,7 +1789,8 @@ async fn get_build_log_stream(
|
|||
Err(_) => return,
|
||||
}
|
||||
}
|
||||
Err(_) => return, // notification channel closed (shutdown)
|
||||
Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => continue,
|
||||
Err(tokio::sync::broadcast::error::RecvError::Closed) => return,
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue