From ef2ca03f24d4d1d7549c4e6c0af1284a34cb7f88 Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Wed, 10 Nov 2021 15:15:54 +0300 Subject: [PATCH] Reproduce bug via test suite --- src/test/regress/before_pg_upgrade_schedule | 5 +++- .../expected/upgrade_autoconverted_after.out | 10 +++---- .../expected/upgrade_columnar_before.out | 27 +++++++++++++++++++ .../expected/upgrade_list_citus_objects.out | 2 +- .../sql/upgrade_autoconverted_after.sql | 4 +-- .../regress/sql/upgrade_columnar_before.sql | 26 ++++++++++++++++++ 6 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/test/regress/before_pg_upgrade_schedule b/src/test/regress/before_pg_upgrade_schedule index be691bed1..3af949a47 100644 --- a/src/test/regress/before_pg_upgrade_schedule +++ b/src/test/regress/before_pg_upgrade_schedule @@ -3,8 +3,11 @@ test: turn_mx_off test: multi_test_helpers multi_test_helpers_superuser test: multi_test_catalog_views test: upgrade_basic_before -test: upgrade_columnar_before test: upgrade_ref2ref_before test: upgrade_type_before test: upgrade_distributed_function_before upgrade_rebalance_strategy_before test: upgrade_autoconverted_before + +# upgrade_columnar_before renames public schema to citus_schema, so let's +# run this test as the last one. +test: upgrade_columnar_before diff --git a/src/test/regress/expected/upgrade_autoconverted_after.out b/src/test/regress/expected/upgrade_autoconverted_after.out index 06c93c173..61968a3e3 100644 --- a/src/test/regress/expected/upgrade_autoconverted_after.out +++ b/src/test/regress/expected/upgrade_autoconverted_after.out @@ -1,9 +1,9 @@ select logicalrelid, autoconverted from pg_dist_partition - where logicalrelid IN ('citus_local_autoconverted'::regclass, - 'citus_local_not_autoconverted'::regclass); - logicalrelid | autoconverted + where logicalrelid IN ('citus_schema.citus_local_autoconverted'::regclass, + 'citus_schema.citus_local_not_autoconverted'::regclass); + logicalrelid | autoconverted --------------------------------------------------------------------- - citus_local_autoconverted | t - citus_local_not_autoconverted | f + citus_schema.citus_local_autoconverted | t + citus_schema.citus_local_not_autoconverted | f (2 rows) diff --git a/src/test/regress/expected/upgrade_columnar_before.out b/src/test/regress/expected/upgrade_columnar_before.out index 4b730148c..8e8494d31 100644 --- a/src/test/regress/expected/upgrade_columnar_before.out +++ b/src/test/regress/expected/upgrade_columnar_before.out @@ -5,6 +5,33 @@ SELECT substring(:'server_version', '\d+')::int > 11 AS server_version_above_ele \else \q \endif +-- Test if relying on topological sort of the objects, not their names, works +-- fine when re-creating objects during pg_upgrade. +ALTER SCHEMA public RENAME TO citus_schema; +SET search_path TO citus_schema; +-- As mentioned in https://github.com/citusdata/citus/issues/5447, it +-- is essential to already have public schema to be able to use +-- citus_prepare_pg_upgrade. Until fixing that bug, let's create public +-- schema here on all nodes. +CREATE SCHEMA IF NOT EXISTS public; +-- Do "SELECT 1" to hide port numbers +SELECT 1 FROM run_command_on_workers($$CREATE SCHEMA IF NOT EXISTS public$$); + ?column? +--------------------------------------------------------------------- + 1 + 1 +(2 rows) + +-- create a columnar table within citus_schema +CREATE TABLE new_columnar_table ( + col_1 character varying(100), + col_2 date, + col_3 character varying(100), + col_4 date +) USING columnar; +INSERT INTO new_columnar_table +SELECT ('1', '1999-01-01'::timestamp, '1', '1999-01-01'::timestamp) +FROM generate_series(1, 1000); CREATE SCHEMA upgrade_columnar; SET search_path TO upgrade_columnar, public; CREATE TYPE compfoo AS (f1 int, f2 text); diff --git a/src/test/regress/expected/upgrade_list_citus_objects.out b/src/test/regress/expected/upgrade_list_citus_objects.out index 8c3a100f0..c02bab863 100644 --- a/src/test/regress/expected/upgrade_list_citus_objects.out +++ b/src/test/regress/expected/upgrade_list_citus_objects.out @@ -250,11 +250,11 @@ ORDER BY 1; type noderole view citus_dist_stat_activity view citus_lock_waits + view citus_schema.citus_tables view citus_shard_indexes_on_worker view citus_shards view citus_shards_on_worker view citus_stat_statements - view citus_tables view citus_worker_stat_activity view pg_dist_shard_placement view time_partitions diff --git a/src/test/regress/sql/upgrade_autoconverted_after.sql b/src/test/regress/sql/upgrade_autoconverted_after.sql index 8c5d31cb4..5541ee36e 100644 --- a/src/test/regress/sql/upgrade_autoconverted_after.sql +++ b/src/test/regress/sql/upgrade_autoconverted_after.sql @@ -1,3 +1,3 @@ select logicalrelid, autoconverted from pg_dist_partition - where logicalrelid IN ('citus_local_autoconverted'::regclass, - 'citus_local_not_autoconverted'::regclass); + where logicalrelid IN ('citus_schema.citus_local_autoconverted'::regclass, + 'citus_schema.citus_local_not_autoconverted'::regclass); diff --git a/src/test/regress/sql/upgrade_columnar_before.sql b/src/test/regress/sql/upgrade_columnar_before.sql index c6a4371f7..1f83a4d5a 100644 --- a/src/test/regress/sql/upgrade_columnar_before.sql +++ b/src/test/regress/sql/upgrade_columnar_before.sql @@ -6,6 +6,32 @@ SELECT substring(:'server_version', '\d+')::int > 11 AS server_version_above_ele \q \endif +-- Test if relying on topological sort of the objects, not their names, works +-- fine when re-creating objects during pg_upgrade. +ALTER SCHEMA public RENAME TO citus_schema; +SET search_path TO citus_schema; + +-- As mentioned in https://github.com/citusdata/citus/issues/5447, it +-- is essential to already have public schema to be able to use +-- citus_prepare_pg_upgrade. Until fixing that bug, let's create public +-- schema here on all nodes. +CREATE SCHEMA IF NOT EXISTS public; + +-- Do "SELECT 1" to hide port numbers +SELECT 1 FROM run_command_on_workers($$CREATE SCHEMA IF NOT EXISTS public$$); + +-- create a columnar table within citus_schema +CREATE TABLE new_columnar_table ( + col_1 character varying(100), + col_2 date, + col_3 character varying(100), + col_4 date +) USING columnar; + +INSERT INTO new_columnar_table +SELECT ('1', '1999-01-01'::timestamp, '1', '1999-01-01'::timestamp) +FROM generate_series(1, 1000); + CREATE SCHEMA upgrade_columnar; SET search_path TO upgrade_columnar, public;