Skip to content

Commit c3c40a2

Browse files
authored
refactor: use NonEmptyString to access UDFMgr. (#14844)
* refactor: use NonEmptyString to access UDFMgr. No need to return TenantIsEmpty error anymore * fixup: tolerate time diff in timeout test
1 parent dbe6830 commit c3c40a2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+252
-248
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/bendpy/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ databend-common-expression = { path = "../query/expression" }
2525
databend-common-license = { path = "../common/license" }
2626
databend-common-meta-app = { path = "../meta/app" }
2727
databend-common-meta-embedded = { path = "../meta/embedded" }
28+
databend-common-meta-types = { path = "../meta/types" }
2829
databend-common-users = { path = "../query/users" }
2930
databend-query = { path = "../query/service", features = [
3031
"simd",

src/bendpy/src/context.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use databend_common_exception::Result;
1919
use databend_common_meta_app::principal::GrantObject;
2020
use databend_common_meta_app::principal::UserInfo;
2121
use databend_common_meta_app::principal::UserPrivilegeSet;
22+
use databend_common_meta_types::NonEmptyString;
2223
use databend_common_users::UserApiProvider;
2324
use databend_query::sessions::QueryContext;
2425
use databend_query::sessions::Session;
@@ -55,12 +56,14 @@ impl PySessionContext {
5556
uuid::Uuid::new_v4().to_string()
5657
};
5758

59+
let tenant = NonEmptyString::new(tenant).unwrap();
60+
5861
let config = GlobalConfig::instance();
5962
UserApiProvider::try_create_simple(config.meta.to_meta_grpc_client_conf(), &tenant)
6063
.await
6164
.unwrap();
6265

63-
session.set_current_tenant(tenant.to_owned());
66+
session.set_current_tenant(tenant.to_string());
6467

6568
let mut user = UserInfo::new_no_auth("root", "%");
6669
user.grants.grant_privileges(

src/meta/kvapi/src/kvapi/test_suite.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,9 @@ impl kvapi::TestSuite {
305305
assert_eq!(v2.seq, 3);
306306
assert_eq!(v2.data, b("v2"));
307307
let v2_meta = v2.meta.unwrap();
308-
assert_eq!(v2_meta.get_expire_at_ms().unwrap() / 1000, now_sec + 10);
308+
let expire_at_sec = v2_meta.get_expire_at_ms().unwrap() / 1000;
309+
let want = now_sec + 10;
310+
assert!((want..want + 2).contains(&expire_at_sec));
309311
}
310312
}
311313

src/query/service/src/global_services.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ impl GlobalServices {
103103
UserApiProvider::init(
104104
config.meta.to_meta_grpc_client_conf(),
105105
config.query.idm.clone(),
106-
config.query.tenant_id.as_str(),
106+
&config.query.tenant_id,
107107
config.query.tenant_quota.clone(),
108108
)
109109
.await?;

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use databend_common_meta_app::principal::StageType;
2626
use databend_common_meta_app::principal::UserGrantSet;
2727
use databend_common_meta_app::principal::UserPrivilegeSet;
2828
use databend_common_meta_app::principal::UserPrivilegeType;
29+
use databend_common_meta_types::NonEmptyString;
2930
use databend_common_sql::optimizer::get_udf_names;
3031
use databend_common_sql::plans::InsertInputSource;
3132
use databend_common_sql::plans::PresignAction;
@@ -507,7 +508,7 @@ impl AccessChecker for PrivilegeAccess {
507508
ObjectId::Table(db_id, table_id) => { (db_id, Some(table_id)) }
508509
ObjectId::Database(db_id) => { (db_id, None) }
509510
};
510-
let has_priv = has_priv(tenant.as_str(), database, None, db_id, table_id, grant_set).await?;
511+
let has_priv = has_priv(&tenant, database, None, db_id, table_id, grant_set).await?;
511512
return if has_priv {
512513
Ok(())
513514
} else {
@@ -526,7 +527,7 @@ impl AccessChecker for PrivilegeAccess {
526527
ObjectId::Table(db_id, table_id) => { (db_id, Some(table_id)) }
527528
ObjectId::Database(db_id) => { (db_id, None) }
528529
};
529-
let has_priv = has_priv(tenant.as_str(), database, None, db_id, table_id, grant_set).await?;
530+
let has_priv = has_priv(&tenant, database, None, db_id, table_id, grant_set).await?;
530531
return if has_priv {
531532
Ok(())
532533
} else {
@@ -545,7 +546,7 @@ impl AccessChecker for PrivilegeAccess {
545546
ObjectId::Table(db_id, table_id) => { (db_id, Some(table_id)) }
546547
ObjectId::Database(db_id) => { (db_id, None) }
547548
};
548-
let has_priv = has_priv(tenant.as_str(), database, Some(table), db_id, table_id, grant_set).await?;
549+
let has_priv = has_priv(&tenant, database, Some(table), db_id, table_id, grant_set).await?;
549550
return if has_priv {
550551
Ok(())
551552
} else {
@@ -628,7 +629,7 @@ impl AccessChecker for PrivilegeAccess {
628629
ObjectId::Table(db_id, table_id) => { (db_id, Some(table_id)) }
629630
ObjectId::Database(db_id) => { (db_id, None) }
630631
};
631-
let has_priv = has_priv(tenant.as_str(), &plan.database, None, db_id, None, grant_set).await?;
632+
let has_priv = has_priv(&tenant, &plan.database, None, db_id, None, grant_set).await?;
632633

633634
return if has_priv {
634635
Ok(())
@@ -1002,7 +1003,7 @@ impl AccessChecker for PrivilegeAccess {
10021003

10031004
// TODO(liyz): replace it with verify_access
10041005
async fn has_priv(
1005-
tenant: &str,
1006+
tenant: &NonEmptyString,
10061007
db_name: &str,
10071008
table_name: Option<&str>,
10081009
db_id: u64,

src/query/service/src/interpreters/common/grant.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,7 @@ pub async fn validate_grant_object_exists(
8080
}
8181
}
8282
GrantObject::UDF(udf) => {
83-
if !UserApiProvider::instance()
84-
.exists_udf(tenant.as_str(), udf)
85-
.await?
86-
{
83+
if !UserApiProvider::instance().exists_udf(&tenant, udf).await? {
8784
return Err(databend_common_exception::ErrorCode::UnknownStage(format!(
8885
"udf {udf} not exists"
8986
)));

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ impl Interpreter for CreateDatabaseInterpreter {
112112
let quota_api = UserApiProvider::instance().get_tenant_quota_api_client(&tenant)?;
113113
let quota = quota_api.get_quota(MatchSeq::GE(0)).await?.data;
114114
let catalog = self.ctx.get_catalog(&self.plan.catalog).await?;
115-
let databases = catalog.list_databases(&tenant).await?;
115+
let databases = catalog.list_databases(tenant.as_str()).await?;
116116
if quota.max_databases != 0 && databases.len() >= quota.max_databases as usize {
117117
return Err(ErrorCode::TenantQuotaExceeded(format!(
118118
"Max databases quota exceeded {}",
@@ -121,7 +121,7 @@ impl Interpreter for CreateDatabaseInterpreter {
121121
};
122122
// if create from other tenant, check from share endpoint
123123
if let Some(ref share_name) = self.plan.meta.from_share {
124-
self.check_create_database_from_share(&tenant, share_name)
124+
self.check_create_database_from_share(&tenant.to_string(), share_name)
125125
.await?;
126126
}
127127

@@ -130,7 +130,7 @@ impl Interpreter for CreateDatabaseInterpreter {
130130

131131
// Grant ownership as the current role. The above create_db_req.meta.owner could be removed in
132132
// the future.
133-
let role_api = UserApiProvider::instance().get_role_api_client(&tenant)?;
133+
let role_api = UserApiProvider::instance().role_api(&tenant);
134134
if let Some(current_role) = self.ctx.get_current_role() {
135135
role_api
136136
.grant_ownership(

src/query/service/src/interpreters/interpreter_database_drop.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ impl Interpreter for DropDatabaseInterpreter {
5858
.get_database(tenant.as_str(), &self.plan.database)
5959
.await;
6060
if let Ok(db) = db {
61-
let role_api = UserApiProvider::instance().get_role_api_client(tenant.as_str())?;
61+
let role_api = UserApiProvider::instance().role_api(&tenant);
6262
let owner_object = OwnershipObject::Database {
6363
catalog_name: self.plan.catalog.clone(),
6464
db_id: db.get_db_info().ident.db_id,
6565
};
6666

6767
role_api.revoke_ownership(&owner_object).await?;
68-
RoleCacheManager::instance().invalidate_cache(tenant.as_str());
68+
RoleCacheManager::instance().invalidate_cache(&tenant);
6969
}
7070

7171
// actual drop database

src/query/service/src/interpreters/interpreter_privilege_grant.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use databend_common_meta_app::principal::OwnershipObject;
2121
use databend_common_meta_app::principal::PrincipalIdentity;
2222
use databend_common_meta_app::principal::UserPrivilegeSet;
2323
use databend_common_meta_app::principal::UserPrivilegeType::Ownership;
24+
use databend_common_meta_types::NonEmptyString;
2425
use databend_common_sql::plans::GrantPrivilegePlan;
2526
use databend_common_users::RoleCacheManager;
2627
use databend_common_users::UserApiProvider;
@@ -111,7 +112,7 @@ impl GrantPrivilegeInterpreter {
111112
async fn grant_ownership(
112113
&self,
113114
ctx: &Arc<QueryContext>,
114-
tenant: &str,
115+
tenant: &NonEmptyString,
115116
owner_object: &OwnershipObject,
116117
new_role: &str,
117118
) -> Result<()> {
@@ -199,7 +200,7 @@ impl Interpreter for GrantPrivilegeInterpreter {
199200
.convert_to_ownerobject(tenant.as_str(), &plan.on, plan.on.catalog())
200201
.await?;
201202
if self.ctx.get_current_role().is_some() {
202-
self.grant_ownership(&self.ctx, tenant.as_str(), &owner_object, &role)
203+
self.grant_ownership(&self.ctx, &tenant, &owner_object, &role)
203204
.await?;
204205
} else {
205206
return Err(databend_common_exception::ErrorCode::UnknownRole(
@@ -208,9 +209,9 @@ impl Interpreter for GrantPrivilegeInterpreter {
208209
}
209210
} else {
210211
user_mgr
211-
.grant_privileges_to_role(tenant.as_str(), &role, plan.on, plan.priv_types)
212+
.grant_privileges_to_role(&tenant, &role, plan.on, plan.priv_types)
212213
.await?;
213-
RoleCacheManager::instance().invalidate_cache(tenant.as_str());
214+
RoleCacheManager::instance().invalidate_cache(&tenant);
214215
}
215216
}
216217
}

0 commit comments

Comments
 (0)