From 7a6170812665cb6d5308b70869220747708ed187 Mon Sep 17 00:00:00 2001 From: ZuoTiJia <2239651886@qq.com> Date: Thu, 3 Aug 2023 17:46:55 +0800 Subject: [PATCH] fix: allow modify usage_schema database * ci: reduce sleep time --- query_server/query/src/metadata/mod.rs | 17 +++++-- .../usage_schema/usage_schema_privilege.slt | 14 ++++++ .../sys_table/usage_schema/coord_data_in.sql | 2 +- .../sys_table/usage_schema/coord_data_out.sql | 2 +- .../usage_schema_privilege.result | 45 +++++++++++++++++++ .../usage_schema/usage_schema_privilege.sql | 24 ++++++++++ .../sys_table/usage_schema/user_queries.sql | 2 +- .../sys_table/usage_schema/user_writes.sql | 2 +- .../usage_schema/vnode_cache_size.sql | 2 +- .../usage_schema/vnode_disk_storage.sql | 2 +- 10 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 query_server/sqllogicaltests/cases/sys_table/usage_schema/usage_schema_privilege.slt create mode 100644 query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.result create mode 100644 query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.sql diff --git a/query_server/query/src/metadata/mod.rs b/query_server/query/src/metadata/mod.rs index 6e3d2283b..a3d33cfe7 100644 --- a/query_server/query/src/metadata/mod.rs +++ b/query_server/query/src/metadata/mod.rs @@ -121,7 +121,15 @@ impl MetadataProvider { } // process USAGE_SCHEMA - if database_name.eq_ignore_ascii_case(self.usage_schema_provider.name()) { + // usage_schema records usage information. + // Under the cnosdb tenant, the table in usage_schema + // corresponds to the actual kv table, + // and any operation can be performed with permission. + // Under other tenants, the usage_schema table is + // a view of the kv table and can only be queried. + if !tenant_name.eq(DEFAULT_CATALOG) + && database_name.eq_ignore_ascii_case(self.usage_schema_provider.name()) + { let table_provider = self .usage_schema_provider .table(&self.session, table_name) @@ -183,9 +191,10 @@ impl ContextProviderExtension for MetadataProvider { } fn reset_access_databases(&self) -> DatabaseSet { - let result = self.access_databases.read().clone(); - self.access_databases.write().reset(); - result + let mut access_databases = self.access_databases.write(); + let res = access_databases.clone(); + access_databases.reset(); + res } fn get_db_precision(&self, name: &str) -> Result { diff --git a/query_server/sqllogicaltests/cases/sys_table/usage_schema/usage_schema_privilege.slt b/query_server/sqllogicaltests/cases/sys_table/usage_schema/usage_schema_privilege.slt new file mode 100644 index 000000000..5f32f7ddd --- /dev/null +++ b/query_server/sqllogicaltests/cases/sys_table/usage_schema/usage_schema_privilege.slt @@ -0,0 +1,14 @@ +statement ok +create table usage_schema.test_privilege (a bigint); + +statement ok +insert into table usage_schema.test_privilege (time, a) +values (1, 1); + +query T +select * from usage_schema.test_privilege; +---- +1970-01-01T00:00:00.000000001 1 + +statement ok +drop table usage_schema.test_privilege; diff --git a/query_server/test/cases/sys_table/usage_schema/coord_data_in.sql b/query_server/test/cases/sys_table/usage_schema/coord_data_in.sql index 3ddb2c9cc..7debb15cf 100644 --- a/query_server/test/cases/sys_table/usage_schema/coord_data_in.sql +++ b/query_server/test/cases/sys_table/usage_schema/coord_data_in.sql @@ -1,5 +1,5 @@ --#DATABASE = usage_schema ---#SLEEP = 10000 +--#SLEEP = 100 DESCRIBE DATABASE usage_schema; DESCRIBE TABLE coord_data_in; diff --git a/query_server/test/cases/sys_table/usage_schema/coord_data_out.sql b/query_server/test/cases/sys_table/usage_schema/coord_data_out.sql index 524d29b82..893cc3d7b 100644 --- a/query_server/test/cases/sys_table/usage_schema/coord_data_out.sql +++ b/query_server/test/cases/sys_table/usage_schema/coord_data_out.sql @@ -1,5 +1,5 @@ --#DATABASE = usage_schema ---#SLEEP = 10000 +--#SLEEP = 100 DESCRIBE DATABASE usage_schema; DESCRIBE TABLE coord_data_out; diff --git a/query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.result b/query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.result new file mode 100644 index 000000000..344221d0d --- /dev/null +++ b/query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.result @@ -0,0 +1,45 @@ +-- EXECUTE SQL: create user test_usage_schema_user; -- +200 OK + + +-- EXECUTE SQL: create role write_usage_schema_role inherit member; -- +200 OK + + +-- EXECUTE SQL: grant write on database usage_schema to role write_usage_schema_role; -- +200 OK + + +-- EXECUTE SQL: alter tenant cnosdb add user test_usage_schema_user as write_usage_schema_role; -- +200 OK + + +-- EXECUTE SQL: create table usage_schema.test_privilege (a bigint); -- +200 OK + + +-- EXECUTE SQL: insert into usage_schema.test_privilege (time, a) values (1, 1); -- +200 OK +rows +1 + +-- EXECUTE SQL: drop table usage_schema.test_privilege; -- +200 OK + + +-- EXECUTE SQL: alter tenant cnosdb remove user test_usage_schema_user; -- +200 OK + + +-- EXECUTE SQL: drop role write_usage_schema_role; -- +200 OK + + +-- EXECUTE SQL: drop user test_usage_schema_user; -- +200 OK + + +-- EXECUTE SQL: insert into usage_schema.coord_data_in (time, database, tenant, value) values (1, 'invalid', 'invalid', 1); -- +200 OK +rows +1 diff --git a/query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.sql b/query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.sql new file mode 100644 index 000000000..df009eae0 --- /dev/null +++ b/query_server/test/cases/sys_table/usage_schema/usage_schema_privilege.sql @@ -0,0 +1,24 @@ +create user test_usage_schema_user; + +create role write_usage_schema_role inherit member; + +grant write on database usage_schema to role write_usage_schema_role; + +alter tenant cnosdb add user test_usage_schema_user as write_usage_schema_role; + +create table usage_schema.test_privilege (a bigint); + +--#USER_NAME=test_usage_schema_user +insert into usage_schema.test_privilege (time, a) values (1, 1); + +--#USER_NAME=root +drop table usage_schema.test_privilege; + +alter tenant cnosdb remove user test_usage_schema_user; + +drop role write_usage_schema_role; + +drop user test_usage_schema_user; + +insert into usage_schema.coord_data_in (time, database, tenant, value) values (1, 'invalid', 'invalid', 1); + diff --git a/query_server/test/cases/sys_table/usage_schema/user_queries.sql b/query_server/test/cases/sys_table/usage_schema/user_queries.sql index ad4680e50..5ba208579 100644 --- a/query_server/test/cases/sys_table/usage_schema/user_queries.sql +++ b/query_server/test/cases/sys_table/usage_schema/user_queries.sql @@ -1,5 +1,5 @@ --#DATABASE = usage_schema ---#SLEEP = 10000 +--#SLEEP = 100 DESCRIBE DATABASE usage_schema; DESCRIBE TABLE user_queries; diff --git a/query_server/test/cases/sys_table/usage_schema/user_writes.sql b/query_server/test/cases/sys_table/usage_schema/user_writes.sql index 088038caa..fb6d22943 100644 --- a/query_server/test/cases/sys_table/usage_schema/user_writes.sql +++ b/query_server/test/cases/sys_table/usage_schema/user_writes.sql @@ -1,5 +1,5 @@ --#DATABASE = usage_schema ---#SLEEP = 10000 +--#SLEEP = 100 DESCRIBE DATABASE usage_schema; DESCRIBE TABLE user_writes; diff --git a/query_server/test/cases/sys_table/usage_schema/vnode_cache_size.sql b/query_server/test/cases/sys_table/usage_schema/vnode_cache_size.sql index 32e699dd3..83e5a1ceb 100644 --- a/query_server/test/cases/sys_table/usage_schema/vnode_cache_size.sql +++ b/query_server/test/cases/sys_table/usage_schema/vnode_cache_size.sql @@ -1,5 +1,5 @@ --#DATABASE = usage_schema ---#SLEEP = 10000 +--#SLEEP = 100 DESCRIBE DATABASE usage_schema; DESCRIBE TABLE vnode_cache_size; diff --git a/query_server/test/cases/sys_table/usage_schema/vnode_disk_storage.sql b/query_server/test/cases/sys_table/usage_schema/vnode_disk_storage.sql index 602ceb29d..bda4c6d03 100644 --- a/query_server/test/cases/sys_table/usage_schema/vnode_disk_storage.sql +++ b/query_server/test/cases/sys_table/usage_schema/vnode_disk_storage.sql @@ -1,5 +1,5 @@ --#DATABASE = usage_schema ---#SLEEP = 10000 +--#SLEEP = 100 DESCRIBE DATABASE usage_schema; DESCRIBE TABLE vnode_disk_storage;