clockworklabs / clockworklabs/SpacetimeDB
Distinguish V1 WebSocket execution errors
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 25.2k
- Forks
- 1.1k
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 46
Description
Follow-up from https://github.com/clockworklabs/SpacetimeDB/pull/5640. We should audit the errors entering MessageExecutionError to preserve classification to distinguish between module/guest errors from lifecycle or internal database failures.
Details
In [crates/client-api/src/routes/subscribe.rs] around line 852, we have the following block:
...
while let Some((data, timer)) = recv_handler.next().await {
let result = message_handler(data, timer).await;
if let Err(e) = result {
if ws_version == WsVersion::V1
&& let MessageHandleError::Execution(err) = e
{
// TODO: Review log level after guest/client execution errors can be distinguished from internal failures.
log::warn!("{err:#}");
// If the send task has exited, also exit this recv task.
if unordered_tx.send(err.into()).is_err() {
break;
}
continue;
}
...
Currently using warn! as a conservative default. It appears that this shared error path will combine invalid reducers/reducer arguments, invalid one-off queries with internal worker or database failures. If we can maintain a classification we can more appropriately change the logging behaviour.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in crates/client-api/src/routes/subscribe.rs around line 852, then trace MessageExecutionError and MessageHandleError::Execution through the WebSocket message path. Audit where module or guest errors are combined with lifecycle, worker, or database failures; done means those categories remain distinguishable so the logging behavior can be adjusted appropriately.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- api, backend, databases
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100