1use std::sync::Arc;
16use std::time::Duration;
17
18use store_api::storage::{RegionId, TableId};
19
20use crate::DatanodeId;
21use crate::affinity::{AffinityFallback, AffinityResolverRef, PeerAllocContextProviderRef};
22use crate::cache_invalidator::CacheInvalidatorRef;
23use crate::ddl::flow_meta::FlowMetadataAllocatorRef;
24use crate::ddl::table_meta::TableMetadataAllocatorRef;
25use crate::key::TableMetadataManagerRef;
26use crate::key::flow::FlowMetadataManagerRef;
27use crate::key::table_route::PhysicalTableRouteValue;
28use crate::node_manager::NodeManagerRef;
29use crate::region_keeper::MemoryRegionKeeperRef;
30use crate::region_registry::LeaderRegionRegistryRef;
31use crate::wal_provider::RegionWalOptions;
32
33pub mod allocator;
34pub mod alter_database;
35pub mod alter_logical_tables;
36pub mod alter_table;
37pub mod comment_on;
38pub mod create_database;
39pub mod create_flow;
40pub mod create_logical_tables;
41pub mod create_table;
42pub(crate) use create_table::{CreateRequestBuilder, build_template_from_raw_table_info};
43pub mod create_view;
44pub mod drop_database;
45pub mod drop_flow;
46pub mod drop_table;
47pub mod drop_view;
48pub(crate) mod event;
49pub mod flow_meta;
50#[cfg(feature = "enterprise")]
51pub mod purge_dropped_table;
52pub mod table_meta;
53#[cfg(any(test, feature = "testing"))]
54pub mod test_util;
55#[cfg(test)]
56pub(crate) mod tests;
57pub mod truncate_table;
58#[cfg(feature = "enterprise")]
59pub mod undrop_table;
60pub mod utils;
61
62#[derive(Default)]
64pub struct TableMetadata {
65 pub table_id: TableId,
67 pub table_route: PhysicalTableRouteValue,
69 pub region_wal_options: RegionWalOptions,
72}
73
74pub type RegionFailureDetectorControllerRef = Arc<dyn RegionFailureDetectorController>;
75
76pub type DetectingRegion = (DatanodeId, RegionId);
77
78#[async_trait::async_trait]
82pub trait RegionFailureDetectorController: Send + Sync {
83 async fn register_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>);
85
86 async fn reset_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>);
88
89 async fn deregister_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>);
91}
92
93#[derive(Debug, Clone)]
95pub struct NoopRegionFailureDetectorControl;
96
97#[async_trait::async_trait]
98impl RegionFailureDetectorController for NoopRegionFailureDetectorControl {
99 async fn register_failure_detectors(&self, _detecting_regions: Vec<DetectingRegion>) {}
100
101 async fn reset_failure_detectors(&self, _detecting_regions: Vec<DetectingRegion>) {}
102
103 async fn deregister_failure_detectors(&self, _detecting_regions: Vec<DetectingRegion>) {}
104}
105
106#[derive(Clone)]
108pub struct DdlContext {
109 pub affinity_resolver: Option<AffinityResolverRef>,
111 pub affinity_fallback: AffinityFallback,
113 pub peer_alloc_context_provider: Option<PeerAllocContextProviderRef>,
115 pub node_manager: NodeManagerRef,
117 pub cache_invalidator: CacheInvalidatorRef,
119 pub memory_region_keeper: MemoryRegionKeeperRef,
121 pub leader_region_registry: LeaderRegionRegistryRef,
123 pub table_metadata_manager: TableMetadataManagerRef,
125 pub table_metadata_allocator: TableMetadataAllocatorRef,
127 pub flow_metadata_manager: FlowMetadataManagerRef,
129 pub flow_metadata_allocator: FlowMetadataAllocatorRef,
131 pub region_failure_detector_controller: RegionFailureDetectorControllerRef,
133 pub soft_drop_enabled: bool,
135 pub soft_drop_retention: Option<Duration>,
137 pub create_database_metadata_committer:
139 Option<create_database::CreateDatabaseMetadataCommitterRef>,
140}
141
142impl DdlContext {
143 pub async fn register_failure_detectors(&self, detecting_regions: Vec<DetectingRegion>) {
148 self.region_failure_detector_controller
149 .register_failure_detectors(detecting_regions)
150 .await;
151 }
152
153 pub(crate) async fn deregister_failure_detectors(
158 &self,
159 detecting_regions: Vec<DetectingRegion>,
160 ) {
161 self.region_failure_detector_controller
162 .deregister_failure_detectors(detecting_regions)
163 .await;
164 }
165}