libsql: fix deferred txn with embedded replicas #559
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes an issue where embedded replica based connections would have issues dispatching executes on deferred statements. This is due to sqld using
sqlite3_txn_state
to return the connection's state. While this works for other transactions, in a deferred transaction the connection does not change its state to be in a transaction. This is due to the nature of a deferred transaction. The problem is that the connection does setis_autocommit
tofalse
. This means that sqld is returning that it is not in a txn state which is used by clients to set itsis_autocommit
state. For now the work around is to track when the client is in aDEFERRED
transaction and to handle remote state transition's in such a way that it ignores the value from the server if it is currently in the deferred state.