From 2cb82ae9bd9e769affeeeb9bd3dd86612b00868b Mon Sep 17 00:00:00 2001 From: SaitTalhaNisanci Date: Tue, 19 Nov 2019 16:35:56 +0300 Subject: [PATCH] create a utility method to mark tasks as failed (#3150) --- src/backend/distributed/worker/task_tracker.c | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/backend/distributed/worker/task_tracker.c b/src/backend/distributed/worker/task_tracker.c index d57569c01..ada4b8a7c 100644 --- a/src/backend/distributed/worker/task_tracker.c +++ b/src/backend/distributed/worker/task_tracker.c @@ -92,6 +92,7 @@ static void ManageWorkerTasksHash(HTAB *WorkerTasksHash); static void ManageWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash); static void RemoveWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash); static void CreateJobDirectoryIfNotExists(uint64 jobId); +static void MarkWorkerTaskAsFailed(WorkerTask *workerTask); static int32 ConnectToLocalBackend(const char *databaseName, const char *userName); @@ -931,8 +932,7 @@ ManageWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash) } else { - workerTask->taskStatus = TASK_FAILED; - workerTask->failureCount++; + MarkWorkerTaskAsFailed(workerTask); MultiClientDisconnect(workerTask->connectionId); workerTask->connectionId = INVALID_CONNECTION_ID; @@ -940,8 +940,7 @@ ManageWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash) } else { - workerTask->taskStatus = TASK_FAILED; - workerTask->failureCount++; + MarkWorkerTaskAsFailed(workerTask); } break; @@ -962,8 +961,7 @@ ManageWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash) } else if (queryStatus == CLIENT_QUERY_FAILED) { - workerTask->taskStatus = TASK_FAILED; - workerTask->failureCount++; + MarkWorkerTaskAsFailed(workerTask); } else { @@ -976,8 +974,7 @@ ManageWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash) } else if (resultStatus == CLIENT_RESULT_UNAVAILABLE) { - workerTask->taskStatus = TASK_FAILED; - workerTask->failureCount++; + MarkWorkerTaskAsFailed(workerTask); } /* clean up the connection if we are done with the task */ @@ -1065,6 +1062,19 @@ ManageWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash) } +/* + * MarkWorkerTaskAsFailed marks the given worker task as failed + * and increases the failure count. Failure count is used to + * determine if the task should be marked as permanently failed. + */ +static void +MarkWorkerTaskAsFailed(WorkerTask *workerTask) +{ + workerTask->taskStatus = TASK_FAILED; + workerTask->failureCount++; +} + + /* Wrapper function to remove the worker task from the shared hash. */ static void RemoveWorkerTask(WorkerTask *workerTask, HTAB *WorkerTasksHash)