Skip to content

Commit 6c96171

Browse files
authored
chore: minor refine on RoleMgr (#17683)
* chore: minor refine on RoleMgr * refactor: rename RoleApi::get_ownerships to list_ownerships
1 parent 0191b37 commit 6c96171

File tree

13 files changed

+28
-25
lines changed

13 files changed

+28
-25
lines changed

src/query/management/src/role/role_api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub trait RoleApi: Sync + Send {
3232

3333
async fn get_raw_meta_roles(&self) -> Result<ListKVReply>;
3434

35-
async fn get_ownerships(&self) -> Result<Vec<SeqV<OwnershipInfo>>>;
35+
async fn list_ownerships(&self) -> Result<Vec<SeqV<OwnershipInfo>>>;
3636

3737
/// General role update.
3838
///

src/query/management/src/role/role_mgr.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ static TXN_MAX_RETRY_TIMES: u32 = 60;
5757

5858
static BUILTIN_ROLE_ACCOUNT_ADMIN: &str = "account_admin";
5959

60+
#[derive(Clone)]
6061
pub struct RoleMgr {
6162
kv_api: Arc<dyn kvapi::KVApi<Error = MetaError> + Send + Sync>,
6263
tenant: Tenant,
@@ -210,7 +211,7 @@ impl RoleApi for RoleMgr {
210211

211212
#[async_backtrace::framed]
212213
#[fastrace::trace]
213-
async fn get_ownerships(&self) -> Result<Vec<SeqV<OwnershipInfo>>, ErrorCode> {
214+
async fn list_ownerships(&self) -> Result<Vec<SeqV<OwnershipInfo>>, ErrorCode> {
214215
let object_owner_prefix = self.ownership_object_prefix();
215216
let values = self
216217
.kv_api
@@ -228,7 +229,7 @@ impl RoleApi for RoleMgr {
228229
// After rollback the old version, deserialize will return Err Ownership can not be none.
229230
// But get ownerships should try to ensure success because in this version.
230231
Err(err) => error!(
231-
"deserialize key {} Got err {} while (get_ownerships)",
232+
"deserialize key {} Got err {} while (list_ownerships)",
232233
&key, err
233234
),
234235
}
@@ -269,11 +270,11 @@ impl RoleApi for RoleMgr {
269270

270271
/// Only drop role will call transfer.
271272
///
272-
/// If a role is dropped, but the owner object is exists,
273+
/// If a role is dropped, but the owner object is existing,
273274
///
274275
/// The owner role need to update to account_admin.
275276
///
276-
/// get_ownerships use prefix_list_kv that will generate once meta call
277+
/// list_ownerships use prefix_list_kv that will generate once meta call
277278
///
278279
/// According to Txn reduce meta call. If role own n objects, will generate once meta call.
279280
#[async_backtrace::framed]
@@ -287,7 +288,7 @@ impl RoleApi for RoleMgr {
287288
trials.next().unwrap().map_err(AppError::from)?.await;
288289
let mut if_then = vec![];
289290
let mut condition = vec![];
290-
let seq_owns = self.get_ownerships().await.map_err(|e| {
291+
let seq_owns = self.list_ownerships().await.map_err(|e| {
291292
e.add_message_back("(while in transfer_ownership_to_admin get ownerships).")
292293
})?;
293294
let mut need_transfer = false;

src/query/service/src/interpreters/access/privilege_access.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,7 @@ impl AccessChecker for PrivilegeAccess {
764764
let user_api = UserApiProvider::instance();
765765
let ownerships = user_api
766766
.role_api(&tenant)
767-
.get_ownerships()
767+
.list_ownerships()
768768
.await?;
769769
let roles = self.ctx.get_all_effective_roles().await?;
770770
let roles_name: Vec<String> = roles.iter().map(|role| role.name.to_string()).collect();
@@ -782,7 +782,7 @@ impl AccessChecker for PrivilegeAccess {
782782
let user_api = UserApiProvider::instance();
783783
let ownerships = user_api
784784
.role_api(&tenant)
785-
.get_ownerships()
785+
.list_ownerships()
786786
.await?;
787787
let roles = self.ctx.get_all_effective_roles().await?;
788788
let roles_name: Vec<String> = roles.iter().map(|role| role.name.to_string()).collect();
@@ -937,7 +937,7 @@ impl AccessChecker for PrivilegeAccess {
937937
let user_api = UserApiProvider::instance();
938938
let ownerships = user_api
939939
.role_api(&tenant)
940-
.get_ownerships()
940+
.list_ownerships()
941941
.await?;
942942
let roles = self.ctx.get_all_effective_roles().await?;
943943
let roles_name: Vec<String> = roles.iter().map(|role| role.name.to_string()).collect();

src/query/service/src/interpreters/interpreter_create_warehouses.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ impl Interpreter for CreateWarehouseInterpreter {
8383
.await?;
8484

8585
if let WarehouseInfo::SystemManaged(sw) = warehouse {
86-
let role_api = UserApiProvider::instance().role_api(&tenant);
8786
if let Some(current_role) = self.ctx.get_current_role() {
87+
let role_api = UserApiProvider::instance().role_api(&tenant);
8888
role_api
8989
.grant_ownership(
9090
&OwnershipObject::Warehouse { id: sw.role_id },
@@ -114,8 +114,8 @@ impl Interpreter for CreateWarehouseInterpreter {
114114
.await?;
115115

116116
if let WarehouseInfo::SystemManaged(sw) = warehouse {
117-
let role_api = UserApiProvider::instance().role_api(&tenant);
118117
if let Some(current_role) = self.ctx.get_current_role() {
118+
let role_api = UserApiProvider::instance().role_api(&tenant);
119119
role_api
120120
.grant_ownership(
121121
&OwnershipObject::Warehouse { id: sw.role_id },

src/query/service/src/interpreters/interpreter_database_create.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ impl Interpreter for CreateDatabaseInterpreter {
7575

7676
// Grant ownership as the current role. The above create_db_req.meta.owner could be removed in
7777
// the future.
78-
let role_api = UserApiProvider::instance().role_api(&tenant);
7978
if let Some(current_role) = self.ctx.get_current_role() {
79+
let role_api = UserApiProvider::instance().role_api(&tenant);
8080
role_api
8181
.grant_ownership(
8282
&OwnershipObject::Database {

src/query/service/src/interpreters/interpreter_drop_warehouses.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ impl Interpreter for DropWarehouseInterpreter {
7272
);
7373

7474
if let WarehouseInfo::SystemManaged(sw) = warehouse {
75-
let role_api = UserApiProvider::instance().role_api(&tenant);
7675
if let Some(current_role) = self.ctx.get_current_role() {
76+
let role_api = UserApiProvider::instance().role_api(&tenant);
7777
role_api
7878
.grant_ownership(
7979
&OwnershipObject::Warehouse { id: sw.role_id },

src/query/service/src/interpreters/interpreter_user_stage_create.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ impl Interpreter for CreateUserStageInterpreter {
121121

122122
// Grant ownership as the current role
123123
let tenant = self.ctx.get_tenant();
124-
let role_api = UserApiProvider::instance().role_api(&tenant);
125124
if let Some(current_role) = self.ctx.get_current_role() {
125+
let role_api = UserApiProvider::instance().role_api(&tenant);
126126
role_api
127127
.grant_ownership(
128128
&OwnershipObject::Stage {

src/query/service/src/sessions/session_privilege_mgr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ impl SessionPrivilegeManager for SessionPrivilegeManagerImpl<'_> {
397397
let user_api = UserApiProvider::instance();
398398
let ownerships = user_api
399399
.role_api(&self.session_ctx.get_current_tenant())
400-
.get_ownerships()
400+
.list_ownerships()
401401
.await?;
402402
let mut ownership_objects = vec![];
403403
for ownership in ownerships {

src/query/service/src/table_functions/show_grants/show_grants_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ async fn show_account_grants(
495495
// 2. not expand roles
496496
// So no need to get ownerships.
497497
if !roles.is_empty() {
498-
let ownerships = user_api.role_api(&tenant).get_ownerships().await?;
498+
let ownerships = user_api.role_api(&tenant).list_ownerships().await?;
499499
for ownership in ownerships {
500500
if roles.contains(&ownership.data.role) {
501501
match ownership.data.object {
@@ -807,7 +807,7 @@ async fn show_object_grant(
807807
}
808808
}
809809

810-
let ownerships = user_api.role_api(&tenant).get_ownerships().await?;
810+
let ownerships = user_api.role_api(&tenant).list_ownerships().await?;
811811
for ownership in ownerships {
812812
if ownership.data.object == owner_object {
813813
privileges.push("OWNERSHIP".to_string());

src/query/storages/system/src/streams_table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ impl<const T: bool> AsyncSystemTable for StreamsTable<T> {
157157
.collect::<Vec<_>>();
158158

159159
let ownership = if T {
160-
user_api.get_ownerships(&tenant).await.unwrap_or_default()
160+
user_api.list_ownerships(&tenant).await.unwrap_or_default()
161161
} else {
162162
HashMap::new()
163163
};

src/query/storages/system/src/tables_table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ where TablesTable<WITH_HISTORY, WITHOUT_VIEW>: HistoryAware
589589
dbs.clear();
590590

591591
let ownership = if get_ownership && default_catalog {
592-
user_api.get_ownerships(&tenant).await.unwrap_or_default()
592+
user_api.list_ownerships(&tenant).await.unwrap_or_default()
593593
} else {
594594
HashMap::new()
595595
};

src/query/users/src/role_mgr.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,13 @@ impl UserApiProvider {
8484
}
8585

8686
#[async_backtrace::framed]
87-
pub async fn get_ownerships(
87+
pub async fn list_ownerships(
8888
&self,
8989
tenant: &Tenant,
9090
) -> Result<HashMap<OwnershipObject, String>> {
9191
let seq_owns = self
9292
.role_api(tenant)
93-
.get_ownerships()
93+
.list_ownerships()
9494
.await
9595
.map_err(|e| e.add_message_back("(while get ownerships)."))?;
9696

@@ -172,7 +172,7 @@ impl UserApiProvider {
172172
if let Some(owner) = ownership {
173173
// if object has ownership, but the owner role is not exists, set owner role to ACCOUNT_ADMIN,
174174
// only account_admin can access this object.
175-
// Note: get_ownerships no need to do this check.
175+
// Note: list_ownerships no need to do this check.
176176
// Because this can cause system.table queries to slow down
177177
// The intention is that the account admin can grant ownership.
178178
// So system.tables will display dropped role. It's by design.

src/query/users/src/user_api.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ use databend_common_management::PasswordPolicyMgr;
2828
use databend_common_management::ProcedureMgr;
2929
use databend_common_management::QuotaApi;
3030
use databend_common_management::QuotaMgr;
31-
use databend_common_management::RoleApi;
3231
use databend_common_management::RoleMgr;
3332
use databend_common_management::SettingMgr;
3433
use databend_common_management::StageApi;
@@ -45,6 +44,7 @@ use databend_common_meta_store::MetaStore;
4544
use databend_common_meta_store::MetaStoreProvider;
4645
use databend_common_meta_types::MatchSeq;
4746
use databend_common_meta_types::MetaError;
47+
use log::debug;
4848

4949
use crate::builtin::BuiltIn;
5050
use crate::BUILTIN_ROLE_PUBLIC;
@@ -65,6 +65,7 @@ impl UserApiProvider {
6565
) -> Result<()> {
6666
GlobalInstance::set(Self::try_create(conf, builtin, tenant).await?);
6767
let user_mgr = UserApiProvider::instance();
68+
6869
if let Some(q) = quota {
6970
let i = user_mgr.tenant_quota_api(tenant);
7071
let res = i.get_quota(MatchSeq::GE(0)).await?;
@@ -125,13 +126,14 @@ impl UserApiProvider {
125126
Arc::new(user_mgr)
126127
}
127128

128-
pub fn role_api(&self, tenant: &Tenant) -> Arc<impl RoleApi> {
129+
pub fn role_api(&self, tenant: &Tenant) -> RoleMgr {
129130
let role_mgr = RoleMgr::create(
130131
self.client.clone(),
131132
tenant,
132133
GlobalConfig::instance().query.upgrade_to_pb,
133134
);
134-
Arc::new(role_mgr)
135+
debug!("RoleMgr created");
136+
role_mgr
135137
}
136138

137139
pub fn stage_api(&self, tenant: &Tenant) -> Arc<dyn StageApi> {

0 commit comments

Comments
 (0)