mirror of https://github.com/citusdata/citus.git
Fixes review notes
parent
557dd71133
commit
f3427932ed
|
@ -278,8 +278,8 @@ static DistributeObjectOps Any_CreateRole = {
|
||||||
static DistributeObjectOps Any_ReassignOwned = {
|
static DistributeObjectOps Any_ReassignOwned = {
|
||||||
.deparse = DeparseReassignOwnedStmt,
|
.deparse = DeparseReassignOwnedStmt,
|
||||||
.qualify = NULL,
|
.qualify = NULL,
|
||||||
.preprocess = PreprocessReassignOwnedStmt,
|
.preprocess = NULL,
|
||||||
.postprocess = NULL,
|
.postprocess = PostprocessReassignOwnedStmt,
|
||||||
.operationType = DIST_OPS_DROP,
|
.operationType = DIST_OPS_DROP,
|
||||||
.address = NULL,
|
.address = NULL,
|
||||||
.markDistributed = false,
|
.markDistributed = false,
|
||||||
|
|
|
@ -90,9 +90,25 @@ PreprocessDropOwnedStmt(Node *node, const char *queryString,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Post-processes a REASSIGN OWNED statement.
|
||||||
|
*
|
||||||
|
* This function takes a Node pointer representing a REASSIGN OWNED statement,
|
||||||
|
* and performs any necessary post-processing after the statement has been executed.
|
||||||
|
* In this method, we propagate all the roles that are being reassigned.
|
||||||
|
* Therefore, we don't filter the roles based on whether they are distributed or not.
|
||||||
|
* If roles are not distributed and those roles are not present in the nodes
|
||||||
|
* where the statement is being propagated, then the statement will fail.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* stmt: A pointer to a Node representing a REASSIGN OWNED statement.
|
||||||
|
* queryString: The original SQL command string from the client.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* List of SQL statements to be executed.
|
||||||
|
*/
|
||||||
List *
|
List *
|
||||||
PreprocessReassignOwnedStmt(Node *node, const char *queryString,
|
PostprocessReassignOwnedStmt(Node *node, const char *queryString)
|
||||||
ProcessUtilityContext processUtilityContext)
|
|
||||||
{
|
{
|
||||||
ReassignOwnedStmt *stmt = castNode(ReassignOwnedStmt, node);
|
ReassignOwnedStmt *stmt = castNode(ReassignOwnedStmt, node);
|
||||||
List *allReassignRoles = stmt->roles;
|
List *allReassignRoles = stmt->roles;
|
||||||
|
|
|
@ -427,8 +427,7 @@ extern List * CreateExtensionStmtObjectAddress(Node *stmt, bool missing_ok, bool
|
||||||
/* owned.c - forward declarations */
|
/* owned.c - forward declarations */
|
||||||
extern List * PreprocessDropOwnedStmt(Node *node, const char *queryString,
|
extern List * PreprocessDropOwnedStmt(Node *node, const char *queryString,
|
||||||
ProcessUtilityContext processUtilityContext);
|
ProcessUtilityContext processUtilityContext);
|
||||||
extern List * PreprocessReassignOwnedStmt(Node *node, const char *queryString,
|
extern List * PostprocessReassignOwnedStmt(Node *node, const char *queryString);
|
||||||
ProcessUtilityContext processUtilityContext);
|
|
||||||
|
|
||||||
/* policy.c - forward declarations */
|
/* policy.c - forward declarations */
|
||||||
extern List * CreatePolicyCommands(Oid relationId);
|
extern List * CreatePolicyCommands(Oid relationId);
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
CREATE ROLE role1;
|
CREATE ROLE role1;
|
||||||
CREATE ROLE role2;
|
create ROLE role2;
|
||||||
GRANT CREATE ON SCHEMA public TO role1;
|
CREATE ROLE role3;
|
||||||
|
GRANT CREATE ON SCHEMA public TO role1,role2;
|
||||||
SET ROLE role1;
|
SET ROLE role1;
|
||||||
CREATE TABLE public.test_table (col1 int);
|
CREATE TABLE public.test_table (col1 int);
|
||||||
|
set role role2;
|
||||||
|
CREATE TABLE public.test_table2 (col2 int);
|
||||||
RESET ROLE;
|
RESET ROLE;
|
||||||
select create_distributed_table('test_table', 'col1');
|
select create_distributed_table('test_table', 'col1');
|
||||||
create_distributed_table
|
create_distributed_table
|
||||||
|
@ -10,6 +13,12 @@ select create_distributed_table('test_table', 'col1');
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
select create_distributed_table('test_table2', 'col2');
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
SELECT result from run_command_on_all_nodes(
|
SELECT result from run_command_on_all_nodes(
|
||||||
$$
|
$$
|
||||||
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
SELECT jsonb_agg(to_jsonb(q2.*)) FROM (
|
||||||
|
@ -20,23 +29,23 @@ SELECT result from run_command_on_all_nodes(
|
||||||
FROM
|
FROM
|
||||||
pg_tables
|
pg_tables
|
||||||
WHERE
|
WHERE
|
||||||
tablename = 'test_table'
|
tablename in ('test_table', 'test_table2')
|
||||||
) q2
|
) q2
|
||||||
$$
|
$$
|
||||||
) ORDER BY result;
|
) ORDER BY result;
|
||||||
result
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role1"}]
|
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role1"}, {"tablename": "test_table2", "schemaname": "public", "tableowner": "role2"}]
|
||||||
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role1"}]
|
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role1"}, {"tablename": "test_table2", "schemaname": "public", "tableowner": "role2"}]
|
||||||
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role1"}]
|
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role1"}, {"tablename": "test_table2", "schemaname": "public", "tableowner": "role2"}]
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
set citus.log_remote_commands to on;
|
set citus.log_remote_commands to on;
|
||||||
set citus.grep_remote_commands = '%REASSIGN OWNED BY%';
|
set citus.grep_remote_commands = '%REASSIGN OWNED BY%';
|
||||||
REASSIGN OWNED BY role1 TO role2;
|
REASSIGN OWNED BY role1,role2 TO role3;
|
||||||
NOTICE: issuing REASSIGN OWNED BY role1 TO role2
|
NOTICE: issuing REASSIGN OWNED BY role1, role2 TO role3
|
||||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||||
NOTICE: issuing REASSIGN OWNED BY role1 TO role2
|
NOTICE: issuing REASSIGN OWNED BY role1, role2 TO role3
|
||||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||||
SET citus.log_remote_commands = false;
|
SET citus.log_remote_commands = false;
|
||||||
SELECT result from run_command_on_all_nodes(
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
@ -49,19 +58,20 @@ SELECT result from run_command_on_all_nodes(
|
||||||
FROM
|
FROM
|
||||||
pg_tables
|
pg_tables
|
||||||
WHERE
|
WHERE
|
||||||
tablename = 'test_table'
|
tablename in ('test_table', 'test_table2')
|
||||||
) q2
|
) q2
|
||||||
$$
|
$$
|
||||||
) ORDER BY result;
|
) ORDER BY result;
|
||||||
result
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role2"}]
|
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role3"}, {"tablename": "test_table2", "schemaname": "public", "tableowner": "role3"}]
|
||||||
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role2"}]
|
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role3"}, {"tablename": "test_table2", "schemaname": "public", "tableowner": "role3"}]
|
||||||
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role2"}]
|
[{"tablename": "test_table", "schemaname": "public", "tableowner": "role3"}, {"tablename": "test_table2", "schemaname": "public", "tableowner": "role3"}]
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
|
--clear resources
|
||||||
SET citus.log_remote_commands = true;
|
SET citus.log_remote_commands = true;
|
||||||
DROP OWNED BY role1, role2;
|
DROP OWNED BY role1, role2,role3;
|
||||||
SET citus.log_remote_commands = false;
|
SET citus.log_remote_commands = false;
|
||||||
SELECT result from run_command_on_all_nodes(
|
SELECT result from run_command_on_all_nodes(
|
||||||
$$
|
$$
|
||||||
|
@ -73,7 +83,7 @@ SELECT result from run_command_on_all_nodes(
|
||||||
FROM
|
FROM
|
||||||
pg_tables
|
pg_tables
|
||||||
WHERE
|
WHERE
|
||||||
tablename = 'test_table'
|
tablename in ('test_table', 'test_table2')
|
||||||
) q2
|
) q2
|
||||||
$$
|
$$
|
||||||
) ORDER BY result;
|
) ORDER BY result;
|
||||||
|
@ -86,8 +96,8 @@ WHERE
|
||||||
|
|
||||||
SET citus.log_remote_commands = true;
|
SET citus.log_remote_commands = true;
|
||||||
set citus.grep_remote_commands = '%DROP ROLE%';
|
set citus.grep_remote_commands = '%DROP ROLE%';
|
||||||
drop role role1, role2 ;
|
drop role role1, role2,role3 ;
|
||||||
NOTICE: issuing DROP ROLE role1, role2
|
NOTICE: issuing DROP ROLE role1, role2, role3
|
||||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||||
NOTICE: issuing DROP ROLE role1, role2
|
NOTICE: issuing DROP ROLE role1, role2, role3
|
||||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
|
@ -56,7 +56,7 @@ test: grant_on_database_propagation
|
||||||
test: alter_database_propagation
|
test: alter_database_propagation
|
||||||
|
|
||||||
test: citus_shards
|
test: citus_shards
|
||||||
test: reassure_owned
|
test: reassign_owned
|
||||||
|
|
||||||
# ----------
|
# ----------
|
||||||
# multi_citus_tools tests utility functions written for citus tools
|
# multi_citus_tools tests utility functions written for citus tools
|
||||||
|
|
|
@ -1,12 +1,19 @@
|
||||||
CREATE ROLE role1;
|
CREATE ROLE role1;
|
||||||
CREATE ROLE role2;
|
|
||||||
|
|
||||||
GRANT CREATE ON SCHEMA public TO role1;
|
create ROLE role2;
|
||||||
|
CREATE ROLE role3;
|
||||||
|
|
||||||
|
GRANT CREATE ON SCHEMA public TO role1,role2;
|
||||||
|
|
||||||
SET ROLE role1;
|
SET ROLE role1;
|
||||||
CREATE TABLE public.test_table (col1 int);
|
CREATE TABLE public.test_table (col1 int);
|
||||||
|
|
||||||
|
set role role2;
|
||||||
|
CREATE TABLE public.test_table2 (col2 int);
|
||||||
RESET ROLE;
|
RESET ROLE;
|
||||||
select create_distributed_table('test_table', 'col1');
|
select create_distributed_table('test_table', 'col1');
|
||||||
|
select create_distributed_table('test_table2', 'col2');
|
||||||
|
|
||||||
|
|
||||||
SELECT result from run_command_on_all_nodes(
|
SELECT result from run_command_on_all_nodes(
|
||||||
$$
|
$$
|
||||||
|
@ -18,14 +25,14 @@ SELECT result from run_command_on_all_nodes(
|
||||||
FROM
|
FROM
|
||||||
pg_tables
|
pg_tables
|
||||||
WHERE
|
WHERE
|
||||||
tablename = 'test_table'
|
tablename in ('test_table', 'test_table2')
|
||||||
) q2
|
) q2
|
||||||
$$
|
$$
|
||||||
) ORDER BY result;
|
) ORDER BY result;
|
||||||
|
|
||||||
set citus.log_remote_commands to on;
|
set citus.log_remote_commands to on;
|
||||||
set citus.grep_remote_commands = '%REASSIGN OWNED BY%';
|
set citus.grep_remote_commands = '%REASSIGN OWNED BY%';
|
||||||
REASSIGN OWNED BY role1 TO role2;
|
REASSIGN OWNED BY role1,role2 TO role3;
|
||||||
|
|
||||||
|
|
||||||
SET citus.log_remote_commands = false;
|
SET citus.log_remote_commands = false;
|
||||||
|
@ -39,15 +46,15 @@ SELECT result from run_command_on_all_nodes(
|
||||||
FROM
|
FROM
|
||||||
pg_tables
|
pg_tables
|
||||||
WHERE
|
WHERE
|
||||||
tablename = 'test_table'
|
tablename in ('test_table', 'test_table2')
|
||||||
) q2
|
) q2
|
||||||
$$
|
$$
|
||||||
) ORDER BY result;
|
) ORDER BY result;
|
||||||
|
|
||||||
|
|
||||||
|
--clear resources
|
||||||
SET citus.log_remote_commands = true;
|
SET citus.log_remote_commands = true;
|
||||||
DROP OWNED BY role1, role2;
|
DROP OWNED BY role1, role2,role3;
|
||||||
|
|
||||||
SET citus.log_remote_commands = false;
|
SET citus.log_remote_commands = false;
|
||||||
SELECT result from run_command_on_all_nodes(
|
SELECT result from run_command_on_all_nodes(
|
||||||
|
@ -60,11 +67,13 @@ SELECT result from run_command_on_all_nodes(
|
||||||
FROM
|
FROM
|
||||||
pg_tables
|
pg_tables
|
||||||
WHERE
|
WHERE
|
||||||
tablename = 'test_table'
|
tablename in ('test_table', 'test_table2')
|
||||||
) q2
|
) q2
|
||||||
$$
|
$$
|
||||||
) ORDER BY result;
|
) ORDER BY result;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SET citus.log_remote_commands = true;
|
SET citus.log_remote_commands = true;
|
||||||
set citus.grep_remote_commands = '%DROP ROLE%';
|
set citus.grep_remote_commands = '%DROP ROLE%';
|
||||||
drop role role1, role2 ;
|
drop role role1, role2,role3 ;
|
Loading…
Reference in New Issue