refactor: remove session from common meta (#7698)

* refactor: remove session dependency from common-meta

* chore: add udeps

* chore: format

* fix: lint issues

* chore: update oneshot

* chore: update unused deps
This commit is contained in:
Ning Sun
2026-02-11 11:04:45 +08:00
committed by GitHub
parent 1aa80d9363
commit 43afb7962a
18 changed files with 166 additions and 131 deletions

View File

@@ -849,6 +849,15 @@ pub enum Error {
location: Location,
},
#[snafu(display("Invalid timezone: {}", timezone))]
InvalidTimezone {
timezone: String,
#[snafu(source)]
source: common_time::error::Error,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Invalid process id: {}", id))]
InvalidProcessId { id: String },
@@ -1031,7 +1040,9 @@ impl ErrorExt for Error {
Error::ColumnOptions { source, .. } => source.status_code(),
Error::DecodeFlightData { source, .. } => source.status_code(),
Error::ComputeArrow { .. } => StatusCode::Internal,
Error::InvalidTimeIndexType { .. } => StatusCode::InvalidArguments,
Error::InvalidTimeIndexType { .. } | Error::InvalidTimezone { .. } => {
StatusCode::InvalidArguments
}
Error::InvalidProcessId { .. } => StatusCode::InvalidArguments,
Error::ProcessManagerMissing { .. } => StatusCode::Unexpected,
Error::PathNotFound { .. } => StatusCode::InvalidArguments,

View File

@@ -25,6 +25,8 @@ use futures::stream::FuturesUnordered;
use session::context::QueryContextRef;
use snafu::{OptionExt, ResultExt};
use crate::utils::to_meta_query_context;
/// The operator for flow service which implements [`FlowServiceHandler`].
pub struct FlowServiceOperator {
flow_metadata_manager: FlowMetadataManagerRef,
@@ -105,9 +107,7 @@ impl FlowServiceOperator {
let flush_req = FlowRequest {
header: Some(FlowRequestHeader {
tracing_context: TracingContext::from_current_span().to_w3c(),
query_context: Some(
common_meta::rpc::ddl::QueryContext::from(ctx.clone()).into(),
),
query_context: Some(to_meta_query_context(ctx.clone()).into()),
}),
body: Some(flow_request::Body::Flush(FlushFlow {
flow_id: Some(api::v1::FlowId { id }),

View File

@@ -30,3 +30,4 @@ pub mod statement;
pub mod table;
#[cfg(test)]
pub(crate) mod tests;
pub mod utils;

View File

@@ -25,6 +25,7 @@ use sql::statements::comment::{Comment, CommentObject};
use crate::error::{ExecuteDdlSnafu, ExternalSnafu, InvalidSqlSnafu, Result};
use crate::statement::StatementExecutor;
use crate::utils::to_meta_query_context;
impl StatementExecutor {
/// Adds a comment to a database object (table, column, or flow).
@@ -40,8 +41,10 @@ impl StatementExecutor {
pub async fn comment(&self, stmt: Comment, query_ctx: QueryContextRef) -> Result<Output> {
let comment_on_task = self.create_comment_on_task_from_stmt(stmt, &query_ctx)?;
let request =
SubmitDdlTaskRequest::new(query_ctx, DdlTask::new_comment_on(comment_on_task));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_ctx),
DdlTask::new_comment_on(comment_on_task),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)
@@ -57,8 +60,10 @@ impl StatementExecutor {
) -> Result<Output> {
let comment_on_task = self.create_comment_on_task_from_expr(expr)?;
let request =
SubmitDdlTaskRequest::new(query_ctx, DdlTask::new_comment_on(comment_on_task));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_ctx),
DdlTask::new_comment_on(comment_on_task),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)

View File

@@ -104,6 +104,7 @@ use crate::error::{
use crate::expr_helper::{self, RepartitionRequest};
use crate::statement::StatementExecutor;
use crate::statement::show::create_partitions_stmt;
use crate::utils::to_meta_query_context;
#[derive(Debug, Clone, Copy)]
struct DdlSubmitOptions {
@@ -590,7 +591,10 @@ impl StatementExecutor {
})
.context(error::InvalidExprSnafu)?;
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_create_trigger(task));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_context),
DdlTask::new_create_trigger(task),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)
@@ -640,7 +644,10 @@ impl StatementExecutor {
create_flow: Some(expr),
})
.context(error::InvalidExprSnafu)?;
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_create_flow(task));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_context),
DdlTask::new_create_flow(task),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)
@@ -935,8 +942,10 @@ impl StatementExecutor {
table_type: TableType::View,
};
let request =
SubmitDdlTaskRequest::new(ctx, DdlTask::new_create_view(expr, view_info.clone()));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(ctx),
DdlTask::new_create_view(expr, view_info.clone()),
);
let resp = self
.procedure_executor
@@ -1019,7 +1028,10 @@ impl StatementExecutor {
expr: DropFlowTask,
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_drop_flow(expr));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_context),
DdlTask::new_drop_flow(expr),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)
@@ -1051,7 +1063,10 @@ impl StatementExecutor {
expr: DropTriggerTask,
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_drop_trigger(expr));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_context),
DdlTask::new_drop_trigger(expr),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)
@@ -1116,7 +1131,10 @@ impl StatementExecutor {
expr: DropViewTask,
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_drop_view(expr));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_context),
DdlTask::new_drop_view(expr),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)
@@ -1499,7 +1517,7 @@ impl StatementExecutor {
let from_partition_exprs_json = serialize_exprs(from_partition_exprs)?;
let into_partition_exprs_json = serialize_exprs(into_partition_exprs)?;
let mut req = SubmitDdlTaskRequest::new(
query_context.clone(),
to_meta_query_context(query_context.clone()),
DdlTask::new_alter_table(AlterTableExpr {
catalog_name: request.catalog_name.clone(),
schema_name: request.schema_name.clone(),
@@ -1613,7 +1631,10 @@ impl StatementExecutor {
let (req, invalidate_keys) = if physical_table_id == table_id {
// This is physical table
let req = SubmitDdlTaskRequest::new(query_context, DdlTask::new_alter_table(expr));
let req = SubmitDdlTaskRequest::new(
to_meta_query_context(query_context),
DdlTask::new_alter_table(expr),
);
let invalidate_keys = vec![
CacheIdent::TableId(table_id),
@@ -1624,7 +1645,7 @@ impl StatementExecutor {
} else {
// This is logical table
let req = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_alter_logical_tables(vec![expr]),
);
@@ -1745,7 +1766,7 @@ impl StatementExecutor {
.collect::<Result<Vec<_>>>()?;
let request = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_create_table(create_table, partitions, table_info),
);
@@ -1761,7 +1782,7 @@ impl StatementExecutor {
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_create_logical_tables(tables_data),
);
@@ -1777,7 +1798,7 @@ impl StatementExecutor {
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_alter_logical_tables(tables_data),
);
@@ -1795,7 +1816,7 @@ impl StatementExecutor {
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_drop_table(
table_name.catalog_name.clone(),
table_name.schema_name.clone(),
@@ -1819,7 +1840,7 @@ impl StatementExecutor {
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_drop_database(catalog, schema, drop_if_exists),
);
@@ -1834,8 +1855,10 @@ impl StatementExecutor {
alter_expr: AlterDatabaseExpr,
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request =
SubmitDdlTaskRequest::new(query_context, DdlTask::new_alter_database(alter_expr));
let request = SubmitDdlTaskRequest::new(
to_meta_query_context(query_context),
DdlTask::new_alter_database(alter_expr),
);
self.procedure_executor
.submit_ddl_task(&ExecutorContext::default(), request)
@@ -1851,7 +1874,7 @@ impl StatementExecutor {
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_truncate_table(
table_name.catalog_name.clone(),
table_name.schema_name.clone(),
@@ -1923,7 +1946,7 @@ impl StatementExecutor {
query_context: QueryContextRef,
) -> Result<SubmitDdlTaskResponse> {
let request = SubmitDdlTaskRequest::new(
query_context,
to_meta_query_context(query_context),
DdlTask::new_create_database(catalog, database, create_if_not_exists, options),
);

47
src/operator/src/utils.rs Normal file
View File

@@ -0,0 +1,47 @@
// 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.
use common_time::Timezone;
use session::context::{QueryContextBuilder, QueryContextRef};
use snafu::ResultExt;
use crate::error::{Error, InvalidTimezoneSnafu};
pub fn to_meta_query_context(
query_context: QueryContextRef,
) -> common_meta::rpc::ddl::QueryContext {
common_meta::rpc::ddl::QueryContext {
current_catalog: query_context.current_catalog().to_string(),
current_schema: query_context.current_schema().clone(),
timezone: query_context.timezone().to_string(),
extensions: query_context.extensions(),
channel: query_context.channel() as u8,
}
}
pub fn try_to_session_query_context(
value: common_meta::rpc::ddl::QueryContext,
) -> Result<session::context::QueryContext, Error> {
Ok(QueryContextBuilder::default()
.current_catalog(value.current_catalog)
.current_schema(value.current_schema)
.timezone(
Timezone::from_tz_string(&value.timezone).context(InvalidTimezoneSnafu {
timezone: value.timezone,
})?,
)
.extensions(value.extensions)
.channel((value.channel as u32).into())
.build())
}