common_function/
handlers.rs1use std::sync::Arc;
16
17use api::v1::meta::ReconcileRequest;
18use async_trait::async_trait;
19use catalog::CatalogManagerRef;
20use common_base::AffectedRows;
21use common_meta::rpc::procedure::{
22 GcRegionsRequest as MetaGcRegionsRequest, GcResponse as MetaGcResponse,
23 GcTableRequest as MetaGcTableRequest, ManageRegionFollowerRequest, MigrateRegionRequest,
24 ProcedureStateResponse,
25};
26use common_query::Output;
27use common_query::error::Result;
28use session::context::QueryContextRef;
29use store_api::storage::RegionId;
30use table::requests::{
31 BuildIndexTableRequest, CompactTableRequest, DeleteRequest, FlushTableRequest, InsertRequest,
32};
33
34#[async_trait]
36pub trait TableMutationHandler: Send + Sync {
37 async fn insert(&self, request: InsertRequest, ctx: QueryContextRef) -> Result<Output>;
39
40 async fn delete(&self, request: DeleteRequest, ctx: QueryContextRef) -> Result<AffectedRows>;
42
43 async fn flush(&self, request: FlushTableRequest, ctx: QueryContextRef)
45 -> Result<AffectedRows>;
46
47 async fn compact(
49 &self,
50 request: CompactTableRequest,
51 ctx: QueryContextRef,
52 ) -> Result<AffectedRows>;
53
54 async fn build_index(
56 &self,
57 request: BuildIndexTableRequest,
58 ctx: QueryContextRef,
59 ) -> Result<AffectedRows>;
60
61 async fn flush_region(&self, region_id: RegionId, ctx: QueryContextRef)
63 -> Result<AffectedRows>;
64
65 async fn compact_region(
67 &self,
68 region_id: RegionId,
69 ctx: QueryContextRef,
70 ) -> Result<AffectedRows>;
71}
72
73#[async_trait]
75pub trait ProcedureServiceHandler: Send + Sync {
76 async fn migrate_region(&self, request: MigrateRegionRequest) -> Result<Option<String>>;
78
79 async fn reconcile(&self, request: ReconcileRequest) -> Result<Option<String>>;
81
82 async fn query_procedure_state(&self, pid: &str) -> Result<ProcedureStateResponse>;
84
85 async fn manage_region_follower(&self, request: ManageRegionFollowerRequest) -> Result<()>;
87
88 fn catalog_manager(&self) -> &CatalogManagerRef;
90
91 async fn gc_regions(&self, request: MetaGcRegionsRequest) -> Result<MetaGcResponse>;
93
94 async fn gc_table(&self, request: MetaGcTableRequest) -> Result<MetaGcResponse>;
96}
97
98#[async_trait]
100pub trait FlowServiceHandler: Send + Sync {
101 async fn flush(
102 &self,
103 catalog: &str,
104 flow: &str,
105 ctx: QueryContextRef,
106 ) -> Result<api::v1::flow::FlowResponse>;
107}
108
109pub type TableMutationHandlerRef = Arc<dyn TableMutationHandler>;
110
111pub type ProcedureServiceHandlerRef = Arc<dyn ProcedureServiceHandler>;
112
113pub type FlowServiceHandlerRef = Arc<dyn FlowServiceHandler>;