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

*: Merge the feature branch 3pointer/br-stream into master #12427

Closed
wants to merge 124 commits into from

Conversation

YuJuncen
Copy link
Contributor

@YuJuncen YuJuncen commented Apr 25, 2022

What is changed and how it works?

Issue Number: close #12429
Also ref pingcap/tidb#29501.

What's Changed:

Added a new component `backup-stream` for TiKV, which allows TiKV listen the change from raftstore and collect them to external storage.

Related changes

  • PR to update pingcap/docs/pingcap/docs-cn:
    (TBD)
  • Need to cherry-pick to the release branch

Check List

Tests

  • Unit test
  • Integration test
  • Manual test (add detailed scripts or steps below)
  • No code

Side effects

  • Performance regression
    • Consumes more CPU
    • Consumes more MEM

Release note

Added the support for log backup.

YuJuncen and others added 30 commits December 8, 2021 12:51
ref pingcap/tidb#30098

* stream-meta: initial commit

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: refactor metadata

Signed-off-by: Yu Juncen <yu745514916@live.com>

* br/stream: basic store abstraction

Signed-off-by: Yu Juncen <yu745514916@live.com>

* stream-meta: add etcd store

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: basic framework for testing

Signed-off-by: Yu Juncen <yu745514916@live.com>

* br/stream: some tests

Signed-off-by: Yu Juncen <yu745514916@live.com>

* br/stream: added some test cases

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: make ci happy

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: move store related stuffs into store mod

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: add some metrics

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: add txn into the store interface

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br-stream: address some comments

Signed-off-by: Yu Juncen <yu745514916@live.com>

* Apply suggestions from code review

Co-authored-by: kennytm <kennytm@gmail.com>
Signed-off-by: Yu Juncen <yu745514916@live.com>

* br-stream: make clippy happy and ref tidb#30098

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br-stream: make clippy happy again

Signed-off-by: yujuncen <yujuncen@pingcap.com>

Co-authored-by: kennytm <kennytm@gmail.com>
…1611)

close pingcap/tidb#30446

* br-stream: implement endpoint & observer basic logic

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>

* make format

Signed-off-by: 3pointer <luancheng@pingcap.com>

* fix test

Signed-off-by: 3pointer <luancheng@pingcap.com>

* fix test

Signed-off-by: 3pointer <luancheng@pingcap.com>

* try fix test

Signed-off-by: 3pointer <luancheng@pingcap.com>

* fix test

Signed-off-by: 3pointer <luancheng@pingcap.com>

* try fix

Signed-off-by: 3pointer <luancheng@pingcap.com>

* fix test

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
* br: implement router for backup stream

Signed-off-by: 3pointer <luancheng@pingcap.com>

* make clippy

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
…tream

Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
* br: implement router for backup stream

Signed-off-by: 3pointer <luancheng@pingcap.com>

* make clippy

Signed-off-by: 3pointer <luancheng@pingcap.com>

* address comment

Signed-off-by: 3pointer <luancheng@pingcap.com>

* br/stream: basic routers

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br-stream: basic local temporary file logic

Signed-off-by: Yu Juncen <yu745514916@live.com>

* br/stream: added local file buffers

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: added some comments

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: remove replace

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: fix license

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: fix the wrap_key

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: make max-temp-file-size configable

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: added assertions for test

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: remove meta data key

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: revert cargo.toml

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: revert export.rs

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: fix lint

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: update kvproto

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* Update components/br-stream/src/router.rs

Co-authored-by: kennytm <kennytm@gmail.com>
Signed-off-by: yujuncen <yujuncen@pingcap.com>

* router: address comments

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: remove 'z' prefix

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: make clippy happy

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: (maybe) fix test

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: (maybe) fix tests

Signed-off-by: yujuncen <yujuncen@pingcap.com>

* br/stream: fix unstable tests

Signed-off-by: yujuncen <yujuncen@pingcap.com>

Co-authored-by: 3pointer <luancheng@pingcap.com>
Co-authored-by: kennytm <kennytm@gmail.com>
…r-stream

Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: joccau <zak.zhao@pingcap.com>
Signed-off-by: yujuncen <yujuncen@pingcap.com>
Signed-off-by: yujuncen <yujuncen@pingcap.com>
Signed-off-by: Yu Juncen <yu745514916@live.com>
Signed-off-by: yujuncen <yujuncen@pingcap.com>
br: backup stream: Modify log print format
Signed-off-by: kennytm <kennytm@gmail.com>
Signed-off-by: yujuncen <yujuncen@pingcap.com>
br-stream: reduce the lock of tables; added some metrics
Signed-off-by: joccau <zak.zhao@pingcap.com>
br-stream: don't clone the key & value in encode_event()
Signed-off-by: joccau <zak.zhao@pingcap.com>
YuJuncen and others added 18 commits March 9, 2022 11:18
* br-stream: added store error to the store

* revert kvproto

* Update Cargo.lock
* initial try

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* refined

Signed-off-by: Yu Juncen <yu745514916@live.com>

* fix end key being empty

Signed-off-by: Yu Juncen <yu745514916@live.com>

* fix tokio panic

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* add metrics for flushing

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* concurrent flush file

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* refined some metrics and logs

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* move download out of gRPC thread

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* Revert "move download out of gRPC thread"

This reverts commit ed66b0d.
* refine br-stream to backup-stream
Signed-off-by: 3pointer <luancheng@pingcap.com>
…table (#33)

* move the files to some dirs

Signed-off-by: Yu Juncen <yu745514916@live.com>

* set failpoints when enabled

Signed-off-by: Yu Juncen <yu745514916@live.com>

* udpate the file name to {date}-{min_ts}-{uuid}

Signed-off-by: Yu Juncen <yu745514916@live.com>

* don't make test needs failpoints enabled

Signed-off-by: Yu Juncen <yu745514916@live.com>

* ignore already exists

Signed-off-by: Yu Juncen <yu745514916@live.com>

* create parent dirs for restoring

Signed-off-by: Yu Juncen <yu745514916@live.com>

* added version spec

Signed-off-by: Yu Juncen <yu745514916@live.com>

* run cargo check

Signed-off-by: Yu Juncen <yu745514916@live.com>
* support checksum in file level for br-stream

Signed-off-by: joccau <zak.zhao@pingcap.com>

* update kvproto package and maintain testcase.

Signed-off-by: joccau <zak.zhao@pingcap.com>
* eliminate the block call in ticker

* revert some change

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
* added integration test framework

Signed-off-by: Yu Juncen <yu745514916@live.com>

* added more cases

Signed-off-by: Yu Juncen <yu745514916@live.com>

* fix tests

Signed-off-by: Yu Juncen <yu745514916@live.com>

* added async commit testing

Signed-off-by: Yu Juncen <yu745514916@live.com>

* fix build

Signed-off-by: Yu Juncen <yu745514916@live.com>
* use a vector to contain flushing files

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix size leakage

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix build

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
* fix the upload part of S3 storage

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* tuned the test case

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* remove unnesseary doctests

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix typo

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
* check the min_ts and advance the resolved ts then

Signed-off-by: Yu Juncen <yu745514916@live.com>

* check min_ts when updating checkpoint ts

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix build

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* always sync with fs

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* Update components/backup-stream/src/endpoint.rs

Co-authored-by: 3pointer <qdlc2010@gmail.com>

Co-authored-by: 3pointer <qdlc2010@gmail.com>
* set uuid for header to prevent raftstore merging

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* move the uuid to `make_request`

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
…rror (#41)

* adapt error code for endpoint::Error

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix typo

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
* support pause/resume task

Signed-off-by: joccau <zak.zhao@pingcap.com>
* adapt error code for endpoint::Error

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix typo

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* added basic (unformed) error uploading

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix build, remove dead code

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* do pause

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
* backup-stream: fix some bugs in log backup

Signed-off-by: 3pointer <luancheng@pingcap.com>

* implemenet clear rpc && make clippy

Signed-off-by: 3pointer <luancheng@pingcap.com>

* fix

Signed-off-by: 3pointer <luancheng@pingcap.com>

* remove Mutex

* fix lost the key not in ts range

Signed-off-by: 3pointer <luancheng@pingcap.com>
* refactor resolver

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* run cargo fix

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* move back some test cases

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix register range too late

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* make region subscription hold all region metadata

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix build

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* reduce the frequency of reregistering

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* make more debug info

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* remove destory lock range

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* move subscription track to sperated file; fix incremental scan when resuming

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix some tests

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* added some metrics, and revert some changes

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* fix typo

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* added retry for getting snapshot

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
@ti-chi-bot
Copy link
Member

[REVIEW NOTIFICATION]

This pull request has not been approved.

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
Copy link
Member

@YuJuncen: PR needs rebase.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@ti-chi-bot ti-chi-bot added contribution Type: PR - From contributors size/XXL labels Apr 25, 2022
Signed-off-by: 3pointer <luancheng@pingcap.com>
* added a new observer type 'pitr'

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* make `ChangeObserver` a sum type

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>

* remove replica code

Signed-off-by: Yu Juncen <yujuncen@pingcap.com>
@YuJuncen
Copy link
Contributor Author

Make another branch to be used as base.

@YuJuncen YuJuncen closed this Apr 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support Capturing Data Change and Save Them to External Storages
5 participants