mirror of https://github.com/citusdata/citus.git
Make sure to disallow creating a replicated distributed table concurrently (#7219)
See explanation in https://github.com/citusdata/citus/issues/7216.
Fixes https://github.com/citusdata/citus/issues/7216.
DESCRIPTION: Makes sure to disallow creating a replicated distributed
table concurrently
(cherry picked from commit 111b4c19bc
)
pull/7339/head
parent
e59ffbf549
commit
a4fe969947
|
@ -445,6 +445,19 @@ CreateDistributedTableConcurrently(Oid relationId, char *distributionColumnName,
|
|||
if (!IsColocateWithDefault(colocateWithTableName) && !IsColocateWithNone(
|
||||
colocateWithTableName))
|
||||
{
|
||||
if (replicationModel != REPLICATION_MODEL_STREAMING)
|
||||
{
|
||||
ereport(ERROR, (errmsg("cannot create distributed table "
|
||||
"concurrently because Citus allows "
|
||||
"concurrent table distribution only when "
|
||||
"citus.shard_replication_factor = 1"),
|
||||
errhint("table %s is requested to be colocated "
|
||||
"with %s which has "
|
||||
"citus.shard_replication_factor > 1",
|
||||
get_rel_name(relationId),
|
||||
colocateWithTableName)));
|
||||
}
|
||||
|
||||
EnsureColocateWithTableIsValid(relationId, distributionMethod,
|
||||
distributionColumnName,
|
||||
colocateWithTableName);
|
||||
|
|
|
@ -36,6 +36,19 @@ set citus.shard_replication_factor to 2;
|
|||
select create_distributed_table_concurrently('test','key', 'hash');
|
||||
ERROR: cannot distribute a table concurrently when citus.shard_replication_factor > 1
|
||||
set citus.shard_replication_factor to 1;
|
||||
set citus.shard_replication_factor to 2;
|
||||
create table dist_1(a int);
|
||||
select create_distributed_table('dist_1', 'a');
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
set citus.shard_replication_factor to 1;
|
||||
create table dist_2(a int);
|
||||
select create_distributed_table_concurrently('dist_2', 'a', colocate_with=>'dist_1');
|
||||
ERROR: cannot create distributed table concurrently because Citus allows concurrent table distribution only when citus.shard_replication_factor = 1
|
||||
HINT: table dist_2 is requested to be colocated with dist_1 which has citus.shard_replication_factor > 1
|
||||
begin;
|
||||
select create_distributed_table_concurrently('test','key');
|
||||
ERROR: create_distributed_table_concurrently cannot run inside a transaction block
|
||||
|
@ -138,27 +151,8 @@ select count(*) from test;
|
|||
rollback;
|
||||
-- verify that we can undistribute the table
|
||||
begin;
|
||||
set local client_min_messages to warning;
|
||||
select undistribute_table('test', cascade_via_foreign_keys := true);
|
||||
NOTICE: converting the partitions of create_distributed_table_concurrently.test
|
||||
NOTICE: creating a new table for create_distributed_table_concurrently.test
|
||||
NOTICE: dropping the old create_distributed_table_concurrently.test
|
||||
NOTICE: renaming the new table to create_distributed_table_concurrently.test
|
||||
NOTICE: creating a new table for create_distributed_table_concurrently.ref
|
||||
NOTICE: moving the data of create_distributed_table_concurrently.ref
|
||||
NOTICE: dropping the old create_distributed_table_concurrently.ref
|
||||
NOTICE: drop cascades to constraint test_id_fkey_1190041 on table create_distributed_table_concurrently.test_1190041
|
||||
CONTEXT: SQL statement "SELECT citus_drop_all_shards(v_obj.objid, v_obj.schema_name, v_obj.object_name, drop_shards_metadata_only := false)"
|
||||
PL/pgSQL function citus_drop_trigger() line XX at PERFORM
|
||||
SQL statement "DROP TABLE create_distributed_table_concurrently.ref CASCADE"
|
||||
NOTICE: renaming the new table to create_distributed_table_concurrently.ref
|
||||
NOTICE: creating a new table for create_distributed_table_concurrently.test_1
|
||||
NOTICE: moving the data of create_distributed_table_concurrently.test_1
|
||||
NOTICE: dropping the old create_distributed_table_concurrently.test_1
|
||||
NOTICE: renaming the new table to create_distributed_table_concurrently.test_1
|
||||
NOTICE: creating a new table for create_distributed_table_concurrently.test_2
|
||||
NOTICE: moving the data of create_distributed_table_concurrently.test_2
|
||||
NOTICE: dropping the old create_distributed_table_concurrently.test_2
|
||||
NOTICE: renaming the new table to create_distributed_table_concurrently.test_2
|
||||
undistribute_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -28,6 +28,14 @@ set citus.shard_replication_factor to 2;
|
|||
select create_distributed_table_concurrently('test','key', 'hash');
|
||||
set citus.shard_replication_factor to 1;
|
||||
|
||||
set citus.shard_replication_factor to 2;
|
||||
create table dist_1(a int);
|
||||
select create_distributed_table('dist_1', 'a');
|
||||
set citus.shard_replication_factor to 1;
|
||||
|
||||
create table dist_2(a int);
|
||||
select create_distributed_table_concurrently('dist_2', 'a', colocate_with=>'dist_1');
|
||||
|
||||
begin;
|
||||
select create_distributed_table_concurrently('test','key');
|
||||
rollback;
|
||||
|
@ -63,6 +71,7 @@ rollback;
|
|||
|
||||
-- verify that we can undistribute the table
|
||||
begin;
|
||||
set local client_min_messages to warning;
|
||||
select undistribute_table('test', cascade_via_foreign_keys := true);
|
||||
rollback;
|
||||
|
||||
|
|
Loading…
Reference in New Issue