From 1b98b3ef728f8f451600ebe57a8bb2e9be3d0590 Mon Sep 17 00:00:00 2001 From: Jason Petersen Date: Mon, 12 Dec 2016 15:27:21 -0700 Subject: [PATCH] Make local VACUUM occur first; rework prototypes As part of review feedback. --- .../distributed/executor/multi_utility.c | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/backend/distributed/executor/multi_utility.c b/src/backend/distributed/executor/multi_utility.c index aa226731c..a563c4139 100644 --- a/src/backend/distributed/executor/multi_utility.c +++ b/src/backend/distributed/executor/multi_utility.c @@ -110,8 +110,7 @@ static Node * ProcessAlterTableStmt(AlterTableStmt *alterTableStatement, static Node * ProcessAlterObjectSchemaStmt(AlterObjectSchemaStmt *alterObjectSchemaStmt, const char *alterObjectSchemaCommand, bool isTopLevel); -static Node * ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand, - bool isTopLevel); +static void ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand); static List * VacuumTaskList(Oid relationId, VacuumStmt *vacuumStmt); static StringInfo DeparseVacuumStmtPrefix(VacuumStmt *vacuumStmt); @@ -287,17 +286,6 @@ multi_ProcessUtility(Node *parsetree, errhint("Connect to worker nodes directly to manually " "move all tables."))); } - - if (IsA(parsetree, VacuumStmt)) - { - VacuumStmt *vacuumStmt = (VacuumStmt *) parsetree; - - /* must check fields to know whether actually a vacuum */ - if (vacuumStmt->options | VACOPT_VACUUM) - { - parsetree = ProcessVacuumStmt(vacuumStmt, queryString, isTopLevel); - } - } } /* @@ -383,6 +371,18 @@ multi_ProcessUtility(Node *parsetree, { SetUserIdAndSecContext(savedUserId, savedSecurityContext); } + + /* we run VacuumStmt after standard processing to benefit from its checks */ + if (IsA(parsetree, VacuumStmt)) + { + VacuumStmt *vacuumStmt = (VacuumStmt *) parsetree; + + /* must check fields to know whether actually a vacuum */ + if (vacuumStmt->options | VACOPT_VACUUM) + { + ProcessVacuumStmt(vacuumStmt, queryString); + } + } } @@ -900,15 +900,15 @@ ProcessAlterObjectSchemaStmt(AlterObjectSchemaStmt *alterObjectSchemaStmt, /* TODO: Write function comments */ -static Node * -ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand, bool isTopLevel) +static void +ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand) { Oid relationId = InvalidOid; List *taskList = NIL; if (vacuumStmt->relation == NULL) { - return (Node *) vacuumStmt; + return; } relationId = RangeVarGetRelid(vacuumStmt->relation, NoLock, false); @@ -916,7 +916,7 @@ ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand, bool isTopL /* first check whether a distributed relation is affected */ if (!OidIsValid(relationId) || !IsDistributedTable(relationId)) { - return (Node *) vacuumStmt; + return; } taskList = VacuumTaskList(relationId, vacuumStmt); @@ -924,8 +924,6 @@ ProcessVacuumStmt(VacuumStmt *vacuumStmt, const char *vacuumCommand, bool isTopL SavedMultiShardCommitProtocol = MultiShardCommitProtocol; MultiShardCommitProtocol = COMMIT_PROTOCOL_BARE; ExecuteModifyTasksWithoutResults(taskList); - - return (Node *) vacuumStmt; }