From 79a274e226662ef0a7fe04bcd368fc5f6bf3a028 Mon Sep 17 00:00:00 2001 From: Ahmet Gedemenli Date: Tue, 1 Jun 2021 13:45:01 +0300 Subject: [PATCH] Fix relname null bug when parallel execution (cherry picked from commit 69d39c0e8b907a4f9200e676abee0b031fbd5433) --- .../transaction/relation_access_tracking.c | 3 ++- .../regress/expected/multi_partitioning.out | 25 ++++++++++++++++--- src/test/regress/sql/multi_partitioning.sql | 9 ++++--- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/backend/distributed/transaction/relation_access_tracking.c b/src/backend/distributed/transaction/relation_access_tracking.c index 2f354cc83..022c35465 100644 --- a/src/backend/distributed/transaction/relation_access_tracking.c +++ b/src/backend/distributed/transaction/relation_access_tracking.c @@ -793,7 +793,8 @@ CheckConflictingRelationAccesses(Oid relationId, ShardPlacementAccessType access "foreign keys. Any parallel modification to " "those hash distributed tables in the same " "transaction can only be executed in sequential query " - "execution mode", relationName))); + "execution mode", + relationName != NULL ? relationName : ""))); /* * Switching to sequential mode is admittedly confusing and, could be useless diff --git a/src/test/regress/expected/multi_partitioning.out b/src/test/regress/expected/multi_partitioning.out index bcd90f753..6cfe80365 100644 --- a/src/test/regress/expected/multi_partitioning.out +++ b/src/test/regress/expected/multi_partitioning.out @@ -2015,9 +2015,28 @@ ALTER TABLE partitioning_test DETACH PARTITION partitioning_test_2009; ALTER TABLE partitioning_test DETACH PARTITION partitioning_test_2010; ALTER TABLE partitioning_test DETACH PARTITION partitioning_test_2011; ALTER TABLE partitioning_test DETACH PARTITION partitioning_test_2013; -DROP TABLE partitioning_test, partitioning_test_2008, partitioning_test_2009, - partitioning_test_2010, partitioning_test_2011, partitioning_test_2013, - reference_table, reference_table_2; +DROP TABLE partitioning_test_2008, partitioning_test_2009, partitioning_test_2010, + partitioning_test_2011, partitioning_test_2013, reference_table_2; +-- verify this doesn't crash and gives a debug message for dropped table +SET client_min_messages TO DEBUG1; +DROP TABLE partitioning_test, reference_table; +DEBUG: switching to sequential query execution mode +DETAIL: Table "" is modified, which might lead to data inconsistencies or distributed deadlocks via parallel accesses to hash distributed tables due to foreign keys. Any parallel modification to those hash distributed tables in the same transaction can only be executed in sequential query execution mode +CONTEXT: SQL statement "SELECT citus_drop_all_shards(v_obj.objid, v_obj.schema_name, v_obj.object_name)" +PL/pgSQL function citus_drop_trigger() line 16 at PERFORM +DEBUG: drop cascades to 2 other objects +DETAIL: drop cascades to constraint partitioning_reference_fkey_1660179 on table partitioning_schema.partitioning_test_1660179 +drop cascades to constraint partitioning_reference_fkey_1660181 on table partitioning_schema.partitioning_test_1660181 +DETAIL: from localhost:xxxxx +CONTEXT: SQL statement "SELECT citus_drop_all_shards(v_obj.objid, v_obj.schema_name, v_obj.object_name)" +PL/pgSQL function citus_drop_trigger() line 16 at PERFORM +DEBUG: drop cascades to 2 other objects +DETAIL: drop cascades to constraint partitioning_reference_fkey_1660180 on table partitioning_schema.partitioning_test_1660180 +drop cascades to constraint partitioning_reference_fkey_1660182 on table partitioning_schema.partitioning_test_1660182 +DETAIL: from localhost:xxxxx +CONTEXT: SQL statement "SELECT citus_drop_all_shards(v_obj.objid, v_obj.schema_name, v_obj.object_name)" +PL/pgSQL function citus_drop_trigger() line 16 at PERFORM +RESET client_min_messages; RESET SEARCH_PATH; -- not timestamp partitioned CREATE TABLE not_time_partitioned (x int, y int) PARTITION BY RANGE (x); diff --git a/src/test/regress/sql/multi_partitioning.sql b/src/test/regress/sql/multi_partitioning.sql index 13fd4c626..85f5a98a2 100644 --- a/src/test/regress/sql/multi_partitioning.sql +++ b/src/test/regress/sql/multi_partitioning.sql @@ -1191,9 +1191,12 @@ ALTER TABLE partitioning_test DETACH PARTITION partitioning_test_2010; ALTER TABLE partitioning_test DETACH PARTITION partitioning_test_2011; ALTER TABLE partitioning_test DETACH PARTITION partitioning_test_2013; -DROP TABLE partitioning_test, partitioning_test_2008, partitioning_test_2009, - partitioning_test_2010, partitioning_test_2011, partitioning_test_2013, - reference_table, reference_table_2; +DROP TABLE partitioning_test_2008, partitioning_test_2009, partitioning_test_2010, + partitioning_test_2011, partitioning_test_2013, reference_table_2; +-- verify this doesn't crash and gives a debug message for dropped table +SET client_min_messages TO DEBUG1; +DROP TABLE partitioning_test, reference_table; +RESET client_min_messages; RESET SEARCH_PATH;