diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index 574046185..74387591d 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -695,12 +695,11 @@ InterTableRelationshipCommandList(List **multipleTableIntegrationCommandList) * PgDistTableMetadataSyncCommandList returns the command list to sync the pg_dist_* * (except pg_dist_node) metadata. We call them as table metadata. */ -List * -PgDistTableMetadataSyncCommandList(void) +void +PgDistTableMetadataSyncCommandList(List **metadataSnapshotCommandList) { List *distributedTableList = CitusTableList(); List *propagatedTableList = NIL; - List *metadataSnapshotCommandList = NIL; /* create the list of tables whose metadata will be created */ CitusTableCacheEntry *cacheEntry = NULL; @@ -713,15 +712,16 @@ PgDistTableMetadataSyncCommandList(void) } /* remove all dist table and object related metadata first */ - metadataSnapshotCommandList = lappend(metadataSnapshotCommandList, - DELETE_ALL_PARTITIONS); - metadataSnapshotCommandList = lappend(metadataSnapshotCommandList, DELETE_ALL_SHARDS); - metadataSnapshotCommandList = lappend(metadataSnapshotCommandList, - DELETE_ALL_PLACEMENTS); - metadataSnapshotCommandList = lappend(metadataSnapshotCommandList, - DELETE_ALL_DISTRIBUTED_OBJECTS); - metadataSnapshotCommandList = lappend(metadataSnapshotCommandList, - DELETE_ALL_COLOCATION); + *metadataSnapshotCommandList = lappend(*metadataSnapshotCommandList, + DELETE_ALL_PARTITIONS); + *metadataSnapshotCommandList = lappend(*metadataSnapshotCommandList, + DELETE_ALL_SHARDS); + *metadataSnapshotCommandList = lappend(*metadataSnapshotCommandList, + DELETE_ALL_PLACEMENTS); + *metadataSnapshotCommandList = lappend(*metadataSnapshotCommandList, + DELETE_ALL_DISTRIBUTED_OBJECTS); + *metadataSnapshotCommandList = lappend(*metadataSnapshotCommandList, + DELETE_ALL_COLOCATION); /* create pg_dist_partition, pg_dist_shard and pg_dist_placement entries */ foreach_ptr(cacheEntry, propagatedTableList) @@ -729,25 +729,23 @@ PgDistTableMetadataSyncCommandList(void) List *tableMetadataCreateCommandList = CitusTableMetadataCreateCommandList(cacheEntry->relationId); - metadataSnapshotCommandList = list_concat(metadataSnapshotCommandList, - tableMetadataCreateCommandList); + *metadataSnapshotCommandList = list_concat(*metadataSnapshotCommandList, + tableMetadataCreateCommandList); } /* commands to insert pg_dist_colocation entries */ List *colocationGroupSyncCommandList = ColocationGroupCreateCommandList(); - metadataSnapshotCommandList = list_concat(metadataSnapshotCommandList, - colocationGroupSyncCommandList); + *metadataSnapshotCommandList = list_concat(*metadataSnapshotCommandList, + colocationGroupSyncCommandList); List *distributedObjectSyncCommandList = DistributedObjectMetadataSyncCommandList(); - metadataSnapshotCommandList = list_concat(metadataSnapshotCommandList, - distributedObjectSyncCommandList); + *metadataSnapshotCommandList = list_concat(*metadataSnapshotCommandList, + distributedObjectSyncCommandList); - metadataSnapshotCommandList = lcons(DISABLE_DDL_PROPAGATION, - metadataSnapshotCommandList); - metadataSnapshotCommandList = lappend(metadataSnapshotCommandList, - ENABLE_DDL_PROPAGATION); - - return metadataSnapshotCommandList; + *metadataSnapshotCommandList = lcons(DISABLE_DDL_PROPAGATION, + *metadataSnapshotCommandList); + *metadataSnapshotCommandList = lappend(*metadataSnapshotCommandList, + ENABLE_DDL_PROPAGATION); } @@ -942,7 +940,9 @@ SyncPgDistTableMetadataToNodeList(List *nodeList) return; } - List *syncPgDistMetadataCommandList = PgDistTableMetadataSyncCommandList(); + List *syncPgDistMetadataCommandList = NIL; + PgDistTableMetadataSyncCommandList(&syncPgDistMetadataCommandList); + SendMetadataCommandListToWorkerListInCoordinatedTransaction( nodesWithMetadata, CurrentUserName(), diff --git a/src/backend/distributed/test/metadata_sync.c b/src/backend/distributed/test/metadata_sync.c index 293fe51aa..663312b10 100644 --- a/src/backend/distributed/test/metadata_sync.c +++ b/src/backend/distributed/test/metadata_sync.c @@ -57,7 +57,9 @@ activate_node_snapshot(PG_FUNCTION_ARGS) List *dropSnapshotCommands = NodeMetadataDropCommands(); List *createSnapshotCommands = NodeMetadataCreateCommands(); - List *pgDistTableMetadataSyncCommands = PgDistTableMetadataSyncCommandList(); + + List *pgDistTableMetadataSyncCommands = NIL; + PgDistTableMetadataSyncCommandList(&pgDistTableMetadataSyncCommands); List *activateNodeCommandList = NIL; int activateNodeCommandIndex = 0; diff --git a/src/include/distributed/worker_manager.h b/src/include/distributed/worker_manager.h index 875c1b304..9305963eb 100644 --- a/src/include/distributed/worker_manager.h +++ b/src/include/distributed/worker_manager.h @@ -107,7 +107,7 @@ extern uint32 CountPrimariesWithMetadata(void); extern WorkerNode * GetFirstPrimaryWorkerNode(void); extern List * SyncDistributedObjectsCommandList(WorkerNode *workerNode, List **commandList); -extern List * PgDistTableMetadataSyncCommandList(void); +extern void PgDistTableMetadataSyncCommandList(List **metadataSnapshotCommandList); /* Function declarations for worker node utilities */ extern int CompareWorkerNodes(const void *leftElement, const void *rightElement);