diff --git a/src/backend/distributed/transaction/worker_transaction.c b/src/backend/distributed/transaction/worker_transaction.c index e1f3224cb..cbe146e08 100644 --- a/src/backend/distributed/transaction/worker_transaction.c +++ b/src/backend/distributed/transaction/worker_transaction.c @@ -117,7 +117,15 @@ SendBareCommandListToWorkers(TargetWorkerSet targetWorkerSet, List *commandList) int nodePort = workerNode->workerPort; int connectionFlags = FORCE_NEW_CONNECTION; - if (targetWorkerSet == WORKERS_WITH_METADATA && !workerNode->hasMetadata) + if ((targetWorkerSet == WORKERS_WITH_METADATA || + targetWorkerSet == WORKERS_WITH_METADATA_EXCLUDE_CURRENT_WORKER) && + !workerNode->hasMetadata) + { + continue; + } + + if (targetWorkerSet == WORKERS_WITH_METADATA_EXCLUDE_CURRENT_WORKER && + workerNode->groupId == GetLocalGroupId()) { continue; } @@ -169,7 +177,15 @@ SendCommandToWorkersParams(TargetWorkerSet targetWorkerSet, char *command, MultiConnection *connection = NULL; int connectionFlags = 0; - if (targetWorkerSet == WORKERS_WITH_METADATA && !workerNode->hasMetadata) + if ((targetWorkerSet == WORKERS_WITH_METADATA || + targetWorkerSet == WORKERS_WITH_METADATA_EXCLUDE_CURRENT_WORKER) && + !workerNode->hasMetadata) + { + continue; + } + + if (targetWorkerSet == WORKERS_WITH_METADATA_EXCLUDE_CURRENT_WORKER && + workerNode->groupId == GetLocalGroupId()) { continue; } diff --git a/src/include/distributed/worker_transaction.h b/src/include/distributed/worker_transaction.h index 4c76f77ac..a41b1326f 100644 --- a/src/include/distributed/worker_transaction.h +++ b/src/include/distributed/worker_transaction.h @@ -22,6 +22,7 @@ typedef enum TargetWorkerSet { WORKERS_WITH_METADATA, + WORKERS_WITH_METADATA_EXCLUDE_CURRENT_WORKER, ALL_WORKERS } TargetWorkerSet;