-
Notifications
You must be signed in to change notification settings - Fork 3.8k
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
kv: assert txn unused in SetFixedTimestamp #68426
kv: assert txn unused in SetFixedTimestamp #68426
Conversation
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.
modulo a clarification on an edge case
Reviewed 31 of 31 files at r1.
Reviewable status: complete! 1 of 0 LGTMs obtained (waiting on @AlexTalks, @jordanlewis, @nvanbenschoten, and @shermanCRL)
pkg/sql/txn_state.go, line 272 at r1 (raw file):
ts.mu.Lock() defer ts.mu.Unlock() ts.isHistorical = true
do you want to set isHistorical even if there's an error returned?
This commit asserts that a transaction has not been used to read or to write by the time that `SetFixedTimestamp` is called on it. This was extracted from cockroachdb#68194 and modified to return an error from `SetFixedTimestamp` on misuse instead of fatal-ing. This provides a sufficient, temporary backstop for cockroachdb#68216 until the conn executor logic is fixed: ``` [email protected]:26257/movr> create table t (x int); CREATE TABLE [email protected]:26257/movr> insert into t values (1); INSERT 1 [email protected]:26257/movr> select crdb_internal_mvcc_timestamp, * from t; crdb_internal_mvcc_timestamp | x ---------------------------------+---- 1628094563935439000.0000000000 | 1 (1 row) [email protected]:26257/movr> begin as of system time (1628094563935439000.0000000000-1)::string; BEGIN [email protected]:26257/movr OPEN> select * from t; x ----- (0 rows) [email protected]:26257/movr OPEN> prepare y as select * from t as of system time 1628094563935439000.0000000000; ERROR: internal error: cannot set fixed timestamp, txn "sql txn" meta={id=e5e81c19 pri=0.01517572 epo=0 ts=1628094563.935438999,0 min=1628094563.935438999,0 seq=0} lock=false stat=PENDING rts=1628094563.935438999,0 wto=false gul=1628094563.935438999,0 already performed reads SQLSTATE: XX000 DETAIL: stack trace: github.com/cockroachdb/cockroach/pkg/kv/kvclient/kvcoord/txn_coord_sender.go:1016: SetFixedTimestamp() github.com/cockroachdb/cockroach/pkg/kv/txn.go:1200: SetFixedTimestamp() github.com/cockroachdb/cockroach/pkg/sql/conn_executor_prepare.go:278: populatePrepared() github.com/cockroachdb/cockroach/pkg/sql/conn_executor_prepare.go:220: func1() github.com/cockroachdb/cockroach/pkg/sql/conn_executor_prepare.go:226: prepare() github.com/cockroachdb/cockroach/pkg/sql/conn_executor_prepare.go:112: addPreparedStmt() github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:570: execStmtInOpenState() github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:126: execStmt() github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1626: func1() github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1628: execCmd() github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1550: run() github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:627: ServeConn() github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:645: func1() runtime/asm_amd64.s:1371: goexit() HINT: You have encountered an unexpected error. Please check the public issue tracker to check whether this problem is already tracked. If you cannot find it there, please report the error with details by creating a new issue. If you would rather not post publicly, please contact us directly using the support form. We appreciate your feedback. [email protected]:26257/? ERROR> ```
75cbc29
to
b761eba
Compare
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.
Reviewable status: complete! 0 of 0 LGTMs obtained (and 1 stale) (waiting on @AlexTalks, @jordanlewis, and @knz)
pkg/sql/txn_state.go, line 272 at r1 (raw file):
Previously, knz (kena) wrote…
do you want to set isHistorical even if there's an error returned?
Good point, done.
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.
cc @ajwerner
Reviewable status: complete! 1 of 0 LGTMs obtained (and 1 stale) (waiting on @AlexTalks and @knz)
TFTRs! bors r+ |
Build succeeded: |
This commit asserts that a transaction has not been used to read or to
write by the time that
SetFixedTimestamp
is called on it.This was extracted from #68194 and modified to return an error from
SetFixedTimestamp
on misuse instead of fatal-ing. This provides asufficient, temporary backstop for #68216 until the conn executor logic
is fixed: