From c6f5d5fe885b35d6ac7fb865db30222c945b3d49 Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Wed, 29 Apr 2020 11:19:11 +0200 Subject: [PATCH] Add some asserts to pass static analysis (#3805) --- .../connection/connection_management.c | 25 ++++++++++++++++++- .../connection/placement_connection.c | 14 +++++++++++ .../executor/multi_client_executor.c | 7 ++++++ .../transaction/worker_transaction.c | 13 ++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/connection/connection_management.c b/src/backend/distributed/connection/connection_management.c index 1ca7fe99d..14438c37e 100644 --- a/src/backend/distributed/connection/connection_management.c +++ b/src/backend/distributed/connection/connection_management.c @@ -193,7 +193,16 @@ GetNodeConnection(uint32 flags, const char *hostname, int32 port) MultiConnection * StartNodeConnection(uint32 flags, const char *hostname, int32 port) { - return StartNodeUserDatabaseConnection(flags, hostname, port, NULL, NULL); + MultiConnection *connection = StartNodeUserDatabaseConnection(flags, hostname, port, + NULL, NULL); + + /* + * connection can only be NULL for optional connections, which we don't + * support in this codepath. + */ + Assert((flags & OPTIONAL_CONNECTION) == 0); + Assert(connection != NULL); + return connection; } @@ -209,6 +218,13 @@ GetNodeUserDatabaseConnection(uint32 flags, const char *hostname, int32 port, MultiConnection *connection = StartNodeUserDatabaseConnection(flags, hostname, port, user, database); + /* + * connection can only be NULL for optional connections, which we don't + * support in this codepath. + */ + Assert((flags & OPTIONAL_CONNECTION) == 0); + Assert(connection != NULL); + FinishConnectionEstablishment(connection); return connection; @@ -236,6 +252,13 @@ StartWorkerListConnections(List *workerNodeList, uint32 flags, const char *user, nodeName, nodePort, user, database); + /* + * connection can only be NULL for optional connections, which we don't + * support in this codepath. + */ + Assert((flags & OPTIONAL_CONNECTION) == 0); + Assert(connection != NULL); + connectionList = lappend(connectionList, connection); } diff --git a/src/backend/distributed/connection/placement_connection.c b/src/backend/distributed/connection/placement_connection.c index 27cab75e0..b9e2e4672 100644 --- a/src/backend/distributed/connection/placement_connection.c +++ b/src/backend/distributed/connection/placement_connection.c @@ -294,6 +294,13 @@ StartPlacementListConnection(uint32 flags, List *placementAccessList, chosenConnection = StartNodeUserDatabaseConnection(flags, nodeName, nodePort, userName, NULL); + /* + * chosenConnection can only be NULL for optional connections, which we + * don't support in this codepath. + */ + Assert((flags & OPTIONAL_CONNECTION) == 0); + Assert(chosenConnection != NULL); + if ((flags & CONNECTION_PER_PLACEMENT) && ConnectionAccessedDifferentPlacement(chosenConnection, placement)) { @@ -314,6 +321,13 @@ StartPlacementListConnection(uint32 flags, List *placementAccessList, nodeName, nodePort, userName, NULL); + /* + * chosenConnection can only be NULL for optional connections, + * which we don't support in this codepath. + */ + Assert((flags & OPTIONAL_CONNECTION) == 0); + Assert(chosenConnection != NULL); + Assert(!ConnectionAccessedDifferentPlacement(chosenConnection, placement)); } } diff --git a/src/backend/distributed/executor/multi_client_executor.c b/src/backend/distributed/executor/multi_client_executor.c index e6918ce20..26ef5384c 100644 --- a/src/backend/distributed/executor/multi_client_executor.c +++ b/src/backend/distributed/executor/multi_client_executor.c @@ -150,6 +150,13 @@ MultiClientConnectStart(const char *nodeName, uint32 nodePort, const char *nodeD MultiConnection *connection = StartNodeUserDatabaseConnection(connectionFlags, nodeName, nodePort, userName, nodeDatabase); + + /* + * connection can only be NULL for optional connections, which we don't + * support in this codepath. + */ + Assert((connectionFlags & OPTIONAL_CONNECTION) == 0); + Assert(connection != NULL); ConnStatusType connStatusType = PQstatus(connection->pgConn); /* diff --git a/src/backend/distributed/transaction/worker_transaction.c b/src/backend/distributed/transaction/worker_transaction.c index 343c4c67d..2317c68b3 100644 --- a/src/backend/distributed/transaction/worker_transaction.c +++ b/src/backend/distributed/transaction/worker_transaction.c @@ -409,6 +409,13 @@ OpenConnectionsToWorkersInParallel(TargetWorkerSet targetWorkerSet, const char * MultiConnection *connection = StartNodeUserDatabaseConnection(connectionFlags, nodeName, nodePort, user, NULL); + + /* + * connection can only be NULL for optional connections, which we don't + * support in this codepath. + */ + Assert((connectionFlags & OPTIONAL_CONNECTION) == 0); + Assert(connection != NULL); connectionList = lappend(connectionList, connection); } return connectionList; @@ -476,6 +483,12 @@ SendCommandToWorkersParamsInternal(TargetWorkerSet targetWorkerSet, const char * nodeName, nodePort, user, NULL); + /* + * connection can only be NULL for optional connections, which we don't + * support in this codepath. + */ + Assert((connectionFlags & OPTIONAL_CONNECTION) == 0); + Assert(connection != NULL); MarkRemoteTransactionCritical(connection); connectionList = lappend(connectionList, connection);