Skip to content
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

txn: refactor ts acquisition within build and execute phases #35376

Merged
merged 49 commits into from
Jun 27, 2022

Conversation

SpadeA-Tang
Copy link
Contributor

@SpadeA-Tang SpadeA-Tang commented Jun 14, 2022

What problem does this PR solve?

Issue Number: close #35377

Problem Summary:

Although we have transaction context provider now, we still update and get forUpdateTS from TransactionContext. For example, updateForUpdateTSIfNeeded will update forUpdateTS in TransactionContext in some cases, and we will get forUpdateTS from TransactionContext sometimes but not from transaction context provider.

It also fixes the bug in the AdviseOptimizeWithPlan within Pessimistic RR where old implementation can omit some cases.

What is changed and how it works?

In build and execute phases, we use context provider to get for update ts if needed. updateForUpdateTSIfNeeded is removed and the update of forUpdateTS in TransactionContext is only performed by the relevant provider.

Check List

Tests

  • Unit test

Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
@ti-chi-bot
Copy link
Member

ti-chi-bot commented Jun 14, 2022

[REVIEW NOTIFICATION]

This pull request has been approved by:

  • ekexium
  • lcwangchao

To complete the pull request process, please ask the reviewers in the list to review by filling /cc @reviewer in the comment.
After your PR has acquired the required number of LGTMs, you can assign this pull request to the committer in the list by filling /assign @committer in the comment to help you merge this pull request.

The full list of commands accepted by this bot can be found here.

Reviewer can indicate their review by submitting an approval review.
Reviewer can cancel approval by submitting a request changes review.

@ti-chi-bot ti-chi-bot added do-not-merge/needs-linked-issue release-note-none Denotes a PR that doesn't merit a release note. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. labels Jun 14, 2022
@SpadeA-Tang SpadeA-Tang changed the title txn: refactor ts acquisition within build and execute phase txn: refactor ts acquisition within build and execute phases Jun 14, 2022
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
@sre-bot
Copy link
Contributor

sre-bot commented Jun 15, 2022

@SpadeA-Tang SpadeA-Tang requested a review from lcwangchao June 15, 2022 05:48
executor/point_get.go Outdated Show resolved Hide resolved
executor/point_get.go Outdated Show resolved Hide resolved
executor/adapter.go Outdated Show resolved Hide resolved
executor/builder.go Outdated Show resolved Hide resolved
executor/builder.go Outdated Show resolved Hide resolved
executor/point_get.go Show resolved Hide resolved
sessiontxn/failpoint.go Outdated Show resolved Hide resolved
sessiontxn/isolation/readcommitted.go Outdated Show resolved Hide resolved
sessiontxn/isolation/repeatable_read.go Outdated Show resolved Hide resolved
sessiontxn/isolation/readcommitted_test.go Outdated Show resolved Hide resolved
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
Signed-off-by: SpadeA-Tang <[email protected]>
@ti-chi-bot ti-chi-bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 18, 2022
Signed-off-by: SpadeA-Tang <[email protected]>
@ti-chi-bot ti-chi-bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 18, 2022
Signed-off-by: SpadeA-Tang <[email protected]>
@SpadeA-Tang
Copy link
Contributor Author

/run-unit-test

