From ea09b3309b2e219ba7bc84a38dffe13ed419197c Mon Sep 17 00:00:00 2001 From: SaitTalhaNisanci Date: Thu, 9 Apr 2020 11:11:16 +0300 Subject: [PATCH] wip --- .../distributed/connection/connection_management.c | 12 ++++++++++++ src/backend/distributed/executor/adaptive_executor.c | 4 ++-- src/include/distributed/connection_management.h | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/connection/connection_management.c b/src/backend/distributed/connection/connection_management.c index f4eb10271..8406d88c8 100644 --- a/src/backend/distributed/connection/connection_management.c +++ b/src/backend/distributed/connection/connection_management.c @@ -381,6 +381,18 @@ StartNodeUserDatabaseConnection(uint32 flags, const char *hostname, int32 port, } +void +SetCriticalConnectionFlag(int *prevFlags, MultiConnectionMode connectionFlag) +{ + *prevFlags |= connectionFlag; + if ((*prevFlags & WAIT_FOR_CONNECTION) && (*prevFlags & OPTIONAL_CONNECTION)) + { + ereport(ERROR, (errmsg( + "connection cannot have both wait for connection and optional connection flag"))); + } +} + + /* * FindAvailableConnection searches the given list of connections for one that * is not claimed exclusively. diff --git a/src/backend/distributed/executor/adaptive_executor.c b/src/backend/distributed/executor/adaptive_executor.c index 9e8b21ce3..25c347881 100644 --- a/src/backend/distributed/executor/adaptive_executor.c +++ b/src/backend/distributed/executor/adaptive_executor.c @@ -2393,7 +2393,7 @@ ManageWorkerPool(WorkerPool *workerPool) * remaining are optional. If the executor can get more connections, * it can increase the parallelism. */ - connectionFlags |= OPTIONAL_CONNECTION; + SetCriticalConnectionFlag(&connectionFlags, OPTIONAL_CONNECTION); } else if (!UseConnectionPerPlacement()) { @@ -2403,7 +2403,7 @@ ManageWorkerPool(WorkerPool *workerPool) * always finish the execution with a single connection, so wait until we get * one connection. */ - connectionFlags |= WAIT_FOR_CONNECTION; + SetCriticalConnectionFlag(&connectionFlags, WAIT_FOR_CONNECTION); } /* open a new connection to the worker */ diff --git a/src/include/distributed/connection_management.h b/src/include/distributed/connection_management.h index abb6119b4..fc0b467ea 100644 --- a/src/include/distributed/connection_management.h +++ b/src/include/distributed/connection_management.h @@ -222,6 +222,8 @@ extern void CloseConnection(MultiConnection *connection); extern void ShutdownAllConnections(void); extern void ShutdownConnection(MultiConnection *connection); +extern void SetCriticalConnectionFlag(int *prevFlags, MultiConnectionMode connectionFlag); + /* dealing with a connection */ extern void FinishConnectionListEstablishment(List *multiConnectionList); extern void FinishConnectionEstablishment(MultiConnection *connection);