@@ -17,7 +17,7 @@ mod catalog;
17
17
use std:: collections:: HashMap ;
18
18
use std:: fmt:: Debug ;
19
19
use std:: ops:: Deref ;
20
- use std:: sync:: { Arc , OnceLock , RwLock } ;
20
+ use std:: sync:: { Arc , RwLock } ;
21
21
use std:: time:: Duration ;
22
22
23
23
use api:: region:: RegionResponse ;
@@ -684,7 +684,7 @@ struct RegionServerInner {
684
684
// HACK(zhongzc): Direct MitoEngine handle for diagnostics. This couples the
685
685
// server with a concrete engine; acceptable for now to fetch Mito-specific
686
686
// info (e.g., list SSTs). Consider a diagnostics trait later.
687
- mito_engine : OnceLock < MitoEngine > ,
687
+ mito_engine : RwLock < Option < MitoEngine > > ,
688
688
}
689
689
690
690
struct RegionServerParallelism {
@@ -751,7 +751,7 @@ impl RegionServerInner {
751
751
table_provider_factory,
752
752
parallelism,
753
753
topic_stats_reporter : RwLock :: new ( None ) ,
754
- mito_engine : OnceLock :: new ( ) ,
754
+ mito_engine : RwLock :: new ( None ) ,
755
755
}
756
756
}
757
757
@@ -760,7 +760,7 @@ impl RegionServerInner {
760
760
if engine_name == MITO_ENGINE_NAME
761
761
&& let Some ( mito_engine) = engine. as_any ( ) . downcast_ref :: < MitoEngine > ( )
762
762
{
763
- let _ = self . mito_engine . set ( mito_engine. clone ( ) ) ;
763
+ * self . mito_engine . write ( ) . unwrap ( ) = Some ( mito_engine. clone ( ) ) ;
764
764
}
765
765
766
766
info ! ( "Region Engine {engine_name} is registered" ) ;
@@ -1281,6 +1281,7 @@ impl RegionServerInner {
1281
1281
self . region_map . clear ( ) ;
1282
1282
info ! ( "closed {num_regions} regions" ) ;
1283
1283
1284
+ drop ( self . mito_engine . write ( ) . unwrap ( ) . take ( ) ) ;
1284
1285
let engines = self . engines . write ( ) . unwrap ( ) . drain ( ) . collect :: < Vec < _ > > ( ) ;
1285
1286
for ( engine_name, engine) in engines {
1286
1287
engine
0 commit comments