Signed-off-by: SpadeA-Tang <[email protected]>
// Note: For point get and batch point get (name it plan), if one of the ancestor node is update/delete/physicalLock,
// we should check whether the plan.Lock is true or false. See comments in needNotToBeOptimized.
// inLockOrWriteStmt = true means one of the ancestor node is update/delete/physicalLock.
func optimizeForNotFetchingLatestTS(plan plannercore.Plan, inLockOrWriteStmt bool) bool {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe change "optimizeForNotFetchingLatestTS" to "notNeedGetLatesTSFromPD", it looks better to understand, and I don't recommend using negated words as function names.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okey,I will change it.

case *plannercore.BatchPointGetPlan:
return !inLockOrWriteStmt || v.Lock
case plannercore.PhysicalPlan:
if v.Children() == nil {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can remove this if v.Children() == nil block, for range can process nil

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It returns false if v.Chilren() == nil.

Signed-off-by: SpadeA-Tang <[email protected]>
@ti-chi-bot ti-chi-bot added status/LGT2 Indicates that a PR has LGTM 2. and removed status/LGT1 Indicates that a PR has LGTM 1. labels Jun 24, 2022
@SpadeA-Tang
Copy link
Contributor Author

/run-build

Signed-off-by: SpadeA-Tang <[email protected]>
@lcwangchao
Copy link
Collaborator

/merge

@ti-chi-bot
Copy link
Member

This pull request has been accepted and is ready to merge.

Commit hash: 0d3e267

@ti-chi-bot ti-chi-bot added the status/can-merge Indicates a PR has been approved by a committer. label Jun 24, 2022
@ti-chi-bot ti-chi-bot removed the status/can-merge Indicates a PR has been approved by a committer. label Jun 27, 2022
@lcwangchao
Copy link
Collaborator

/merge

@ti-chi-bot
Copy link
Member

This pull request has been accepted and is ready to merge.

Commit hash: 1092f63

@ti-chi-bot ti-chi-bot added the status/can-merge Indicates a PR has been approved by a committer. label Jun 27, 2022
@ti-chi-bot ti-chi-bot merged commit 0998cba into pingcap:master Jun 27, 2022
@sre-bot
Copy link
Contributor

sre-bot commented Jun 27, 2022

TiDB MergeCI notify

CI Name Result Duration Compare with Parent commit
idc-jenkins-ci/integration-cdc-test 🟢 all 35 tests passed 25 min Existing passed
idc-jenkins-ci-tidb/integration-common-test 🟢 all 11 tests passed 18 min Existing passed
idc-jenkins-ci-tidb/common-test 🟢 all 12 tests passed 9 min 4 sec Existing passed
idc-jenkins-ci-tidb/integration-ddl-test 🟢 all 6 tests passed 7 min 9 sec Existing passed
idc-jenkins-ci-tidb/tics-test 🟢 all 1 tests passed 6 min 52 sec Existing passed
idc-jenkins-ci-tidb/sqllogic-test-2 🟢 all 28 tests passed 5 min 43 sec Existing passed
idc-jenkins-ci-tidb/sqllogic-test-1 🟢 all 26 tests passed 5 min 35 sec Existing passed
idc-jenkins-ci-tidb/mybatis-test 🟢 all 1 tests passed 3 min 10 sec Existing passed
idc-jenkins-ci-tidb/integration-compatibility-test 🟢 all 1 tests passed 2 min 57 sec Existing passed
idc-jenkins-ci-tidb/plugin-test 🟢 build success, plugin test success 4min Existing passed

morgo added a commit to morgo/tidb that referenced this pull request Jun 28, 2022
* upstream/master: (57 commits)
  types: fix incompatible implementation of jsonpath extraction (pingcap#35320)
  planner: fix TRACE PLAN TARGET = 'estimation' panic when meeting partition table (pingcap#35743)
  *: Add `testfork.RunTest` to run multiple tests in one function (pingcap#35746)
  sessionctx/variable: add tests to ensure skipInit can be removed (pingcap#35703)
  helper: request another PD if one of them is unavailable (pingcap#35750)
  metrics: add cached table related metrics to grafana panel (pingcap#34718)
  expression: use cloned RetType at `evaluateExprWithNull` when it may be changed. (pingcap#35759)
  executor: fix left join on partition table generate invalid lock key (pingcap#35732)
  readme: remove adopters (pingcap/docs#8725) (pingcap#35124)
  *: only add default value for final aggregation to fix the aggregate push down (partition) union case (pingcap#35443)
  planner: fix the wrong cost formula of MPPExchanger on cost model ver2 (pingcap#35718)
  sessionctx: support encoding and decoding statement context (pingcap#35688)
  txn: refactor ts acquisition within build and execute phases (pingcap#35376)
  ddl: for schema-level DDL method parameter is now XXXStmt (pingcap#35722)
  *: enable gofmt (pingcap#35721)
  planner: disable collate clause support for enum or set column (pingcap#35684)
  *: Provide a util to "pause" session in uint test (pingcap#35529)
  ddl: implement the core for multi-schema change (pingcap#35429)
  parser: XXXDatabaseStmt now use CIStr for DB name (pingcap#35668)
  *: remove real tikv test on github actions (pingcap#35710)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release-note-none Denotes a PR that doesn't merit a release note. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. status/can-merge Indicates a PR has been approved by a committer. status/LGT2 Indicates that a PR has LGTM 2.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Inconsistency when fetching forUpdateTs in build/execute phases.
6 participants