From f2f0ec9ddae77563b7256c9d3f3690af79ad67be Mon Sep 17 00:00:00 2001 From: aykutbozkurt Date: Tue, 28 Mar 2023 14:50:49 +0300 Subject: [PATCH] =?UTF-8?q?PR=20#6728=20=C2=A0/=20commit=20-=2012?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Force activated bare connections to close at transaction end. --- .../connection/connection_management.c | 11 ++++++++ .../distributed/metadata/metadata_sync.c | 27 +------------------ .../distributed/metadata/node_metadata.c | 6 ----- src/backend/distributed/test/metadata_sync.c | 3 --- .../distributed/connection_management.h | 1 + src/include/distributed/metadata_sync.h | 1 - 6 files changed, 13 insertions(+), 36 deletions(-) diff --git a/src/backend/distributed/connection/connection_management.c b/src/backend/distributed/connection/connection_management.c index 12a5e7b3f..e4aca3ee7 100644 --- a/src/backend/distributed/connection/connection_management.c +++ b/src/backend/distributed/connection/connection_management.c @@ -1202,6 +1202,17 @@ FinishConnectionEstablishment(MultiConnection *connection) } +/* + * ForceConnectionCloseAtTransactionEnd marks connection to be closed at the end of the + * transaction. + */ +void +ForceConnectionCloseAtTransactionEnd(MultiConnection *connection) +{ + connection->forceCloseAtTransactionEnd = true; +} + + /* * ClaimConnectionExclusively signals that this connection is actively being * used. That means it'll not be, again, returned by diff --git a/src/backend/distributed/metadata/metadata_sync.c b/src/backend/distributed/metadata/metadata_sync.c index 4260a4e80..e3310c5c8 100644 --- a/src/backend/distributed/metadata/metadata_sync.c +++ b/src/backend/distributed/metadata/metadata_sync.c @@ -210,9 +210,6 @@ start_metadata_sync_to_node(PG_FUNCTION_ARGS) ActivateNodeList(context); TransactionModifiedNodeMetadata = true; - /* cleanup metadata memory context and connections */ - DestroyMetadataSyncContext(context); - PG_RETURN_VOID(); } @@ -246,9 +243,6 @@ start_metadata_sync_to_all_nodes(PG_FUNCTION_ARGS) ActivateNodeList(context); TransactionModifiedNodeMetadata = true; - /* cleanup metadata memory context and connections */ - DestroyMetadataSyncContext(context); - PG_RETURN_BOOL(true); } @@ -4002,6 +3996,7 @@ EstablishAndSetMetadataSyncBareConnections(MetadataSyncContext *context) NULL); Assert(connection != NULL); + ForceConnectionCloseAtTransactionEnd(connection); bareConnectionList = lappend(bareConnectionList, connection); } @@ -4059,26 +4054,6 @@ CreateMetadataSyncContext(List *nodeList, bool collectCommands, } -/* - * DestroyMetadataSyncContext destroys the memory context inside metadataSyncContext - * and also closes open connections if any. - */ -void -DestroyMetadataSyncContext(MetadataSyncContext *context) -{ - /* todo: make sure context is always cleanup by using resource release callback?? */ - /* close connections */ - MultiConnection *connection = NULL; - foreach_ptr(connection, context->activatedWorkerBareConnections) - { - CloseConnection(connection); - } - - /* delete memory context */ - MemoryContextDelete(context->context); -} - - /* * ResetMetadataSyncMemoryContext resets memory context inside metadataSyncContext, if * we are not collecting commands. diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index f113a7a13..2639b79f0 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -771,9 +771,6 @@ citus_activate_node(PG_FUNCTION_ARGS) ActivateNodeList(context); TransactionModifiedNodeMetadata = true; - /* cleanup metadata memory context and connections */ - DestroyMetadataSyncContext(context); - PG_RETURN_INT32(workerNode->nodeId); } @@ -2240,9 +2237,6 @@ AddNodeMetadataViaMetadataContext(char *nodeName, int32 nodePort, ActivateNodeList(context); - /* cleanup metadata memory context and connections */ - DestroyMetadataSyncContext(context); - return nodeId; } diff --git a/src/backend/distributed/test/metadata_sync.c b/src/backend/distributed/test/metadata_sync.c index a2174f7c4..46d2303d6 100644 --- a/src/backend/distributed/test/metadata_sync.c +++ b/src/backend/distributed/test/metadata_sync.c @@ -86,9 +86,6 @@ activate_node_snapshot(PG_FUNCTION_ARGS) activateNodeCommandCount, ddlCommandTypeId); - /* cleanup metadata memory context and connections */ - DestroyMetadataSyncContext(context); - PG_RETURN_ARRAYTYPE_P(activateNodeCommandArrayType); } diff --git a/src/include/distributed/connection_management.h b/src/include/distributed/connection_management.h index 41882bdf1..278d7ca2d 100644 --- a/src/include/distributed/connection_management.h +++ b/src/include/distributed/connection_management.h @@ -323,6 +323,7 @@ extern void ShutdownConnection(MultiConnection *connection); /* dealing with a connection */ extern void FinishConnectionListEstablishment(List *multiConnectionList); extern void FinishConnectionEstablishment(MultiConnection *connection); +extern void ForceConnectionCloseAtTransactionEnd(MultiConnection *connection); extern void ClaimConnectionExclusively(MultiConnection *connection); extern void UnclaimConnection(MultiConnection *connection); extern void MarkConnectionConnected(MultiConnection *connection); diff --git a/src/include/distributed/metadata_sync.h b/src/include/distributed/metadata_sync.h index 1795152b2..d5878ec71 100644 --- a/src/include/distributed/metadata_sync.h +++ b/src/include/distributed/metadata_sync.h @@ -141,7 +141,6 @@ extern void SyncDeleteColocationGroupToNodes(uint32 colocationId); extern MetadataSyncContext * CreateMetadataSyncContext(List *nodeList, bool collectCommands, bool nodesAddedInSameTransaction); -extern void DestroyMetadataSyncContext(MetadataSyncContext *context); extern void EstablishAndSetMetadataSyncBareConnections(MetadataSyncContext *context); extern void SetMetadataSyncNodesFromNodeList(MetadataSyncContext *context, List *nodeList);