From 37f587b5e43fd207a555a1c2e2aac1d6c83c720e Mon Sep 17 00:00:00 2001 From: templarzq Date: Tue, 23 Dec 2025 10:24:43 +0800 Subject: [PATCH 1/4] Enhance task placement check with recovery status Added check for if its running in recovery progress before returning task placement status. --- src/backend/distributed/executor/local_executor.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/executor/local_executor.c b/src/backend/distributed/executor/local_executor.c index 90752ea69b0..3e0f5373371 100644 --- a/src/backend/distributed/executor/local_executor.c +++ b/src/backend/distributed/executor/local_executor.c @@ -1019,7 +1019,13 @@ TaskAccessesLocalNode(Task *task) { if (taskPlacement->groupId == localGroupId) { - return true; + //check if it's running on standby node + if(RecoveryInProgress()) + { + return false; + }else{ + return true; + } } } From 84dd5087b93fd8085f8d39e815b03f43811eccf7 Mon Sep 17 00:00:00 2001 From: templarzq Date: Tue, 23 Dec 2025 10:27:39 +0800 Subject: [PATCH 2/4] Update citus_custom_scan.c add private Node pointer null check --- src/backend/distributed/executor/citus_custom_scan.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/backend/distributed/executor/citus_custom_scan.c b/src/backend/distributed/executor/citus_custom_scan.c index 2c301f8aaf5..c62b32144e6 100644 --- a/src/backend/distributed/executor/citus_custom_scan.c +++ b/src/backend/distributed/executor/citus_custom_scan.c @@ -944,6 +944,10 @@ IsCitusCustomScan(Plan *plan) } Node *privateNode = (Node *) linitial(customScan->custom_private); + //shoud check privateNode is null ptr + if (privateNode == NULL){ + return false; + } if (!CitusIsA(privateNode, DistributedPlan)) { return false; From 45276385c0ec673e85c584c165f20bbf1b05520a Mon Sep 17 00:00:00 2001 From: templarzq Date: Wed, 24 Dec 2025 15:09:24 +0800 Subject: [PATCH 3/4] Refactor task type check with RecoveryInProgress add task type check --- src/backend/distributed/executor/local_executor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/executor/local_executor.c b/src/backend/distributed/executor/local_executor.c index 3e0f5373371..1213f1fe1af 100644 --- a/src/backend/distributed/executor/local_executor.c +++ b/src/backend/distributed/executor/local_executor.c @@ -1020,7 +1020,9 @@ TaskAccessesLocalNode(Task *task) if (taskPlacement->groupId == localGroupId) { //check if it's running on standby node - if(RecoveryInProgress()) + if( (task->taskType == MODIFY_TASK|| + task->taskType ==DDL_TASK || + task->taskType == VACUUM_ANALYZE_TASK) && RecoveryInProgress()) { return false; }else{ From ba6a442b24d582b14faf4eeaca6b010e563f1fce Mon Sep 17 00:00:00 2001 From: templarzq Date: Thu, 25 Dec 2025 17:43:21 +0800 Subject: [PATCH 4/4] Refactor task type check with RecoveryInProgress remove vacuum task check --- src/backend/distributed/executor/local_executor.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/distributed/executor/local_executor.c b/src/backend/distributed/executor/local_executor.c index 1213f1fe1af..7b69d563844 100644 --- a/src/backend/distributed/executor/local_executor.c +++ b/src/backend/distributed/executor/local_executor.c @@ -1021,8 +1021,7 @@ TaskAccessesLocalNode(Task *task) { //check if it's running on standby node if( (task->taskType == MODIFY_TASK|| - task->taskType ==DDL_TASK || - task->taskType == VACUUM_ANALYZE_TASK) && RecoveryInProgress()) + task->taskType ==DDL_TASK) && RecoveryInProgress()) { return false; }else{