Skip to content

Commit 8e8c6ab

Browse files
authored
In-memory Engine: integrate hybrid engine with TiKV (tikv#16132)
ref tikv#16141 Integrate hybrid engine with TiKV. User can choose to use hybrid engine by set `memory_engine_enabled` in TiKV config. Signed-off-by: SpadeA-Tang <[email protected]>
1 parent 820b220 commit 8e8c6ab

File tree

20 files changed

+566
-71
lines changed

20 files changed

+566
-71
lines changed

Cargo.lock

Lines changed: 24 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ raftstore = { workspace = true, features = ["engine_rocks"] }
129129
raftstore-v2 = { workspace = true }
130130
rand = "0.7.3"
131131
regex = "1.3"
132+
region_cache_memory_engine = { workspace = true }
132133
resource_control = { workspace = true }
133134
resource_metering = { workspace = true }
134135
rev_lines = "0.2.1"
@@ -321,6 +322,7 @@ encryption_export = { path = "components/encryption/export" }
321322
engine_panic = { path = "components/engine_panic" }
322323
engine_rocks = { path = "components/engine_rocks" }
323324
hybrid_engine = { path = "components/hybrid_engine" }
325+
region_cache_memory_engine = { path = "components/region_cache_memory_engine" }
324326
engine_rocks_helper = { path = "components/engine_rocks_helper" }
325327
engine_test = { path = "components/engine_test", default-features = false }
326328
engine_traits = { path = "components/engine_traits" }

components/engine_panic/src/misc.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,9 @@ impl MiscExt for PanicEngine {
129129
fn get_accumulated_flush_count_cf(cf: &str) -> Result<u64> {
130130
panic!()
131131
}
132+
133+
type DiskEngine = PanicEngine;
134+
fn get_disk_engine(&self) -> &Self::DiskEngine {
135+
panic!()
136+
}
132137
}

components/engine_rocks/src/misc.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,11 @@ impl MiscExt for RocksEngine {
448448
.get();
449449
Ok(n)
450450
}
451+
452+
type DiskEngine = RocksEngine;
453+
fn get_disk_engine(&self) -> &Self::DiskEngine {
454+
self
455+
}
451456
}
452457

453458
#[cfg(test)]

components/engine_traits/src/misc.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,7 @@ pub trait MiscExt: CfNamesExt + FlowControlFactorsExt + WriteBatchExt {
178178
}
179179
Ok(n)
180180
}
181+
182+
type DiskEngine;
183+
fn get_disk_engine(&self) -> &Self::DiskEngine;
181184
}

components/hybrid_engine/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ testexport = []
1010
[dependencies]
1111
engine_traits = { workspace = true }
1212
txn_types = { workspace = true }
13-
tikv_util = { workspace = true }
13+
tikv_util = { workspace = true }
14+
engine_rocks = { workspace = true }

components/hybrid_engine/src/engine.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ where
4242
}
4343
}
4444

45+
impl<EK, EC> HybridEngine<EK, EC>
46+
where
47+
EK: KvEngine,
48+
EC: RegionCacheEngine,
49+
{
50+
pub fn new(disk_engine: EK, region_cache_engine: EC) -> Self {
51+
Self {
52+
disk_engine,
53+
region_cache_engine,
54+
}
55+
}
56+
}
57+
4558
// todo: implement KvEngine methods as well as it's super traits.
4659
impl<EK, EC> KvEngine for HybridEngine<EK, EC>
4760
where

components/hybrid_engine/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ mod sst;
2222
mod table_properties;
2323
mod ttl_properties;
2424
mod write_batch;
25+
26+
pub use engine::HybridEngine;

components/hybrid_engine/src/misc.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,9 @@ where
124124
fn get_accumulated_flush_count_cf(cf: &str) -> Result<u64> {
125125
unimplemented!()
126126
}
127+
128+
type DiskEngine = EK::DiskEngine;
129+
fn get_disk_engine(&self) -> &Self::DiskEngine {
130+
self.disk_engine().get_disk_engine()
131+
}
127132
}

components/raftstore/src/compacted_event_sender.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
// Copyright 2022 TiKV Project Authors. Licensed under Apache-2.0.
22
use std::sync::Mutex;
33

4-
use engine_rocks::{CompactedEventSender, RocksCompactedEvent, RocksEngine};
5-
use engine_traits::RaftEngine;
4+
use engine_rocks::{CompactedEventSender, RocksCompactedEvent};
5+
use engine_traits::{KvEngine, RaftEngine};
66
use tikv_util::error_unknown;
77

88
use crate::store::{fsm::store::RaftRouter, StoreMsg};
99

1010
// raftstore v1's implementation
11-
pub struct RaftRouterCompactedEventSender<ER: RaftEngine> {
12-
pub router: Mutex<RaftRouter<RocksEngine, ER>>,
11+
pub struct RaftRouterCompactedEventSender<EK, ER>
12+
where
13+
EK: KvEngine,
14+
ER: RaftEngine,
15+
{
16+
pub router: Mutex<RaftRouter<EK, ER>>,
1317
}
1418

15-
impl<ER: RaftEngine> CompactedEventSender for RaftRouterCompactedEventSender<ER> {
19+
impl<EK, ER> CompactedEventSender for RaftRouterCompactedEventSender<EK, ER>
20+
where
21+
EK: KvEngine<CompactedEvent = RocksCompactedEvent>,
22+
ER: RaftEngine,
23+
{
1624
fn send(&self, event: RocksCompactedEvent) {
1725
let router = self.router.lock().unwrap();
1826
let event = StoreMsg::CompactedEvent(event);

0 commit comments

Comments
 (0)