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

In-memory Engine: integrate hybrid engine with TiKV #16132

Merged
merged 2 commits into from Dec 13, 2023

Conversation

SpadeA-Tang
Copy link
Member

@SpadeA-Tang SpadeA-Tang commented Dec 4, 2023

What is changed and how it works?

Issue Number: Ref #16141

What's Changed:

Integrate hybrid engine with TiKV. User can choose to use hybrid engine by set `memory_engine_enabled` in TiKV config.

This PR refactors some parts mainly in component/server to replace RocksEngine by generic type implementing KvEngine.
So we can make HybridEngine as a specific type that implements KvEngine be used by TiKV server, RaftKv, raftstore and so on.

Related changes

  • PR to update pingcap/docs/pingcap/docs-cn:
  • 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
  • Performance regression: Consumes more Memory
  • Breaking backward compatibility

Release note

None

Copy link
Contributor

ti-chi-bot bot commented Dec 4, 2023

[REVIEW NOTIFICATION]

This pull request has been approved by:

  • Connor1996
  • tonyxuqqi

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.

@SpadeA-Tang
Copy link
Member Author

/run-test retry=7

Copy link
Member

@Connor1996 Connor1996 left a comment

Choose a reason for hiding this comment

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

Do we really need engine trait to use it? Maybe regard it as a cache, and just add a field in apply and region snapshot?

@SpadeA-Tang
Copy link
Member Author

SpadeA-Tang commented Dec 6, 2023

Do we really need engine trait to use it? Maybe regard it as a cache, and just add a field in apply and region snapshot?

Use trait can make fewer changes to raftstore. For example, we don't have extra code for caching write batch for in-memory engine, just put the detail in the implementation of WriteBatch of hybrid engine.

src/config/mod.rs Outdated Show resolved Hide resolved
@ti-chi-bot ti-chi-bot bot added the status/LGT1 Status: PR - There is already 1 approval label Dec 13, 2023
@SpadeA-Tang
Copy link
Member Author

PTAL thanks @Connor1996

Signed-off-by: SpadeA-Tang <u6748471@anu.edu.au>
@ti-chi-bot ti-chi-bot bot added the size/XXL label Dec 13, 2023
@@ -209,9 +220,33 @@ pub fn run_tikv(

dispatch_api_version!(config.storage.api_version(), {
if !config.raft_engine.enable {
run_impl::<RocksEngine, API>(config, service_event_tx, service_event_rx)
if config.region_cache_memory_limit == ReadableSize(0) {
run_impl::<RocksEngine, RocksEngine, API>(
Copy link
Member

Choose a reason for hiding this comment

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

I suggest always using HybridEngine and check the region cache limit innerly

Copy link
Member Author

Choose a reason for hiding this comment

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

After discussed offline, we think this is riskless once it is not enabled.

Copy link
Member

Choose a reason for hiding this comment

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

But using HybridEngine and when memory engine is not enabled, the code is actually a wrapper on RocksEngine without doing anything else

Copy link
Member Author

Choose a reason for hiding this comment

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

It still needs to do some logics to check whether the memory engine can be used or something.

Copy link
Member

@Connor1996 Connor1996 left a comment

Choose a reason for hiding this comment

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

LGTM

@ti-chi-bot ti-chi-bot bot added status/LGT2 Status: PR - There are already 2 approvals and removed status/LGT1 Status: PR - There is already 1 approval labels Dec 13, 2023
@Connor1996
Copy link
Member

/merge

Copy link
Contributor

ti-chi-bot bot commented Dec 13, 2023

@Connor1996: It seems you want to merge this PR, I will help you trigger all the tests:

/run-all-tests

You only need to trigger /merge once, and if the CI test fails, you just re-trigger the test that failed and the bot will merge the PR for you after the CI passes.

If you have any questions about the PR merge process, please refer to pr process.

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 ti-community-infra/tichi repository.

Copy link
Contributor

ti-chi-bot bot commented Dec 13, 2023

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

Commit hash: a1f6890

@ti-chi-bot ti-chi-bot bot added the status/can-merge Status: Can merge to base branch label Dec 13, 2023
@ti-chi-bot ti-chi-bot bot merged commit 8e8c6ab into tikv:master Dec 13, 2023
6 of 7 checks passed
@ti-chi-bot ti-chi-bot bot added this to the Pool milestone Dec 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release-note-none size/XXL status/can-merge Status: Can merge to base branch status/LGT2 Status: PR - There are already 2 approvals
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants