From 33abfa083817d3ca805732b960f57d011ebf595f Mon Sep 17 00:00:00 2001 From: Ahmet Gedemenli Date: Mon, 30 Jan 2023 18:07:32 +0300 Subject: [PATCH] Fix valgrind issue: ResetRemoteTransaction --- .../connection/connection_management.c | 4 ++-- .../distributed/operations/shard_cleaner.c | 18 +++++++++--------- .../transaction/remote_transaction.c | 4 ++-- .../transaction/worker_transaction.c | 4 ++-- src/include/distributed/remote_transaction.h | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/backend/distributed/connection/connection_management.c b/src/backend/distributed/connection/connection_management.c index c5b300fd4..4a7697a4a 100644 --- a/src/backend/distributed/connection/connection_management.c +++ b/src/backend/distributed/connection/connection_management.c @@ -705,7 +705,7 @@ CloseConnection(MultiConnection *connection) /* same for transaction state and shard/placement machinery */ CloseShardPlacementAssociation(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); /* we leave the per-host entry alive */ pfree(connection); @@ -1464,7 +1464,7 @@ AfterXactHostConnectionHandling(ConnectionHashEntry *entry, bool isCommit) /* * reset healthy session lifespan connections. */ - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, false); UnclaimConnection(connection); diff --git a/src/backend/distributed/operations/shard_cleaner.c b/src/backend/distributed/operations/shard_cleaner.c index d98b30c17..fdf4f126d 100644 --- a/src/backend/distributed/operations/shard_cleaner.c +++ b/src/backend/distributed/operations/shard_cleaner.c @@ -684,7 +684,7 @@ TryDropSubscriptionOutsideTransaction(char *subscriptionName, "SET LOCAL lock_timeout TO '1s'", NULL) != 0) { RemoteTransactionAbort(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return false; } @@ -695,7 +695,7 @@ TryDropSubscriptionOutsideTransaction(char *subscriptionName, { ReportConnectionError(connection, WARNING); RemoteTransactionAbort(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return false; } @@ -714,7 +714,7 @@ TryDropSubscriptionOutsideTransaction(char *subscriptionName, PQclear(result); ForgetResults(connection); RemoteTransactionAbort(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return true; } else @@ -723,7 +723,7 @@ TryDropSubscriptionOutsideTransaction(char *subscriptionName, PQclear(result); ForgetResults(connection); RemoteTransactionAbort(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return false; } } @@ -731,7 +731,7 @@ TryDropSubscriptionOutsideTransaction(char *subscriptionName, PQclear(result); ForgetResults(connection); RemoteTransactionCommit(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); StringInfo alterQuery = makeStringInfo(); appendStringInfo(alterQuery, @@ -803,7 +803,7 @@ TryDropReplicationSlotOutsideTransaction(char *replicationSlotName, "SET LOCAL lock_timeout TO '1s'", NULL) != 0) { RemoteTransactionAbort(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return false; } @@ -820,7 +820,7 @@ TryDropReplicationSlotOutsideTransaction(char *replicationSlotName, { ReportConnectionError(connection, WARNING); RemoteTransactionAbort(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return false; } @@ -832,7 +832,7 @@ TryDropReplicationSlotOutsideTransaction(char *replicationSlotName, PQclear(result); ForgetResults(connection); RemoteTransactionCommit(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return true; } @@ -846,7 +846,7 @@ TryDropReplicationSlotOutsideTransaction(char *replicationSlotName, PQclear(result); ForgetResults(connection); RemoteTransactionAbort(connection); - ResetRemoteTransaction(connection); + ResetRemoteTransaction(connection, true); return false; } diff --git a/src/backend/distributed/transaction/remote_transaction.c b/src/backend/distributed/transaction/remote_transaction.c index aff357fb3..e4625268e 100644 --- a/src/backend/distributed/transaction/remote_transaction.c +++ b/src/backend/distributed/transaction/remote_transaction.c @@ -860,12 +860,12 @@ MarkRemoteTransactionCritical(struct MultiConnection *connection) * the main transaction, if the connection is being reused. */ void -ResetRemoteTransaction(struct MultiConnection *connection) +ResetRemoteTransaction(struct MultiConnection *connection, bool deleteTxNode) { RemoteTransaction *transaction = &connection->remoteTransaction; /* unlink from list of open transactions, if necessary */ - if (transaction->transactionState != REMOTE_TRANS_NOT_STARTED) + if (deleteTxNode && transaction->transactionState != REMOTE_TRANS_NOT_STARTED) { /* XXX: Should we error out for a critical transaction? */ diff --git a/src/backend/distributed/transaction/worker_transaction.c b/src/backend/distributed/transaction/worker_transaction.c index 486dd7280..969fc0d31 100644 --- a/src/backend/distributed/transaction/worker_transaction.c +++ b/src/backend/distributed/transaction/worker_transaction.c @@ -370,7 +370,7 @@ SendCommandListToWorkerOutsideTransactionWithConnection(MultiConnection *workerC } RemoteTransactionCommit(workerConnection); - ResetRemoteTransaction(workerConnection); + ResetRemoteTransaction(workerConnection, true); } @@ -488,7 +488,7 @@ SendOptionalCommandListToWorkerOutsideTransactionWithConnection( RemoteTransactionCommit(workerConnection); } - ResetRemoteTransaction(workerConnection); + ResetRemoteTransaction(workerConnection, true); return !failed; } diff --git a/src/include/distributed/remote_transaction.h b/src/include/distributed/remote_transaction.h index 6136f25c9..a55c37167 100644 --- a/src/include/distributed/remote_transaction.h +++ b/src/include/distributed/remote_transaction.h @@ -130,7 +130,7 @@ extern void MarkRemoteTransactionCritical(struct MultiConnection *connection); * transaction managment code. */ -extern void ResetRemoteTransaction(struct MultiConnection *connection); +extern void ResetRemoteTransaction(struct MultiConnection *connection, bool deleteTxNode); /* perform handling for all in-progress transactions */ extern void CoordinatedRemoteTransactionsPrepare(void);