New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: check for timeout in connection after last statement finished #1086
Conversation
The check whether the previous statement timed out in the Connection API was done when a statement was submitted to the connection, and not when the statement was executed. That could cause a race condition, as statements are executed using a separate thread, while submitting a statement is done using the main thread. This could cause a statement to return an error with code ABORTED instead of FAILED_PRECONDITION. A statement on a read/write transaction would always return an error when a/the previous statement timed out, only the error code could be different depending on whether the race condition occurred or not. This is now fixed so that the error code is always FAILED_PRECONDITION and the error indicates that a read/write transaction is no longer usable after a statement timeout. Fixes #1077
} | ||
}), | ||
() -> { | ||
checkTimedOut(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These changes seem bigger than they are. The only real difference is that the checkTimeout()
call is added as the first statement of the lambda.
Codecov Report
@@ Coverage Diff @@
## master #1086 +/- ##
============================================
- Coverage 85.15% 85.13% -0.02%
- Complexity 2716 2718 +2
============================================
Files 155 155
Lines 14351 14360 +9
Branches 1358 1357 -1
============================================
+ Hits 12220 12226 +6
- Misses 1563 1566 +3
Partials 568 568
Continue to review full report at Codecov.
|
…oogleapis#1086) The check whether the previous statement timed out in the Connection API was done when a statement was submitted to the connection, and not when the statement was executed. That could cause a race condition, as statements are executed using a separate thread, while submitting a statement is done using the main thread. This could cause a statement to return an error with code ABORTED instead of FAILED_PRECONDITION. A statement on a read/write transaction would always return an error when a/the previous statement timed out, only the error code could be different depending on whether the race condition occurred or not. This is now fixed so that the error code is always FAILED_PRECONDITION and the error indicates that a read/write transaction is no longer usable after a statement timeout. Fixes googleapis#1077
The check whether the previous statement timed out in the Connection API was
done when a statement was submitted to the connection, and not when the statement
was executed. That could cause a race condition, as statements are executed using
a separate thread, while submitting a statement is done using the main thread.
This could cause a statement to return an error with code ABORTED instead of
FAILED_PRECONDITION. A statement on a read/write transaction would always return
an error when a/the previous statement timed out, only the error code could
be different depending on whether the race condition occurred or not. This is
now fixed so that the error code is always FAILED_PRECONDITION and the error
indicates that a read/write transaction is no longer usable after a statement
timeout.
Fixes #1077 and #738