Skip to content

Commit 3047dc1

Browse files
authored
chore(task): validate set settings name on alter taks set (#17860)
* validate set settings name on alter taks set * add bad case * fix clippy * fix logic test * fix * fix test * fix err in sqlogictest
1 parent 6d10a20 commit 3047dc1

File tree

4 files changed

+41
-7
lines changed

4 files changed

+41
-7
lines changed

src/query/service/src/interpreters/interpreter_task_alter.rs

+16
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ use databend_common_cloud_control::pb::WarehouseOptions;
2626
use databend_common_config::GlobalConfig;
2727
use databend_common_exception::ErrorCode;
2828
use databend_common_exception::Result;
29+
use databend_common_settings::DefaultSettings;
30+
use databend_common_settings::SettingScope;
2931
use databend_common_sql::plans::AlterTaskPlan;
3032

3133
use crate::interpreters::common::get_task_client_config;
@@ -137,6 +139,19 @@ impl AlterTaskInterpreter {
137139
}
138140
req
139141
}
142+
143+
fn validate_session_parameters(&self) -> Result<()> {
144+
if let AlterTaskOptions::Set {
145+
session_parameters: Some(session_parameters),
146+
..
147+
} = &self.plan.alter_options
148+
{
149+
for (key, _) in session_parameters.iter() {
150+
DefaultSettings::check_setting_scope(key, SettingScope::Session)?;
151+
}
152+
}
153+
Ok(())
154+
}
140155
}
141156

142157
#[async_trait::async_trait]
@@ -158,6 +173,7 @@ impl Interpreter for AlterTaskInterpreter {
158173
"cannot alter task without cloud control enabled, please set cloud_control_grpc_server_address in config",
159174
));
160175
}
176+
self.validate_session_parameters()?;
161177
let cloud_api = CloudControlApiProvider::instance();
162178
let task_client = cloud_api.get_task_client();
163179
let req = self.build_request();

src/query/service/src/interpreters/interpreter_task_create.rs

+11
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ use databend_common_cloud_control::pb::CreateTaskRequest;
2323
use databend_common_config::GlobalConfig;
2424
use databend_common_exception::ErrorCode;
2525
use databend_common_exception::Result;
26+
use databend_common_settings::DefaultSettings;
27+
use databend_common_settings::SettingScope;
2628
use databend_common_sql::plans::CreateTaskPlan;
2729

2830
use crate::interpreters::common::get_task_client_config;
@@ -83,6 +85,14 @@ impl CreateTaskInterpreter {
8385
}
8486
req
8587
}
88+
89+
fn validate_session_parameters(&self) -> Result<()> {
90+
let session_parameters = self.plan.session_parameters.clone();
91+
for (key, _) in session_parameters.iter() {
92+
DefaultSettings::check_setting_scope(key, SettingScope::Session)?;
93+
}
94+
Ok(())
95+
}
8696
}
8797

8898
#[async_trait::async_trait]
@@ -104,6 +114,7 @@ impl Interpreter for CreateTaskInterpreter {
104114
"cannot create task without cloud control enabled, please set cloud_control_grpc_server_address in config",
105115
));
106116
}
117+
self.validate_session_parameters()?;
107118
let cloud_api = CloudControlApiProvider::instance();
108119
let task_client = cloud_api.get_task_client();
109120
let req = self.build_request();

src/query/settings/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ mod settings_global;
2020
pub use settings::ChangeValue;
2121
pub use settings::ScopeLevel;
2222
pub use settings::Settings;
23+
pub use settings_default::DefaultSettings;
2324
pub use settings_default::ReplaceIntoShuffleStrategy;
2425
pub use settings_default::SettingMode;
2526
pub use settings_default::SettingRange;

tests/sqllogictests/suites/task/task_ddl_test.test

+13-7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ CREATE TASK mytask
1313
SCHEDULE = USING CRON '0 0 0 1 1 ? 2100'
1414
AS SELECT 1;
1515

16+
statement error 2801
17+
CREATE TASK task_with_bad_set
18+
WAREHOUSE = 'mywh'
19+
SCHEDULE = USING CRON '0 0 0 1 1 ? 2100'
20+
settings_not_found = '123'
21+
AS SELECT 1;
22+
1623
query SSSS
1724
select name, warehouse, schedule, definition from system.tasks where name = 'mytask'
1825
----
@@ -100,32 +107,31 @@ SUCCEEDED
100107
statement ok
101108
CREATE TASK sessionTask
102109
WAREHOUSE = 'mywh'
103-
SCHEDULE = USING CRON '0 0 0 1 1 ? 2100'
104-
DATABASE = 'mydb', TIMEZONE = 'America/Los_Angeles'
110+
SCHEDULE = USING CRON '0 0 0 1 1 ? 2100' 'America/Los_Angeles'
105111
AS SELECT 1;
106112

107113
query SSS
108114
select name, state, session_parameters from system.tasks where name = 'sessionTask'
109115
----
110-
sessionTask Suspended {"database":"mydb","timezone":"America/Los_Angeles"}
116+
sessionTask Suspended {}
111117

112118
statement ok
113119
EXECUTE TASK sessionTask
114120

115121
query SSSS
116122
select name, session_parameters from system.task_history where name = 'sessionTask'
117123
----
118-
sessionTask {"database":"mydb","timezone":"America/Los_Angeles"}
124+
sessionTask {}
119125

120-
statement ok
126+
statement error 2801
121127
ALTER TASK sessionTask
122128
SET
123129
DATABASE = 'db2', TIMEZONE = 'Pacific/Honolulu'
124130

125131
query SSS
126132
select name, state, session_parameters from system.tasks where name = 'sessionTask'
127133
----
128-
sessionTask Suspended {"database":"db2","timezone":"Pacific/Honolulu"}
134+
sessionTask Suspended {}
129135

130136
query I
131137
select run_id from system.task_history where name = 'MockTask' limit 6;
@@ -151,4 +157,4 @@ statement ok
151157
DROP TASK mytask
152158

153159
statement ok
154-
DROP TASK sessionTask
160+
DROP TASK sessionTask

0 commit comments

Comments
 (0)