store query command list in task (#3649)

Sometimes we have concatenated query strings for a task. However,
when we want to find each query string, it is not a trivial task.
Therefore, it makes sense to store this in task so that when we need
each query string we can easily get it.
pull/3651/head
SaitTalhaNisanci 2020-03-26 12:04:08 +03:00 committed by GitHub
parent 4686133bf2
commit dd1a456407
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 25 additions and 3 deletions

View File

@ -927,7 +927,6 @@ List *
NodeDDLTaskList(TargetWorkerSet targets, List *commands)
{
List *workerNodes = TargetWorkerSetNodeList(targets, NoLock);
char *concatenatedCommands = StringJoin(commands, ';');
if (list_length(workerNodes) <= 0)
{
@ -940,7 +939,7 @@ NodeDDLTaskList(TargetWorkerSet targets, List *commands)
Task *task = CitusMakeNode(Task);
task->taskType = DDL_TASK;
SetTaskQueryString(task, concatenatedCommands);
SetTaskQueryStringList(task, commands);
WorkerNode *workerNode = NULL;
foreach_ptr(workerNode, workerNodes)

View File

@ -513,7 +513,8 @@ CreateShardsOnWorkers(Oid distributedRelationId, List *shardPlacements,
task->jobId = INVALID_JOB_ID;
task->taskId = taskId++;
task->taskType = DDL_TASK;
SetTaskQueryString(task, StringJoin(commandList, ';'));
SetTaskQueryStringList(task, commandList);
task->replicationModel = REPLICATION_MODEL_INVALID;
task->dependentTaskList = NIL;
task->anchorShardId = shardId;

View File

@ -445,6 +445,17 @@ SetTaskQueryString(Task *task, char *queryString)
}
/*
* SetTaskQueryStringList sets the queryStringList of the given task.
*/
void
SetTaskQueryStringList(Task *task, List *queryStringList)
{
task->queryStringList = queryStringList;
SetTaskQueryString(task, StringJoin(queryStringList, ';'));
}
/*
* DeparseTaskQuery is a general way of deparsing a query based on a task.
*/

View File

@ -260,6 +260,7 @@ CopyNodeTask(COPYFUNC_ARGS)
COPY_SCALAR_FIELD(taskId);
COPY_NODE_FIELD(queryForLocalExecution);
COPY_STRING_FIELD(queryStringLazy);
COPY_NODE_FIELD(queryStringList);
COPY_SCALAR_FIELD(anchorDistributedTableId);
COPY_SCALAR_FIELD(anchorShardId);
COPY_NODE_FIELD(taskPlacementList);

View File

@ -481,6 +481,7 @@ OutTask(OUTFUNC_ARGS)
WRITE_UINT_FIELD(taskId);
WRITE_NODE_FIELD(queryForLocalExecution);
WRITE_STRING_FIELD(queryStringLazy);
WRITE_NODE_FIELD(queryStringList);
WRITE_OID_FIELD(anchorDistributedTableId);
WRITE_UINT64_FIELD(anchorShardId);
WRITE_NODE_FIELD(taskPlacementList);

View File

@ -25,6 +25,7 @@ extern void RebuildQueryStrings(Job *workerJob);
extern bool UpdateRelationToShardNames(Node *node, List *relationShardList);
extern void SetTaskQuery(Task *task, Query *query);
extern void SetTaskQueryString(Task *task, char *queryString);
extern void SetTaskQueryStringList(Task *task, List *queryStringList);
extern char * TaskQueryString(Task *task);
extern bool UpdateRelationsToLocalShardTables(Node *node, List *relationShardList);

View File

@ -240,6 +240,14 @@ typedef struct Task
char *queryStringLazy;
List *perPlacementQueryStrings;
/*
* queryStringList contains query strings. They should be
* run sequentially. The concatenated version of this list
* will already be set for queryStringLazy, this can be useful
* when we want to access each query string.
*/
List *queryStringList;
Oid anchorDistributedTableId; /* only applies to insert tasks */
uint64 anchorShardId; /* only applies to compute tasks */
List *taskPlacementList; /* only applies to compute tasks */