diff --git a/src/backend/distributed/commands/function.c b/src/backend/distributed/commands/function.c index a9c29b3e1..398d803d6 100644 --- a/src/backend/distributed/commands/function.c +++ b/src/backend/distributed/commands/function.c @@ -1147,7 +1147,7 @@ TriggerSyncMetadataToPrimaryNodes(void) /* let the maintanince deamon know about the metadata sync */ if (triggerMetadataSync) { - TriggerMetadataSyncOnCommit(); + TriggerMetadataSync(MyDatabaseId); } } diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index 335cb115b..65176152a 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -444,7 +444,7 @@ SetUpDistributedTableDependencies(WorkerNode *newWorkerNode) { MarkNodeHasMetadata(newWorkerNode->workerName, newWorkerNode->workerPort, true); - TriggerMetadataSyncOnCommit(); + TriggerMetadataSync(MyDatabaseId); } } } @@ -810,7 +810,7 @@ master_update_node(PG_FUNCTION_ARGS) */ if (UnsetMetadataSyncedForAll()) { - TriggerMetadataSyncOnCommit(); + TriggerMetadataSync(MyDatabaseId); } if (handle != NULL) diff --git a/src/backend/distributed/test/metadata_sync.c b/src/backend/distributed/test/metadata_sync.c index 47e12ce7a..c2dc1ce4f 100644 --- a/src/backend/distributed/test/metadata_sync.c +++ b/src/backend/distributed/test/metadata_sync.c @@ -135,7 +135,7 @@ wait_until_metadata_sync(PG_FUNCTION_ARGS) Datum trigger_metadata_sync(PG_FUNCTION_ARGS) { - TriggerMetadataSyncOnCommit(); + TriggerMetadataSync(MyDatabaseId); PG_RETURN_VOID(); } diff --git a/src/backend/distributed/transaction/transaction_management.c b/src/backend/distributed/transaction/transaction_management.c index 96a4180a4..1999c836c 100644 --- a/src/backend/distributed/transaction/transaction_management.c +++ b/src/backend/distributed/transaction/transaction_management.c @@ -28,7 +28,6 @@ #include "distributed/listutils.h" #include "distributed/local_executor.h" #include "distributed/locally_reserved_shared_connections.h" -#include "distributed/maintenanced.h" #include "distributed/multi_executor.h" #include "distributed/multi_explain.h" #include "distributed/repartition_join_execution.h" @@ -103,9 +102,6 @@ bool CoordinatedTransactionUses2PC = false; /* if disabled, distributed statements in a function may run as separate transactions */ bool FunctionOpensTransactionBlock = true; -/* if true, we should trigger metadata sync on commit */ -bool MetadataSyncOnCommit = false; - /* transaction management functions */ static void CoordinatedTransactionCallback(XactEvent event, void *arg); @@ -266,15 +262,6 @@ CoordinatedTransactionCallback(XactEvent event, void *arg) AfterXactConnectionHandling(true); } - /* - * Changes to catalog tables are now visible to the metadata sync - * daemon, so we can trigger metadata sync if necessary. - */ - if (MetadataSyncOnCommit) - { - TriggerMetadataSync(MyDatabaseId); - } - ResetGlobalVariables(); /* @@ -487,7 +474,6 @@ ResetGlobalVariables() activeSetStmts = NULL; CoordinatedTransactionUses2PC = false; TransactionModifiedNodeMetadata = false; - MetadataSyncOnCommit = false; ResetWorkerErrorIndication(); } @@ -742,15 +728,3 @@ MaybeExecutingUDF(void) { return ExecutorLevel > 1 || (ExecutorLevel == 1 && PlannerLevel > 0); } - - -/* - * TriggerMetadataSyncOnCommit sets a flag to do metadata sync on commit. - * This is because new metadata only becomes visible to the metadata sync - * daemon after commit happens. - */ -void -TriggerMetadataSyncOnCommit(void) -{ - MetadataSyncOnCommit = true; -} diff --git a/src/include/distributed/transaction_management.h b/src/include/distributed/transaction_management.h index f6bac9100..a0a595fac 100644 --- a/src/include/distributed/transaction_management.h +++ b/src/include/distributed/transaction_management.h @@ -121,7 +121,6 @@ extern void InitializeTransactionManagement(void); /* other functions */ extern List * ActiveSubXactContexts(void); extern StringInfo BeginAndSetDistributedTransactionIdCommand(void); -extern void TriggerMetadataSyncOnCommit(void); #endif /* TRANSACTION_MANAGMENT_H */ diff --git a/src/test/regress/expected/isolation_metadata_sync_deadlock.out b/src/test/regress/expected/isolation_metadata_sync_deadlock.out index e19498f6f..0977caeea 100644 --- a/src/test/regress/expected/isolation_metadata_sync_deadlock.out +++ b/src/test/regress/expected/isolation_metadata_sync_deadlock.out @@ -1,6 +1,6 @@ Parsed test spec with 3 sessions -starting permutation: enable-deadlock-detection reload-conf s2-start-session-level-connection s1-begin s1-update-1 s2-begin-on-worker s2-update-2-on-worker s2-truncate-on-worker s3-invalidate-metadata s3-resync s3-wait s2-update-1-on-worker s1-update-2 s1-commit s2-commit-on-worker disable-deadlock-detection reload-conf s2-stop-connection +starting permutation: enable-deadlock-detection reload-conf s2-start-session-level-connection s1-begin s1-update-1 s2-begin-on-worker s2-update-2-on-worker s2-truncate-on-worker s3-invalidate-metadata s3-resync s2-update-1-on-worker s1-update-2 s1-commit s2-commit-on-worker disable-deadlock-detection reload-conf s2-stop-connection create_distributed_table @@ -48,13 +48,11 @@ step s3-invalidate-metadata: step s3-resync: SELECT trigger_metadata_sync(); + SELECT pg_sleep(2); trigger_metadata_sync -step s3-wait: - SELECT pg_sleep(2); - pg_sleep @@ -98,7 +96,7 @@ restore_isolation_tester_func -starting permutation: increase-retry-interval reload-conf s2-start-session-level-connection s2-begin-on-worker s2-truncate-on-worker s3-invalidate-metadata s3-resync s3-wait s1-count-daemons s1-cancel-metadata-sync s1-count-daemons reset-retry-interval reload-conf s2-commit-on-worker s2-stop-connection s3-resync s3-wait +starting permutation: increase-retry-interval reload-conf s2-start-session-level-connection s2-begin-on-worker s2-truncate-on-worker s3-invalidate-metadata s3-resync s1-count-daemons s1-cancel-metadata-sync s1-count-daemons reset-retry-interval reload-conf s2-commit-on-worker s2-stop-connection s3-resync create_distributed_table @@ -134,13 +132,11 @@ step s3-invalidate-metadata: step s3-resync: SELECT trigger_metadata_sync(); + SELECT pg_sleep(2); trigger_metadata_sync -step s3-wait: - SELECT pg_sleep(2); - pg_sleep @@ -189,13 +185,11 @@ stop_session_level_connection_to_node step s3-resync: SELECT trigger_metadata_sync(); + SELECT pg_sleep(2); trigger_metadata_sync -step s3-wait: - SELECT pg_sleep(2); - pg_sleep diff --git a/src/test/regress/spec/isolation_metadata_sync_deadlock.spec b/src/test/regress/spec/isolation_metadata_sync_deadlock.spec index c5cabfd84..9aa9a05b2 100644 --- a/src/test/regress/spec/isolation_metadata_sync_deadlock.spec +++ b/src/test/regress/spec/isolation_metadata_sync_deadlock.spec @@ -134,10 +134,6 @@ step "s3-invalidate-metadata" step "s3-resync" { SELECT trigger_metadata_sync(); -} - -step "s3-wait" -{ SELECT pg_sleep(2); } @@ -146,8 +142,8 @@ step "s3-wait" // causes the concurrent metadata sync to be blocked. But s2 and s1 themselves are // themselves involved in a distributed deadlock. // See https://github.com/citusdata/citus/issues/4393 for more details. -permutation "enable-deadlock-detection" "reload-conf" "s2-start-session-level-connection" "s1-begin" "s1-update-1" "s2-begin-on-worker" "s2-update-2-on-worker" "s2-truncate-on-worker" "s3-invalidate-metadata" "s3-resync" "s3-wait" "s2-update-1-on-worker" "s1-update-2" "s1-commit" "s2-commit-on-worker" "disable-deadlock-detection" "reload-conf" "s2-stop-connection" +permutation "enable-deadlock-detection" "reload-conf" "s2-start-session-level-connection" "s1-begin" "s1-update-1" "s2-begin-on-worker" "s2-update-2-on-worker" "s2-truncate-on-worker" "s3-invalidate-metadata" "s3-resync" "s2-update-1-on-worker" "s1-update-2" "s1-commit" "s2-commit-on-worker" "disable-deadlock-detection" "reload-conf" "s2-stop-connection" // Test that when metadata sync is waiting for locks, cancelling it terminates it. // This is important in cases where the metadata sync daemon itself is involved in a deadlock. -permutation "increase-retry-interval" "reload-conf" "s2-start-session-level-connection" "s2-begin-on-worker" "s2-truncate-on-worker" "s3-invalidate-metadata" "s3-resync" "s3-wait" "s1-count-daemons" "s1-cancel-metadata-sync" "s1-count-daemons" "reset-retry-interval" "reload-conf" "s2-commit-on-worker" "s2-stop-connection" "s3-resync" "s3-wait" +permutation "increase-retry-interval" "reload-conf" "s2-start-session-level-connection" "s2-begin-on-worker" "s2-truncate-on-worker" "s3-invalidate-metadata" "s3-resync" "s1-count-daemons" "s1-cancel-metadata-sync" "s1-count-daemons" "reset-retry-interval" "reload-conf" "s2-commit-on-worker" "s2-stop-connection" "s3-resync"