Skip to content

Commit fdca95c

Browse files
committed
fixes(settings): fix server hang when concurrent requests http auth
1 parent 89b1367 commit fdca95c

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/query/settings/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ common-config = { path = "../config" }
1414
common-exception = { path = "../../common/exception" }
1515
common-meta-types = { path = "../../meta/types" }
1616
common-users = { path = "../users" }
17+
common-base = { path = "../../common/base" }
1718

1819
futures = "0.3.21"
1920
itertools = "0.10.3"

src/query/settings/src/lib.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ use std::str;
2222
use std::sync::Arc;
2323

2424
use common_ast::Dialect;
25+
use common_base::base::GlobalIORuntime;
26+
use common_base::base::TrySpawn;
2527
use common_config::Config;
2628
use common_exception::ErrorCode;
2729
use common_exception::Result;
@@ -88,7 +90,7 @@ impl Settings {
8890
for global_setting in global_settings {
8991
let name = global_setting.name;
9092
let val = global_setting.value.as_string()?;
91-
settings.set_settings(name, val, true)?;
93+
settings.set_settings(name, val, false)?;
9294
}
9395
settings
9496
};
@@ -546,12 +548,15 @@ impl Settings {
546548
setting.user_setting.value = UserSettingValue::UInt64(val);
547549

548550
if is_global {
549-
let tenant = self.tenant.as_str();
550-
let _ = futures::executor::block_on(
551+
let tenant = self.tenant.clone();
552+
let user_setting = setting.user_setting.clone();
553+
let set_handle = GlobalIORuntime::instance().spawn(async move {
551554
UserApiProvider::instance()
552-
.get_setting_api_client(tenant)?
553-
.set_setting(setting.user_setting.clone()),
554-
)?;
555+
.get_setting_api_client(&tenant)?
556+
.set_setting(user_setting)
557+
.await
558+
});
559+
let _ = futures::executor::block_on(set_handle).unwrap()?;
555560
setting.level = ScopeLevel::Global;
556561
}
557562

@@ -566,11 +571,15 @@ impl Settings {
566571
setting.user_setting.value = UserSettingValue::String(val);
567572

568573
if is_global {
569-
let _ = futures::executor::block_on(
574+
let tenant = self.tenant.clone();
575+
let user_setting = setting.user_setting.clone();
576+
let set_handle = GlobalIORuntime::instance().spawn(async move {
570577
UserApiProvider::instance()
571-
.get_setting_api_client(&self.tenant)?
572-
.set_setting(setting.user_setting.clone()),
573-
)?;
578+
.get_setting_api_client(&tenant)?
579+
.set_setting(user_setting)
580+
.await
581+
});
582+
let _ = futures::executor::block_on(set_handle).unwrap()?;
574583
setting.level = ScopeLevel::Global;
575584
}
576585

0 commit comments

Comments
 (0)