Recover client from server restarts when handling batons?
Currently, I think that when a client holds a server-issued baton and attempts to send it back after a server restart, the request fails with a BatonInvalid error. This error breaks the client's workflow and requires manual intervention.
If this turns out to be the case, let's fix that so thatif a BatonInvalid error occurs and no transaction is in progress, the client should:
- Automatically restart the stream
- Obtain a new baton from the server
- Continue normal operation
I was testing the Rust SDK and this only happens if restart happens in the middle of an interactive transaction. We send the following error:
thread 'main' panicked at libsql/examples/example.rs:31:23:
called `Result::unwrap()` on an `Err` value: Hrana(Api("Received an invalid baton"))
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Which we should improve to tell that the transaction was aborted.
I suspected that this would trigger with cursors, but in testing it looks like we recover from restarts fine. Or perhaps I was not trying hard enough to figure out a case where this can happen.