11// Copyright 2021 TiKV Project Authors. Licensed under Apache-2.0.
22
33use std:: {
4- borrow:: ToOwned , cmp:: Ordering , path:: PathBuf , pin:: Pin , str, string:: ToString , sync:: Arc ,
5- time:: Duration , u64,
4+ borrow:: ToOwned , cmp:: Ordering , pin:: Pin , str, string:: ToString , sync:: Arc , time:: Duration , u64,
65} ;
76
87use encryption_export:: data_key_manager_from_config;
@@ -28,7 +27,10 @@ use security::SecurityManager;
2827use serde_json:: json;
2928use tikv:: {
3029 config:: { ConfigController , TikvConfig } ,
31- server:: debug:: { BottommostLevelCompaction , Debugger , RegionInfo } ,
30+ server:: {
31+ debug:: { BottommostLevelCompaction , Debugger , RegionInfo } ,
32+ KvEngineFactoryBuilder ,
33+ } ,
3234} ;
3335use tikv_util:: escape;
3436
@@ -45,7 +47,6 @@ type MvccInfoStream = Pin<Box<dyn Stream<Item = Result<(Vec<u8>, MvccInfo), Stri
4547pub fn new_debug_executor (
4648 cfg : & TikvConfig ,
4749 data_dir : Option < & str > ,
48- skip_paranoid_checks : bool ,
4950 host : Option < & str > ,
5051 mgr : Arc < SecurityManager > ,
5152) -> Box < dyn DebugExecutor > {
@@ -55,47 +56,37 @@ pub fn new_debug_executor(
5556
5657 // TODO: perhaps we should allow user skip specifying data path.
5758 let data_dir = data_dir. unwrap ( ) ;
58- let kv_path = cfg. infer_kv_engine_path ( Some ( data_dir) ) . unwrap ( ) ;
5959
6060 let key_manager = data_key_manager_from_config ( & cfg. security . encryption , & cfg. storage . data_dir )
6161 . unwrap ( )
6262 . map ( Arc :: new) ;
6363
6464 let cache = cfg. storage . block_cache . build_shared_cache ( ) ;
65- let shared_block_cache = cache. is_some ( ) ;
6665 let env = cfg
6766 . build_shared_rocks_env ( key_manager. clone ( ) , None /* io_rate_limiter */ )
6867 . unwrap ( ) ;
6968
70- let mut kv_db_opts = cfg. rocksdb . build_opt ( ) ;
71- kv_db_opts. set_env ( env. clone ( ) ) ;
72- kv_db_opts. set_paranoid_checks ( !skip_paranoid_checks) ;
73- let kv_cfs_opts = cfg
74- . rocksdb
75- . build_cf_opts ( & cache, None , cfg. storage . api_version ( ) ) ;
76- let kv_path = PathBuf :: from ( kv_path) . canonicalize ( ) . unwrap ( ) ;
77- let kv_path = kv_path. to_str ( ) . unwrap ( ) ;
78- let mut kv_db = match new_engine_opt ( kv_path, kv_db_opts, kv_cfs_opts) {
69+ let factory = KvEngineFactoryBuilder :: new ( env. clone ( ) , cfg, cache)
70+ . lite ( true )
71+ . build ( ) ;
72+ let kv_db = match factory. create_shared_db ( data_dir) {
7973 Ok ( db) => db,
8074 Err ( e) => handle_engine_error ( e) ,
8175 } ;
82- kv_db. set_shared_block_cache ( shared_block_cache) ;
8376
8477 let cfg_controller = ConfigController :: default ( ) ;
8578 if !cfg. raft_engine . enable {
86- let mut raft_db_opts = cfg. raftdb . build_opt ( ) ;
87- raft_db_opts. set_env ( env) ;
88- let raft_db_cf_opts = cfg. raftdb . build_cf_opts ( & cache) ;
79+ let raft_db_opts = cfg. raftdb . build_opt ( env, None ) ;
80+ let raft_db_cf_opts = cfg. raftdb . build_cf_opts ( factory. block_cache ( ) ) ;
8981 let raft_path = cfg. infer_raft_db_path ( Some ( data_dir) ) . unwrap ( ) ;
9082 if !db_exist ( & raft_path) {
9183 error ! ( "raft db not exists: {}" , raft_path) ;
9284 tikv_util:: logger:: exit_process_gracefully ( -1 ) ;
9385 }
94- let mut raft_db = match new_engine_opt ( & raft_path, raft_db_opts, raft_db_cf_opts) {
86+ let raft_db = match new_engine_opt ( & raft_path, raft_db_opts, raft_db_cf_opts) {
9587 Ok ( db) => db,
9688 Err ( e) => handle_engine_error ( e) ,
9789 } ;
98- raft_db. set_shared_block_cache ( shared_block_cache) ;
9990 let debugger = Debugger :: new ( Engines :: new ( kv_db, raft_db) , cfg_controller) ;
10091 Box :: new ( debugger) as Box < dyn DebugExecutor >
10192 } else {
@@ -383,7 +374,7 @@ pub trait DebugExecutor {
383374 to_config : & TikvConfig ,
384375 mgr : Arc < SecurityManager > ,
385376 ) {
386- let rhs_debug_executor = new_debug_executor ( to_config, to_data_dir, false , to_host, mgr) ;
377+ let rhs_debug_executor = new_debug_executor ( to_config, to_data_dir, to_host, mgr) ;
387378
388379 let r1 = self . get_region_info ( region) ;
389380 let r2 = rhs_debug_executor. get_region_info ( region) ;
0 commit comments