Fixes from any node issues

pull/7563/head
gurkanindibay 2024-03-29 13:02:30 +03:00
parent 48fdee016a
commit ccac41b711
4 changed files with 81 additions and 18 deletions

View File

@ -293,14 +293,9 @@ PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
/* Since ALTER DATABASE SET TABLESPACE statement is not supported */
/* inside a transaction block, we need to send the command to the */
/* main database directly to make it work */
if (!IsSetTablespaceStatement(stmt))
{
EnsureCoordinator();
}
EnsurePropagationToCoordinator();
EnsureAllObjectDependenciesExistOnAllNodes(list_make1(dbAddress));
SerializeDistributedDDLsOnObjectClassObject(OCLASS_DATABASE, stmt->dbname); SerializeDistributedDDLsOnObjectClassObject(OCLASS_DATABASE, stmt->dbname);
char *sql = DeparseTreeNode((Node *) stmt); char *sql = DeparseTreeNode((Node *) stmt);
@ -317,12 +312,12 @@ PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
* the transaction block. * the transaction block.
*/ */
bool warnForPartialFailure = true; bool warnForPartialFailure = true;
return NontransactionalNodeDDLTaskList(NON_COORDINATOR_NODES, commands, return NontransactionalNodeDDLTaskList(REMOTE_NODES, commands,
warnForPartialFailure); warnForPartialFailure);
} }
else else
{ {
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(REMOTE_NODES, commands);
} }
} }
@ -353,7 +348,9 @@ PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
EnsureCoordinator(); EnsurePropagationToCoordinator();
EnsureAllObjectDependenciesExistOnAllNodes(list_make1(dbAddress));
SerializeDistributedDDLsOnObjectClassObject(OCLASS_DATABASE, stmt->dbname); SerializeDistributedDDLsOnObjectClassObject(OCLASS_DATABASE, stmt->dbname);
char *sql = DeparseTreeNode((Node *) stmt); char *sql = DeparseTreeNode((Node *) stmt);
@ -362,7 +359,7 @@ PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
(void *) sql, (void *) sql,
ENABLE_DDL_PROPAGATION); ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(REMOTE_NODES, commands);
} }
@ -395,7 +392,8 @@ PreprocessAlterDatabaseRenameStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
EnsureCoordinator(); EnsurePropagationToCoordinator();
EnsureAllObjectDependenciesExistOnAllNodes(list_make1(dbAddress));
/* /*
* Different than other ALTER DATABASE commands, we first acquire a lock * Different than other ALTER DATABASE commands, we first acquire a lock
@ -429,7 +427,8 @@ PostprocessAlterDatabaseRenameStmt(Node *node, const char *queryString)
return NIL; return NIL;
} }
EnsureCoordinator(); EnsurePropagationToCoordinator();
EnsureAllObjectDependenciesExistOnAllNodes(list_make1(dbAddress));
char *sql = DeparseTreeNode((Node *) stmt); char *sql = DeparseTreeNode((Node *) stmt);
@ -437,7 +436,7 @@ PostprocessAlterDatabaseRenameStmt(Node *node, const char *queryString)
(void *) sql, (void *) sql,
ENABLE_DDL_PROPAGATION); ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(REMOTE_NODES, commands);
} }
@ -465,7 +464,8 @@ PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
EnsureCoordinator(); EnsurePropagationToCoordinator();
EnsureAllObjectDependenciesExistOnAllNodes(list_make1(dbAddress));
SerializeDistributedDDLsOnObjectClassObject(OCLASS_DATABASE, stmt->dbname); SerializeDistributedDDLsOnObjectClassObject(OCLASS_DATABASE, stmt->dbname);
char *sql = DeparseTreeNode((Node *) stmt); char *sql = DeparseTreeNode((Node *) stmt);
@ -474,7 +474,7 @@ PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
(void *) sql, (void *) sql,
ENABLE_DDL_PROPAGATION); ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(REMOTE_NODES, commands);
} }
@ -694,6 +694,31 @@ PreprocessDropDatabaseStmt(Node *node, const char *queryString,
return dropDatabaseDDLJobList; return dropDatabaseDDLJobList;
} }
List *
PreprocessAlterDatabaseOwnerStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext){
List *addresses = GetObjectAddressListFromParseTree(node, false, false);
if (!ShouldPropagateAnyObject(addresses))
{
return NIL;
}
EnsurePropagationToCoordinator();
AlterOwnerStmt *stmt = (AlterOwnerStmt *) node;
EnsureSequentialMode(stmt->objectType);
QualifyTreeNode(node);
char *databaseName = strVal((String *) stmt->object);
SerializeDistributedDDLsOnObjectClassObject(OCLASS_DATABASE, databaseName);
const char *sql = DeparseTreeNode((Node *) node);
List *commands = list_make3(DISABLE_DDL_PROPAGATION,
(void *) sql,
ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(REMOTE_NODES, commands);
}
/* /*
* DropDatabaseStmtObjectAddress gets the ObjectAddress of the database that is the * DropDatabaseStmtObjectAddress gets the ObjectAddress of the database that is the

View File

@ -468,7 +468,7 @@ static DistributeObjectOps Collation_Rename = {
static DistributeObjectOps Database_AlterOwner = { static DistributeObjectOps Database_AlterOwner = {
.deparse = DeparseAlterDatabaseOwnerStmt, .deparse = DeparseAlterDatabaseOwnerStmt,
.qualify = NULL, .qualify = NULL,
.preprocess = PreprocessAlterDistributedObjectStmt, .preprocess = PreprocessAlterDatabaseOwnerStmt,
.postprocess = PostprocessAlterDistributedObjectStmt, .postprocess = PostprocessAlterDistributedObjectStmt,
.objectType = OBJECT_DATABASE, .objectType = OBJECT_DATABASE,
.operationType = DIST_OPS_ALTER, .operationType = DIST_OPS_ALTER,

View File

@ -234,6 +234,9 @@ extern List * PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
extern List * PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString, extern List * PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern List * PreprocessAlterDatabaseOwnerStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * GetDatabaseMetadataSyncCommands(Oid dbOid); extern List * GetDatabaseMetadataSyncCommands(Oid dbOid);

View File

@ -34,6 +34,16 @@ set citus.log_remote_commands = true;
set citus.grep_remote_commands = "%ALTER DATABASE%"; set citus.grep_remote_commands = "%ALTER DATABASE%";
alter database altered_database_renamed rename to "altered_database!'2"; alter database altered_database_renamed rename to "altered_database!'2";
alter database "altered_database!'2" with
ALLOW_CONNECTIONS true
CONNECTION LIMIT 0
IS_TEMPLATE false;
\c regression - - :worker_2_port
set citus.log_remote_commands = true;
set citus.grep_remote_commands = "%ALTER DATABASE%";
alter database "altered_database!'2" with alter database "altered_database!'2" with
ALLOW_CONNECTIONS false ALLOW_CONNECTIONS false
CONNECTION LIMIT 1 CONNECTION LIMIT 1
@ -43,6 +53,14 @@ alter database "altered_database!'2" with
CONNECTION LIMIT 0 CONNECTION LIMIT 0
IS_TEMPLATE false; IS_TEMPLATE false;
alter database "altered_database!'2" rename to altered_database_renamed;
alter database altered_database_renamed rename to "altered_database!'2";
\c regression \c regression
create role test_owner_non_main_db; create role test_owner_non_main_db;
@ -56,9 +74,23 @@ alter database "altered_database!'2" owner to test_owner_non_main_db;
set citus.log_remote_commands = true; set citus.log_remote_commands = true;
set citus.grep_remote_commands = "%ALTER DATABASE%"; set citus.grep_remote_commands = "%ALTER DATABASE%";
alter database "altered_database!'2" owner to CURRENT_USER; alter database "altered_database!'2" owner to CURRENT_USER;
alter database "altered_database!'2" set default_transaction_read_only = true;
set default_transaction_read_only = false; set default_transaction_read_only = false;
\c regression - - :worker_1_port
set citus.log_remote_commands = true;
set citus.grep_remote_commands = "%ALTER DATABASE%";
alter database "altered_database!'2" owner to test_owner_non_main_db;
set default_transaction_read_only = false;
\c regression - - :master_port
set citus.log_remote_commands = true;
set citus.grep_remote_commands = "%ALTER DATABASE%";
alter database "altered_database!'2" owner to CURRENT_USER;
set default_transaction_read_only = false;
\c test_alter_db_from_nonmain_db - - :worker_2_port \c test_alter_db_from_nonmain_db - - :worker_2_port
set citus.log_remote_commands = true; set citus.log_remote_commands = true;
set citus.grep_remote_commands = "%ALTER DATABASE%"; set citus.grep_remote_commands = "%ALTER DATABASE%";
@ -76,6 +108,9 @@ alter database "altered_database!'2" RESET TIME ZONE;
alter database "altered_database!'2" SET TIME ZONE INTERVAL '-08:00' HOUR TO MINUTE; alter database "altered_database!'2" SET TIME ZONE INTERVAL '-08:00' HOUR TO MINUTE;
alter database "altered_database!'2" RESET TIME ZONE; alter database "altered_database!'2" RESET TIME ZONE;
alter database "altered_database!'2" set default_transaction_isolation = 'serializable'; alter database "altered_database!'2" set default_transaction_isolation = 'serializable';
\c regression - - :worker_2_port
set citus.log_remote_commands = true;
set citus.grep_remote_commands = "%ALTER DATABASE%";
set default_transaction_isolation = 'read committed'; set default_transaction_isolation = 'read committed';
alter database "altered_database!'2" set default_transaction_isolation from current; alter database "altered_database!'2" set default_transaction_isolation from current;
alter database "altered_database!'2" set default_transaction_isolation to DEFAULT; alter database "altered_database!'2" set default_transaction_isolation to DEFAULT;