Skip to content

Commit 6f73787

Browse files
authored
Merge branch 'zhongzc/wire-dn-fe-inspect' into zhongzc/ssts-systable
2 parents 7a3e908 + 198d1d3 commit 6f73787

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

src/datanode/src/region_server.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod catalog;
1717
use std::collections::HashMap;
1818
use std::fmt::Debug;
1919
use std::ops::Deref;
20-
use std::sync::{Arc, OnceLock, RwLock};
20+
use std::sync::{Arc, RwLock};
2121
use std::time::Duration;
2222

2323
use api::region::RegionResponse;
@@ -684,7 +684,7 @@ struct RegionServerInner {
684684
// HACK(zhongzc): Direct MitoEngine handle for diagnostics. This couples the
685685
// server with a concrete engine; acceptable for now to fetch Mito-specific
686686
// info (e.g., list SSTs). Consider a diagnostics trait later.
687-
mito_engine: OnceLock<MitoEngine>,
687+
mito_engine: RwLock<Option<MitoEngine>>,
688688
}
689689

690690
struct RegionServerParallelism {
@@ -751,7 +751,7 @@ impl RegionServerInner {
751751
table_provider_factory,
752752
parallelism,
753753
topic_stats_reporter: RwLock::new(None),
754-
mito_engine: OnceLock::new(),
754+
mito_engine: RwLock::new(None),
755755
}
756756
}
757757

@@ -760,7 +760,7 @@ impl RegionServerInner {
760760
if engine_name == MITO_ENGINE_NAME
761761
&& let Some(mito_engine) = engine.as_any().downcast_ref::<MitoEngine>()
762762
{
763-
let _ = self.mito_engine.set(mito_engine.clone());
763+
*self.mito_engine.write().unwrap() = Some(mito_engine.clone());
764764
}
765765

766766
info!("Region Engine {engine_name} is registered");
@@ -1281,6 +1281,7 @@ impl RegionServerInner {
12811281
self.region_map.clear();
12821282
info!("closed {num_regions} regions");
12831283

1284+
drop(self.mito_engine.write().unwrap().take());
12841285
let engines = self.engines.write().unwrap().drain().collect::<Vec<_>>();
12851286
for (engine_name, engine) in engines {
12861287
engine

src/datanode/src/region_server/catalog.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,12 @@ impl InternalTableKind {
6565
impl RegionServer {
6666
/// Expose SSTs listed in Manifest as an in-memory table for inspection.
6767
pub async fn inspect_sst_manifest_provider(&self) -> Result<Arc<dyn TableProvider>> {
68-
let mito = self.inner.mito_engine.get().context(UnexpectedSnafu {
69-
violated: "mito engine not available",
70-
})?;
68+
let mito = {
69+
let guard = self.inner.mito_engine.read().unwrap();
70+
guard.as_ref().cloned().context(UnexpectedSnafu {
71+
violated: "mito engine not available",
72+
})?
73+
};
7174

7275
let entries = mito.all_ssts_from_manifest().collect::<Vec<_>>();
7376
let schema = ManifestSstEntry::schema().arrow_schema().clone();
@@ -81,10 +84,12 @@ impl RegionServer {
8184

8285
/// Expose SSTs found in storage as an in-memory table for inspection.
8386
pub async fn inspect_sst_storage_provider(&self) -> Result<Arc<dyn TableProvider>> {
84-
let mito = self.inner.mito_engine.get().context(UnexpectedSnafu {
85-
violated: "mito engine not available",
86-
})?;
87-
87+
let mito = {
88+
let guard = self.inner.mito_engine.read().unwrap();
89+
guard.as_ref().cloned().context(UnexpectedSnafu {
90+
violated: "mito engine not available",
91+
})?
92+
};
8893
let entries = mito
8994
.all_ssts_from_storage()
9095
.try_collect::<Vec<_>>()

0 commit comments

Comments
 (0)