From a41953d5bb10f43c16d07565da771569c8a7a6d1 Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Fri, 2 Dec 2022 13:13:08 +0100 Subject: [PATCH] DROP TABLE becomes idempotent for metadata sync - t2 --- src/backend/distributed/metadata/metadata_sync.c | 4 ++-- src/backend/distributed/metadata/node_metadata.c | 15 ++++++++------- .../distributed/transaction/worker_transaction.c | 3 ++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/backend/distributed/metadata/metadata_sync.c b/src/backend/distributed/metadata/metadata_sync.c index e1e8d6b96..1d9dfd848 100644 --- a/src/backend/distributed/metadata/metadata_sync.c +++ b/src/backend/distributed/metadata/metadata_sync.c @@ -610,7 +610,7 @@ SyncNodeMetadataSnapshotToNode(WorkerNode *workerNode, bool raiseOnError) char *currentUser = CurrentUserName(); /* generate and add the local group id's update query */ - char *localGroupIdUpdateCommand = LocalGroupIdUpdateCommand(workerNode->groupId); + //char *localGroupIdUpdateCommand = LocalGroupIdUpdateCommand(workerNode->groupId); /* generate the queries which drop the node metadata */ List *dropMetadataCommandList = NodeMetadataDropCommands(); @@ -618,7 +618,7 @@ SyncNodeMetadataSnapshotToNode(WorkerNode *workerNode, bool raiseOnError) /* generate the queries which create the node metadata from scratch */ List *createMetadataCommandList = NodeMetadataCreateCommands(); - List *recreateMetadataSnapshotCommandList = list_make1(localGroupIdUpdateCommand); + List *recreateMetadataSnapshotCommandList = NIL;//list_make1(localGroupIdUpdateCommand); recreateMetadataSnapshotCommandList = list_concat(recreateMetadataSnapshotCommandList, dropMetadataCommandList); recreateMetadataSnapshotCommandList = list_concat(recreateMetadataSnapshotCommandList, diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index f20babb73..b1fbc2599 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -857,6 +857,12 @@ SyncDistributedObjectsToNodeList(List *workerNodeList) Assert(ShouldPropagate()); + /* send commands to new workers, the current user should be a superuser */ + Assert(superuser()); + SendBareCommandListToWorkers( + list_make1(workerNode), + list_make1(LocalGroupIdUpdateCommand(workerNode->groupId))); + List *commandList = SyncDistributedObjectsCommandList(workerNode); /* send commands to new workers, the current user should be a superuser */ @@ -878,8 +884,9 @@ UpdateLocalGroupIdOnNode(WorkerNode *workerNode) /* send commands to new workers, the current user should be a superuser */ Assert(superuser()); - SendBareCommandListToWorkers( + SendMetadataCommandListToWorkerListInCoordinatedTransaction( list_make1(workerNode), + CurrentUserName(), commandList); } } @@ -1187,12 +1194,6 @@ ActivateNodeList(List *nodeList) bool syncMetadata = EnableMetadataSync && NodeIsPrimary(workerNode); if (syncMetadata) { - /* - * Update local group id first, as object dependency logic requires to have - * updated local group id. - */ - UpdateLocalGroupIdOnNode(workerNode); - /* * We are going to sync the metadata anyway in this transaction, so do * not fail just because the current metadata is not synced. diff --git a/src/backend/distributed/transaction/worker_transaction.c b/src/backend/distributed/transaction/worker_transaction.c index d4ea6a1c9..4ecde88a1 100644 --- a/src/backend/distributed/transaction/worker_transaction.c +++ b/src/backend/distributed/transaction/worker_transaction.c @@ -614,7 +614,7 @@ ErrorIfAnyMetadataNodeOutOfSync(List *metadataNodeList) bool IsWorkerTheCurrentNode(WorkerNode *workerNode) { - int connectionFlags = REQUIRE_METADATA_CONNECTION; + int connectionFlags = FORCE_NEW_CONNECTION; MultiConnection *workerConnection = GetNodeUserDatabaseConnection(connectionFlags, @@ -663,6 +663,7 @@ IsWorkerTheCurrentNode(WorkerNode *workerNode) } char *currentServerId = text_to_cstring(currentServerIdTextP); + CloseConnection(workerConnection); return strcmp(workerServerId, currentServerId) == 0; }