1use std::sync::Arc;
16use std::time::Duration;
17
18use store_api::storage::{RegionId, TableId};
19
20use crate::DatanodeId;
21use crate::cache_invalidator::CacheInvalidatorRef;
22use crate::ddl::flow_meta::FlowMetadataAllocatorRef;
23use crate::ddl::table_meta::TableMetadataAllocatorRef;
24use crate::key::TableMetadataManagerRef;
25use crate::key::flow::FlowMetadataManagerRef;
26use crate::key::table_route::PhysicalTableRouteValue;
27use crate::node_manager::NodeManagerRef;
28use crate::region_keeper::MemoryRegionKeeperRef;
29use crate::region_registry::LeaderRegionRegistryRef;
30use crate::wal_provider::RegionWalOptions;
31
32pub mod allocator;
33pub mod alter_database;
34pub mod alter_logical_tables;
35pub mod alter_table;
36pub mod comment_on;
37pub mod create_database;
38pub mod create_flow;
39pub mod create_logical_tables;
40pub mod create_table;
41pub(crate) use create_table::{CreateRequestBuilder, build_template_from_raw_table_info};
42pub mod create_view;
43pub mod drop_database;
44pub mod drop_flow;
45pub mod drop_table;
46pub mod drop_view;
47pub(crate) mod event;
48pub mod flow_meta;
49#[cfg(feature = "enterprise")]
50pub mod purge_dropped_table;
51pub mod table_meta;
52#[cfg(any(test, feature = "testing"))]
53pub mod test_util;
54#[cfg(test)]
55pub(crate) mod tests;
56pub mod truncate_table;
57#[cfg(feature = "enterprise")]
58pub mod undrop_table;
59pub mod utils;
60
61#[derive(Default)]
63pub struct TableMetadata {
64 pub table_id: TableId,
66 pub table_route: PhysicalTableRouteValue,
68 pub region_wal_options: RegionWalOptions,
71}
72
73pub type RegionFailureDetectorControllerRef = Arc<dyn RegionFailureDetectorController>;
74
75pub type DetectingRegion = (DatanodeId, RegionId);
76
77#[async_trait::async_trait]
81pub trait RegionFailureDetectorController: Send + Sync {
82 async fn register_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>);
84
85 async fn reset_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>);
87
88 async fn deregister_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>);
90}
91
92#[derive(Debug, Clone)]
94pub struct NoopRegionFailureDetectorControl;
95
96#[async_trait::async_trait]
97impl RegionFailureDetectorController for NoopRegionFailureDetectorControl {
98 async fn register_failure_detectors(&self, _detecting_regions: Vec<DetectingRegion>) {}
99
100 async fn reset_failure_detectors(&self, _detecting_regions: Vec<DetectingRegion>) {}
101
102 async fn deregister_failure_detectors(&self, _detecting_regions: Vec<DetectingRegion>) {}
103}
104
105#[derive(Clone)]
107pub struct DdlContext {
108 pub node_manager: NodeManagerRef,
110 pub cache_invalidator: CacheInvalidatorRef,
112 pub memory_region_keeper: MemoryRegionKeeperRef,
114 pub leader_region_registry: LeaderRegionRegistryRef,
116 pub table_metadata_manager: TableMetadataManagerRef,
118 pub table_metadata_allocator: TableMetadataAllocatorRef,
120 pub flow_metadata_manager: FlowMetadataManagerRef,
122 pub flow_metadata_allocator: FlowMetadataAllocatorRef,
124 pub region_failure_detector_controller: RegionFailureDetectorControllerRef,
126 pub soft_drop_enabled: bool,
128 pub soft_drop_retention: Option<Duration>,
130 pub create_database_metadata_committer:
132 Option<create_database::CreateDatabaseMetadataCommitterRef>,
133}
134
135impl DdlContext {
136 pub async fn register_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>) {
141 self.region_failure_detector_controller
142 .register_failure_detectors(detecting_regions)
143 .await;
144 }
145
146 pub(crate) async fn deregister_failure_detectors(
151 &self,
152 detecting_regions: Vec<DetectingRegion>,
153 ) {
154 self.region_failure_detector_controller
155 .deregister_failure_detectors(detecting_regions)
156 .await;
157 }
158}