// Copyright 2023 Greptime Team // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // This file is @generated by prost-build. #[derive(Clone, PartialEq, ::prost::Message)] pub struct RegionRequestHeader { /// Encoded trace_id & span_id, follow the w3c Trace Context /// #[prost(map = "string, string", tag = "5")] pub tracing_context: ::std::collections::HashMap< ::prost::alloc::string::String, ::prost::alloc::string::String, >, /// DB Name of request, tracking only #[prost(string, tag = "3")] pub dbname: ::prost::alloc::string::String, /// The contextual information of the query #[prost(message, optional, tag = "6")] pub query_context: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RegionRequest { #[prost(message, optional, tag = "1")] pub header: ::core::option::Option, /// query request is handled in flight services. #[prost( oneof = "region_request::Body", tags = "3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20" )] pub body: ::core::option::Option, } /// Nested message and enum types in `RegionRequest`. pub mod region_request { /// query request is handled in flight services. #[derive(strum_macros::AsRefStr)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Body { #[prost(message, tag = "3")] Inserts(super::InsertRequests), #[prost(message, tag = "4")] Deletes(super::DeleteRequests), #[prost(message, tag = "5")] Create(super::CreateRequest), #[prost(message, tag = "6")] Drop(super::DropRequest), #[prost(message, tag = "7")] Open(super::OpenRequest), #[prost(message, tag = "8")] Close(super::CloseRequest), #[prost(message, tag = "9")] Alter(super::AlterRequest), #[prost(message, tag = "10")] Flush(super::FlushRequest), #[prost(message, tag = "11")] Compact(super::CompactRequest), #[prost(message, tag = "12")] Truncate(super::TruncateRequest), #[prost(message, tag = "13")] Creates(super::CreateRequests), #[prost(message, tag = "14")] Drops(super::DropRequests), #[prost(message, tag = "15")] Alters(super::AlterRequests), #[prost(message, tag = "16")] BulkInsert(super::BulkInsertRequest), #[prost(message, tag = "17")] Sync(super::SyncRequest), #[prost(message, tag = "18")] ListMetadata(super::ListMetadataRequest), #[prost(message, tag = "19")] BuildIndex(super::BuildIndexRequest), #[prost(message, tag = "20")] ApplyStagingManifest(super::ApplyStagingManifestRequest), } } #[derive(Clone, PartialEq, ::prost::Message)] pub struct RegionResponse { #[prost(message, optional, tag = "1")] pub header: ::core::option::Option, #[prost(uint64, tag = "2")] pub affected_rows: u64, #[prost(map = "string, bytes", tag = "3")] pub extensions: ::std::collections::HashMap< ::prost::alloc::string::String, ::prost::alloc::vec::Vec, >, /// Response for ListMetadataRequest. /// It is a json array of region metadatas. /// The length of the array is equal to the number of regions in the list request. /// The element is null if the region is not found. #[prost(bytes = "vec", tag = "4")] pub metadata: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct InsertRequests { #[prost(message, repeated, tag = "1")] pub requests: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeleteRequests { #[prost(message, repeated, tag = "1")] pub requests: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct InsertRequest { #[prost(uint64, tag = "1")] pub region_id: u64, #[prost(message, optional, tag = "2")] pub rows: ::core::option::Option, #[prost(message, optional, tag = "3")] pub partition_expr_version: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeleteRequest { #[prost(uint64, tag = "1")] pub region_id: u64, #[prost(message, optional, tag = "2")] pub rows: ::core::option::Option, #[prost(message, optional, tag = "3")] pub partition_expr_version: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct QueryRequest { #[prost(message, optional, tag = "1")] pub header: ::core::option::Option, #[prost(uint64, tag = "2")] pub region_id: u64, /// substrait plan to query #[prost(bytes = "vec", tag = "3")] pub plan: ::prost::alloc::vec::Vec, } /// Create a batch of regions at once, usually used to create multiple logical /// regions at once. Different engines can choose whether to support this /// request. Metric Engine needs it. #[derive(Clone, PartialEq, ::prost::Message)] pub struct CreateRequests { #[prost(message, repeated, tag = "1")] pub requests: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct CreateRequest { #[prost(uint64, tag = "1")] pub region_id: u64, /// Region engine name #[prost(string, tag = "2")] pub engine: ::prost::alloc::string::String, /// Columns in this region. #[prost(message, repeated, tag = "3")] pub column_defs: ::prost::alloc::vec::Vec, /// Column Id of primary keys. #[prost(uint32, repeated, tag = "4")] pub primary_key: ::prost::alloc::vec::Vec, /// Region storage path #[prost(string, tag = "5")] pub path: ::prost::alloc::string::String, /// Options of the created region. #[prost(map = "string, string", tag = "6")] pub options: ::std::collections::HashMap< ::prost::alloc::string::String, ::prost::alloc::string::String, >, /// Partition of the created region. #[prost(message, optional, tag = "7")] pub partition: ::core::option::Option, } /// Same as CreateRequests, but for dropping regions. #[derive(Clone, PartialEq, ::prost::Message)] pub struct DropRequests { #[prost(message, repeated, tag = "1")] pub requests: ::prost::alloc::vec::Vec, } #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct DropRequest { #[prost(uint64, tag = "1")] pub region_id: u64, /// Only used by Metric Engine, for fast path drop. /// It only works for Metric Engine, and will be ignored by other engines. /// If true, the Metric Engine will delete logical tables in memory, and drop the physical region eventually. #[prost(bool, tag = "2")] pub fast_path: bool, /// Used only by the Metric Engine, to forcibly drop a physical region and all its associated logical regions. #[prost(bool, tag = "3")] pub force: bool, /// If true, indicates that only a portion of the region is being dropped, and files may still be referenced by other regions. /// This is used to prevent deletion of files that are still in use by other regions. #[prost(bool, tag = "4")] pub partial_drop: bool, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct OpenRequest { #[prost(uint64, tag = "1")] pub region_id: u64, /// Region engine name #[prost(string, tag = "2")] pub engine: ::prost::alloc::string::String, /// Region storage path #[prost(string, tag = "3")] pub path: ::prost::alloc::string::String, /// Options of the opened region. #[prost(map = "string, string", tag = "4")] pub options: ::std::collections::HashMap< ::prost::alloc::string::String, ::prost::alloc::string::String, >, } #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct CloseRequest { #[prost(uint64, tag = "1")] pub region_id: u64, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct AlterRequests { #[prost(message, repeated, tag = "1")] pub requests: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct AlterRequest { #[prost(uint64, tag = "1")] pub region_id: u64, /// The version of the schema before applying the alteration. #[prost(uint64, tag = "4")] pub schema_version: u64, #[prost( oneof = "alter_request::Kind", tags = "2, 3, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16" )] pub kind: ::core::option::Option, } /// Nested message and enum types in `AlterRequest`. pub mod alter_request { #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Kind { #[prost(message, tag = "2")] AddColumns(super::AddColumns), #[prost(message, tag = "3")] DropColumns(super::DropColumns), #[prost(message, tag = "5")] ModifyColumnTypes(super::super::ModifyColumnTypes), #[prost(message, tag = "6")] SetTableOptions(super::super::SetTableOptions), #[prost(message, tag = "9")] UnsetTableOptions(super::super::UnsetTableOptions), /// Deprecated: use set_indexes instead. #[prost(message, tag = "10")] SetIndex(super::super::SetIndex), /// Deprecated: use unset_indexes instead. #[prost(message, tag = "11")] UnsetIndex(super::super::UnsetIndex), #[prost(message, tag = "12")] DropDefaults(super::super::DropDefaults), #[prost(message, tag = "13")] SetIndexes(super::super::SetIndexes), #[prost(message, tag = "14")] UnsetIndexes(super::super::UnsetIndexes), #[prost(message, tag = "15")] SetDefaults(super::super::SetDefaults), #[prost(message, tag = "16")] SyncColumns(super::SyncColumns), } } #[derive(Clone, PartialEq, ::prost::Message)] pub struct SyncColumns { #[prost(message, repeated, tag = "1")] pub column_defs: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct AddColumns { #[prost(message, repeated, tag = "1")] pub add_columns: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct DropColumns { #[prost(message, repeated, tag = "1")] pub drop_columns: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct AddColumn { #[prost(message, optional, tag = "1")] pub column_def: ::core::option::Option, #[prost(message, optional, tag = "3")] pub location: ::core::option::Option, } #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DropColumn { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, } #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct FlushRequest { #[prost(uint64, tag = "1")] pub region_id: u64, } /// / Regular compaction #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct Regular {} /// / Strictly-windowed compaction. #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct StrictWindow { #[prost(int64, tag = "1")] pub window_seconds: i64, } #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct CompactRequest { #[prost(uint64, tag = "1")] pub region_id: u64, #[prost(uint32, tag = "4")] pub parallelism: u32, #[prost(oneof = "compact_request::Options", tags = "2, 3")] pub options: ::core::option::Option, } /// Nested message and enum types in `CompactRequest`. pub mod compact_request { #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)] pub enum Options { #[prost(message, tag = "2")] Regular(super::Regular), #[prost(message, tag = "3")] StrictWindow(super::StrictWindow), } } #[derive(Clone, PartialEq, ::prost::Message)] pub struct TruncateRequest { #[prost(uint64, tag = "1")] pub region_id: u64, #[prost(oneof = "truncate_request::Kind", tags = "2, 3")] pub kind: ::core::option::Option, } /// Nested message and enum types in `TruncateRequest`. pub mod truncate_request { #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Kind { #[prost(message, tag = "2")] All(super::All), #[prost(message, tag = "3")] TimeRanges(super::super::TimeRanges), } } /// Truncate all data in region #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct All {} /// The column definition of a region. Unlike the message `ColumnDef` in /// `ddl.proto` which is for clients outside GreptimeDB, this `RegionColumnDef` /// is for region requests use only. So it carries an extra field `column_id` /// that is known internally. #[derive(Clone, PartialEq, ::prost::Message)] pub struct RegionColumnDef { #[prost(message, optional, tag = "1")] pub column_def: ::core::option::Option, #[prost(uint32, tag = "2")] pub column_id: u32, } /// Request of bulk ingestion API. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct BulkInsertRequest { #[prost(uint64, tag = "1")] pub region_id: u64, #[prost(message, optional, tag = "3")] pub partition_expr_version: ::core::option::Option, #[prost(oneof = "bulk_insert_request::Body", tags = "2")] pub body: ::core::option::Option, } /// Nested message and enum types in `BulkInsertRequest`. pub mod bulk_insert_request { #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)] pub enum Body { #[prost(message, tag = "2")] ArrowIpc(super::super::ArrowIpc), } } /// Manifest info for mito engine. #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct MitoManifestInfo { #[prost(uint64, tag = "1")] pub data_manifest_version: u64, } /// Manifest info for metric engine. #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct MetricManifestInfo { #[prost(uint64, tag = "1")] pub data_manifest_version: u64, #[prost(uint64, tag = "2")] pub metadata_manifest_version: u64, } /// Sync request for region. #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct SyncRequest { #[prost(uint64, tag = "1")] pub region_id: u64, #[prost(oneof = "sync_request::ManifestInfo", tags = "2, 3")] pub manifest_info: ::core::option::Option, } /// Nested message and enum types in `SyncRequest`. pub mod sync_request { #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)] pub enum ManifestInfo { #[prost(message, tag = "2")] MitoManifestInfo(super::MitoManifestInfo), #[prost(message, tag = "3")] MetricManifestInfo(super::MetricManifestInfo), } } /// Get region metadatas of a list of regions. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ListMetadataRequest { #[prost(uint64, repeated, tag = "1")] pub region_ids: ::prost::alloc::vec::Vec, } #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct BuildIndexRequest { #[prost(uint64, tag = "1")] pub region_id: u64, } /// The file metas of a staging manifest. /// It is a json array of file metadatas. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct FileMetas { #[prost(bytes = "vec", tag = "1")] pub data: ::prost::alloc::vec::Vec, } /// / Apply staging manifest request. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ApplyStagingManifestRequest { /// The target region id. #[prost(uint64, tag = "1")] pub region_id: u64, /// The partition expression of the staging manifest. #[prost(string, tag = "2")] pub partition_expr: ::prost::alloc::string::String, /// The region stores the staging manifest. #[prost(uint64, tag = "3")] pub central_region_id: u64, /// Path to the staging manifest file. #[prost(string, tag = "4")] pub manifest_path: ::prost::alloc::string::String, } /// Generated client implementations. pub mod region_client { #![allow( unused_variables, dead_code, missing_docs, clippy::wildcard_imports, clippy::let_unit_value, )] use tonic::codegen::*; use tonic::codegen::http::Uri; #[derive(Debug, Clone)] pub struct RegionClient { inner: tonic::client::Grpc, } impl RegionClient { /// Attempt to create a new client by connecting to a given endpoint. pub async fn connect(dst: D) -> Result where D: TryInto, D::Error: Into, { let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; Ok(Self::new(conn)) } } impl RegionClient where T: tonic::client::GrpcService, T::Error: Into, T::ResponseBody: Body + std::marker::Send + 'static, ::Error: Into + std::marker::Send, { pub fn new(inner: T) -> Self { let inner = tonic::client::Grpc::new(inner); Self { inner } } pub fn with_origin(inner: T, origin: Uri) -> Self { let inner = tonic::client::Grpc::with_origin(inner, origin); Self { inner } } pub fn with_interceptor( inner: T, interceptor: F, ) -> RegionClient> where F: tonic::service::Interceptor, T::ResponseBody: Default, T: tonic::codegen::Service< http::Request, Response = http::Response< >::ResponseBody, >, >, , >>::Error: Into + std::marker::Send + std::marker::Sync, { RegionClient::new(InterceptedService::new(inner, interceptor)) } /// Compress requests with the given encoding. /// /// This requires the server to support it otherwise it might respond with an /// error. #[must_use] pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { self.inner = self.inner.send_compressed(encoding); self } /// Enable decompressing responses. #[must_use] pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { self.inner = self.inner.accept_compressed(encoding); self } /// Limits the maximum size of a decoded message. /// /// Default: `4MB` #[must_use] pub fn max_decoding_message_size(mut self, limit: usize) -> Self { self.inner = self.inner.max_decoding_message_size(limit); self } /// Limits the maximum size of an encoded message. /// /// Default: `usize::MAX` #[must_use] pub fn max_encoding_message_size(mut self, limit: usize) -> Self { self.inner = self.inner.max_encoding_message_size(limit); self } pub async fn handle( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result, tonic::Status> { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/greptime.v1.region.Region/Handle", ); let mut req = request.into_request(); req.extensions_mut() .insert(GrpcMethod::new("greptime.v1.region.Region", "Handle")); self.inner.unary(req, path, codec).await } } } /// Generated server implementations. pub mod region_server { #![allow( unused_variables, dead_code, missing_docs, clippy::wildcard_imports, clippy::let_unit_value, )] use tonic::codegen::*; /// Generated trait containing gRPC methods that should be implemented for use with RegionServer. #[async_trait] pub trait Region: std::marker::Send + std::marker::Sync + 'static { async fn handle( &self, request: tonic::Request, ) -> std::result::Result, tonic::Status>; } #[derive(Debug)] pub struct RegionServer { inner: Arc, accept_compression_encodings: EnabledCompressionEncodings, send_compression_encodings: EnabledCompressionEncodings, max_decoding_message_size: Option, max_encoding_message_size: Option, } impl RegionServer { pub fn new(inner: T) -> Self { Self::from_arc(Arc::new(inner)) } pub fn from_arc(inner: Arc) -> Self { Self { inner, accept_compression_encodings: Default::default(), send_compression_encodings: Default::default(), max_decoding_message_size: None, max_encoding_message_size: None, } } pub fn with_interceptor( inner: T, interceptor: F, ) -> InterceptedService where F: tonic::service::Interceptor, { InterceptedService::new(Self::new(inner), interceptor) } /// Enable decompressing requests with the given encoding. #[must_use] pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { self.accept_compression_encodings.enable(encoding); self } /// Compress responses with the given encoding, if the client supports it. #[must_use] pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { self.send_compression_encodings.enable(encoding); self } /// Limits the maximum size of a decoded message. /// /// Default: `4MB` #[must_use] pub fn max_decoding_message_size(mut self, limit: usize) -> Self { self.max_decoding_message_size = Some(limit); self } /// Limits the maximum size of an encoded message. /// /// Default: `usize::MAX` #[must_use] pub fn max_encoding_message_size(mut self, limit: usize) -> Self { self.max_encoding_message_size = Some(limit); self } } impl tonic::codegen::Service> for RegionServer where T: Region, B: Body + std::marker::Send + 'static, B::Error: Into + std::marker::Send + 'static, { type Response = http::Response; type Error = std::convert::Infallible; type Future = BoxFuture; fn poll_ready( &mut self, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } fn call(&mut self, req: http::Request) -> Self::Future { match req.uri().path() { "/greptime.v1.region.Region/Handle" => { #[allow(non_camel_case_types)] struct HandleSvc(pub Arc); impl tonic::server::UnaryService for HandleSvc { type Response = super::RegionResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::handle(&inner, request).await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = HandleSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } _ => { Box::pin(async move { let mut response = http::Response::new( tonic::body::Body::default(), ); let headers = response.headers_mut(); headers .insert( tonic::Status::GRPC_STATUS, (tonic::Code::Unimplemented as i32).into(), ); headers .insert( http::header::CONTENT_TYPE, tonic::metadata::GRPC_CONTENT_TYPE, ); Ok(response) }) } } } } impl Clone for RegionServer { fn clone(&self) -> Self { let inner = self.inner.clone(); Self { inner, accept_compression_encodings: self.accept_compression_encodings, send_compression_encodings: self.send_compression_encodings, max_decoding_message_size: self.max_decoding_message_size, max_encoding_message_size: self.max_encoding_message_size, } } } /// Generated gRPC service name pub const SERVICE_NAME: &str = "greptime.v1.region.Region"; impl tonic::server::NamedService for RegionServer { const NAME: &'static str = SERVICE_NAME; } }