Skip to content

Commit c17767b

Browse files
authored
chore: simplify setting API (#17138)
1 parent 5fc7c46 commit c17767b

File tree

10 files changed

+29
-87
lines changed

10 files changed

+29
-87
lines changed

Cargo.lock

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

src/meta/kvapi/src/kvapi/api.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ use futures_util::TryStreamExt;
2828
use log::debug;
2929

3030
use crate::kvapi;
31-
use crate::kvapi::GetKVReply;
3231
use crate::kvapi::ListKVReply;
3332
use crate::kvapi::MGetKVReply;
3433
use crate::kvapi::UpsertKVReply;
@@ -61,7 +60,7 @@ pub trait KVApi: Send + Sync {
6160

6261
/// Get a key-value record by key.
6362
// TODO: #[deprecated(note = "use get_kv_stream() instead")]
64-
async fn get_kv(&self, key: &str) -> Result<GetKVReply, Self::Error> {
63+
async fn get_kv(&self, key: &str) -> Result<Option<SeqV>, Self::Error> {
6564
let mut strm = self.get_kv_stream(&[key.to_string()]).await?;
6665

6766
let strm_item = strm

src/query/management/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ pub use role::RoleMgr;
4444
pub use serde::check_and_upgrade_to_pb;
4545
pub use serde::deserialize_struct;
4646
pub use serde::serialize_struct;
47-
pub use setting::SettingApi;
4847
pub use setting::SettingMgr;
4948
pub use stage::StageApi;
5049
pub use stage::StageMgr;

src/query/management/src/setting/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
mod setting_api;
1615
mod setting_mgr;
1716

18-
pub use setting_api::SettingApi;
1917
pub use setting_mgr::SettingMgr;

src/query/management/src/setting/setting_api.rs

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/query/management/src/setting/setting_mgr.rs

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
use std::sync::Arc;
1616

17-
use databend_common_exception::ErrorCode;
1817
use databend_common_exception::Result;
1918
use databend_common_meta_app::principal::SettingIdent;
2019
use databend_common_meta_app::principal::UserSetting;
@@ -23,13 +22,9 @@ use databend_common_meta_kvapi::kvapi;
2322
use databend_common_meta_kvapi::kvapi::Key;
2423
use databend_common_meta_types::seq_value::SeqV;
2524
use databend_common_meta_types::seq_value::SeqValue;
26-
use databend_common_meta_types::MatchSeq;
27-
use databend_common_meta_types::MatchSeqExt;
2825
use databend_common_meta_types::MetaError;
29-
use databend_common_meta_types::Operation;
3026
use databend_common_meta_types::UpsertKV;
31-
32-
use crate::setting::SettingApi;
27+
use futures::TryStreamExt;
3328

3429
pub struct SettingMgr {
3530
kv_api: Arc<dyn kvapi::KVApi<Error = MetaError>>,
@@ -58,16 +53,14 @@ impl SettingMgr {
5853
}
5954

6055
// TODO: do not use json for setting value
61-
#[async_trait::async_trait]
62-
impl SettingApi for SettingMgr {
56+
impl SettingMgr {
6357
#[async_backtrace::framed]
6458
#[fastrace::trace]
65-
async fn set_setting(&self, setting: UserSetting) -> Result<u64> {
59+
pub async fn set_setting(&self, setting: UserSetting) -> Result<u64> {
6660
// Upsert.
67-
let seq = MatchSeq::GE(0);
68-
let val = Operation::Update(serde_json::to_vec(&setting)?);
61+
let val = serde_json::to_vec(&setting)?;
6962
let key = self.setting_key(&setting.name);
70-
let upsert = self.kv_api.upsert_kv(UpsertKV::new(&key, seq, val, None));
63+
let upsert = self.kv_api.upsert_kv(UpsertKV::update(&key, &val));
7164

7265
let (_prev, curr) = upsert.await?.unpack();
7366
let res_seq = curr.seq();
@@ -76,45 +69,38 @@ impl SettingApi for SettingMgr {
7669

7770
#[async_backtrace::framed]
7871
#[fastrace::trace]
79-
async fn get_settings(&self) -> Result<Vec<UserSetting>> {
72+
pub async fn get_settings(&self) -> Result<Vec<UserSetting>> {
8073
let prefix = self.setting_prefix();
81-
let values = self.kv_api.prefix_list_kv(&prefix).await?;
74+
let mut strm = self.kv_api.list_kv(&prefix).await?;
8275

83-
let mut settings = Vec::with_capacity(values.len());
84-
for (_, value) in values {
85-
let setting = serde_json::from_slice::<UserSetting>(&value.data)?;
76+
let mut settings = Vec::new();
77+
while let Some(item) = strm.try_next().await? {
78+
let setting: UserSetting = serde_json::from_slice(&item.value.unwrap().data)?;
8679
settings.push(setting);
8780
}
81+
8882
Ok(settings)
8983
}
9084

9185
#[async_backtrace::framed]
9286
#[fastrace::trace]
93-
async fn get_setting(&self, name: &str, seq: MatchSeq) -> Result<SeqV<UserSetting>> {
87+
pub async fn get_setting(&self, name: &str) -> Result<Option<SeqV<UserSetting>>> {
9488
let key = self.setting_key(name);
9589
let res = self.kv_api.get_kv(&key).await?;
9690

97-
let seq_value = res.ok_or_else(|| {
98-
ErrorCode::UnknownVariable(format!("Setting '{}' does not exist.", name))
99-
})?;
91+
let Some(seqv) = res else {
92+
return Ok(None);
93+
};
10094

101-
match seq.match_seq(&seq_value) {
102-
Ok(_) => Ok(seq_value.try_map(|d| d.try_into())?),
103-
Err(_) => Err(ErrorCode::UnknownVariable(format!(
104-
"Setting '{}' does not exist.",
105-
name
106-
))),
107-
}
95+
let seqv = seqv.try_map(|d| d.try_into())?;
96+
Ok(Some(seqv))
10897
}
10998

11099
#[async_backtrace::framed]
111100
#[fastrace::trace]
112-
async fn try_drop_setting(&self, name: &str, seq: MatchSeq) -> Result<()> {
101+
pub async fn try_drop_setting(&self, name: &str) -> Result<()> {
113102
let key = self.setting_key(name);
114-
let _res = self
115-
.kv_api
116-
.upsert_kv(UpsertKV::new(&key, seq, Operation::Delete, None))
117-
.await?;
103+
let _res = self.kv_api.upsert_kv(UpsertKV::delete(&key)).await?;
118104

119105
Ok(())
120106
}

src/query/management/tests/it/setting.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ use databend_common_meta_app::tenant::Tenant;
2323
use databend_common_meta_embedded::MemMeta;
2424
use databend_common_meta_kvapi::kvapi::KVApi;
2525
use databend_common_meta_types::seq_value::SeqV;
26-
use databend_common_meta_types::MatchSeq;
2726
use fastrace::func_name;
2827

2928
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
@@ -82,13 +81,13 @@ async fn test_set_setting() -> Result<()> {
8281
// Get setting.
8382
{
8483
let expect = UserSetting::create("max_threads", UserSettingValue::UInt64(1));
85-
let actual = mgr.get_setting("max_threads", MatchSeq::GE(0)).await?;
86-
assert_eq!(actual.data, expect);
84+
let actual = mgr.get_setting("max_threads").await?;
85+
assert_eq!(actual.unwrap().data, expect);
8786
}
8887

8988
// Drop setting.
9089
{
91-
mgr.try_drop_setting("max_threads", MatchSeq::GE(1)).await?;
90+
mgr.try_drop_setting("max_threads").await?;
9291
}
9392

9493
// Get settings.
@@ -99,15 +98,13 @@ async fn test_set_setting() -> Result<()> {
9998

10099
// Get setting.
101100
{
102-
let res = mgr.get_setting("max_threads", MatchSeq::GE(0)).await;
103-
assert!(res.is_err());
101+
let res = mgr.get_setting("max_threads").await?;
102+
assert!(res.is_none());
104103
}
105104

106105
// Drop setting not exists.
107106
{
108-
let res = mgr
109-
.try_drop_setting("max_threads_not", MatchSeq::GE(1))
110-
.await;
107+
let res = mgr.try_drop_setting("max_threads_not").await;
111108
assert!(res.is_ok());
112109
}
113110

src/query/settings/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ databend-common-config = { workspace = true }
1919
databend-common-exception = { workspace = true }
2020
databend-common-io = { workspace = true }
2121
databend-common-meta-app = { workspace = true }
22-
databend-common-meta-types = { workspace = true }
2322
databend-common-users = { workspace = true }
2423
itertools = { workspace = true }
2524
log = { workspace = true }

src/query/settings/src/settings_global.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use databend_common_exception::Result;
1919
use databend_common_meta_app::principal::UserSetting;
2020
use databend_common_meta_app::principal::UserSettingValue;
2121
use databend_common_meta_app::tenant::Tenant;
22-
use databend_common_meta_types::MatchSeq;
2322
use databend_common_users::UserApiProvider;
2423
use log::warn;
2524

@@ -44,7 +43,7 @@ impl Settings {
4443

4544
UserApiProvider::instance()
4645
.setting_api(&self.tenant)
47-
.try_drop_setting(key, MatchSeq::GE(1))
46+
.try_drop_setting(key)
4847
.await
4948
}
5049

src/query/users/src/user_api.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ use databend_common_management::QuotaApi;
3030
use databend_common_management::QuotaMgr;
3131
use databend_common_management::RoleApi;
3232
use databend_common_management::RoleMgr;
33-
use databend_common_management::SettingApi;
3433
use databend_common_management::SettingMgr;
3534
use databend_common_management::StageApi;
3635
use databend_common_management::StageMgr;
@@ -152,8 +151,8 @@ impl UserApiProvider {
152151
Arc::new(QuotaMgr::<WRITE_PB>::create(self.client.clone(), tenant))
153152
}
154153

155-
pub fn setting_api(&self, tenant: &Tenant) -> Arc<dyn SettingApi> {
156-
Arc::new(SettingMgr::create(self.client.clone(), tenant))
154+
pub fn setting_api(&self, tenant: &Tenant) -> SettingMgr {
155+
SettingMgr::create(self.client.clone(), tenant)
157156
}
158157
pub fn procedure_api(&self, _tenant: &Tenant) -> ProcedureMgr {
159158
ProcedureMgr::create(self.client.clone())

0 commit comments

Comments
 (0)