diff --git a/src/backend/distributed/commands/citus_add_local_table_to_metadata.c b/src/backend/distributed/commands/citus_add_local_table_to_metadata.c index bb48a53a5..ee137b2cb 100644 --- a/src/backend/distributed/commands/citus_add_local_table_to_metadata.c +++ b/src/backend/distributed/commands/citus_add_local_table_to_metadata.c @@ -1239,23 +1239,15 @@ FinalizeCitusLocalTableCreation(Oid relationId, List *dependentSequenceList) CreateTruncateTrigger(relationId); } - CreateShellTableOnWorkers(relationId); - - ObjectAddress relationAddress = { 0 }; - ObjectAddressSet(relationAddress, RelationRelationId, relationId); if (ShouldSyncTableMetadata(relationId)) { + CreateShellTableOnWorkers(relationId); CreateTableMetadataOnWorkers(relationId); + + ObjectAddress relationAddress = { 0 }; + ObjectAddressSet(relationAddress, RelationRelationId, relationId); MarkObjectDistributed(&relationAddress); } - else - { - /* Mark the table as distributed only locally */ - bool prevDependencyCreationValue = EnableDependencyCreation; - SetLocalEnableDependencyCreation(false); - MarkObjectDistributed(&relationAddress); - SetLocalEnableDependencyCreation(prevDependencyCreationValue); - } /* * We've a custom way of foreign key graph invalidation, diff --git a/src/backend/distributed/commands/create_distributed_table.c b/src/backend/distributed/commands/create_distributed_table.c index 588c4126d..43ed092ad 100644 --- a/src/backend/distributed/commands/create_distributed_table.c +++ b/src/backend/distributed/commands/create_distributed_table.c @@ -532,19 +532,16 @@ CreateDistributedTable(Oid relationId, Var *distributionColumn, char distributio CreateReferenceTableShard(relationId); } - CreateShellTableOnWorkers(relationId); if (ShouldSyncTableMetadata(relationId)) { + CreateShellTableOnWorkers(relationId); MarkObjectDistributed(&tableAddress); CreateTableMetadataOnWorkers(relationId); } else { - /* Mark the table as distributed only locally */ - bool prevDependencyCreationValue = EnableDependencyCreation; - SetLocalEnableDependencyCreation(false); - MarkObjectDistributed(&tableAddress); - SetLocalEnableDependencyCreation(prevDependencyCreationValue); + // sync etmedigimizi ignore ediyoruz commenti, ozellikle append dist tablolar icin + // backward compatible olarak calisacak, sync de yapsak gitmicek } /* @@ -602,11 +599,15 @@ CreateDistributedTable(Oid relationId, Var *distributionColumn, char distributio * If any other distributed table uses the input sequence, it checks whether * the types of the columns using the sequence match. If they don't, it errors out. * Otherwise, the condition is ensured. + * Since the owner relation id may not have been distributed yet, we need to check it + * in addition all citus tables as well. */ void -EnsureSequenceTypeSupported(Oid seqOid, Oid seqTypId) +EnsureSequenceTypeSupported(Oid seqOid, Oid seqTypId, Oid ownerRelationId) { List *citusTableIdList = CitusTableTypeIdList(ANY_CITUS_TABLE_TYPE); + citusTableIdList = lappend_oid(citusTableIdList, ownerRelationId); + Oid citusTableId = InvalidOid; foreach_oid(citusTableId, citusTableIdList) { @@ -750,7 +751,7 @@ EnsureDistributedSequencesHaveOneType(Oid relationId, List *dependentSequenceLis * that sequence is supported */ Oid seqTypId = GetAttributeTypeOid(relationId, attnum); - EnsureSequenceTypeSupported(sequenceOid, seqTypId); + EnsureSequenceTypeSupported(sequenceOid, seqTypId, relationId); /* * Alter the sequence's data type in the coordinator if needed. diff --git a/src/backend/distributed/commands/dependencies.c b/src/backend/distributed/commands/dependencies.c index b4e128545..e129a1ebe 100644 --- a/src/backend/distributed/commands/dependencies.c +++ b/src/backend/distributed/commands/dependencies.c @@ -236,7 +236,7 @@ GetDependencyCreateDDLCommands(const ObjectAddress *dependency) return NIL; } - if (relKind == RELKIND_RELATION) + if (relKind == RELKIND_RELATION || relKind == RELKIND_PARTITIONED_TABLE) { Oid relationId = dependency->objectId; if (IsCitusTable(relationId) && !IsTableOwnedByExtension(relationId)) @@ -255,7 +255,6 @@ GetDependencyCreateDDLCommands(const ObjectAddress *dependency) tableDDLCommand)); } - /* TODO: May need to move sequence dependencies to ActivateNode directly */ List *sequenceDependencyCommandList = SequenceDependencyCommandList( dependency->objectId); commandList = list_concat(commandList, sequenceDependencyCommandList); diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index 8d4deacbc..e949fe4f6 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -908,6 +908,7 @@ SetUpDistributedTableWithDependencies(WorkerNode *newWorkerNode) * transaction blocks. */ /* TODO: Doesn't make sense to have that here as we won't handle placement metadata */ + // TODO: Metadatasynced olmayan worker varsa patla (Onder'in PRinda gidebilir) /* with maintenance daemon anymore */ /* if (ClusterHasDistributedFunctionWithDistArgument()) diff --git a/src/include/distributed/metadata_utility.h b/src/include/distributed/metadata_utility.h index 299d33caf..34c994501 100644 --- a/src/include/distributed/metadata_utility.h +++ b/src/include/distributed/metadata_utility.h @@ -285,7 +285,7 @@ extern bool GetNodeDiskSpaceStatsForConnection(MultiConnection *connection, uint64 *availableBytes, uint64 *totalBytes); extern void ExecuteQueryViaSPI(char *query, int SPIOK); -extern void EnsureSequenceTypeSupported(Oid seqOid, Oid seqTypId); +extern void EnsureSequenceTypeSupported(Oid seqOid, Oid seqTypId, Oid ownerRelationId); extern void AlterSequenceType(Oid seqOid, Oid typeOid); extern void MarkSequenceListDistributedAndPropagateWithDependencies(Oid relationId, List *sequenceList); diff --git a/src/test/regress/multi_1_schedule b/src/test/regress/multi_1_schedule index d7cf50e14..566d85d72 100644 --- a/src/test/regress/multi_1_schedule +++ b/src/test/regress/multi_1_schedule @@ -35,8 +35,8 @@ test: alter_database_owner test: multi_test_catalog_views test: multi_table_ddl test: check_mx -test: turn_mx_off test: multi_sequence_default +test: turn_mx_off test: multi_name_lengths test: turn_mx_on test: multi_name_resolution diff --git a/src/test/regress/sql/multi_sequence_default.sql b/src/test/regress/sql/multi_sequence_default.sql index 4b0ac1ca3..583985e9d 100644 --- a/src/test/regress/sql/multi_sequence_default.sql +++ b/src/test/regress/sql/multi_sequence_default.sql @@ -12,6 +12,7 @@ SET search_path = sequence_default, public; -- test both distributed and citus local tables +table pg_dist_node; SELECT 1 FROM citus_add_node('localhost', :master_port, groupId => 0); -- Cannot add a column involving DEFAULT nextval('..') because the table is not empty CREATE SEQUENCE seq_0; @@ -91,7 +92,6 @@ CREATE TABLE seq_test_4 (x int, y int); SELECT create_distributed_table('seq_test_4','x'); CREATE SEQUENCE seq_4; ALTER TABLE seq_test_4 ADD COLUMN a bigint DEFAULT nextval('seq_4'); -SELECT start_metadata_sync_to_node('localhost', :worker_1_port); DROP SEQUENCE seq_4 CASCADE; TRUNCATE seq_test_4; CREATE SEQUENCE seq_4; @@ -366,7 +366,7 @@ SELECT create_reference_table('seq_test_10'); INSERT INTO seq_test_10 VALUES (0); CREATE TABLE seq_test_11 (col0 int, col1 bigint DEFAULT nextval('seq_11'::text)); -- works but doesn't create seq_11 in the workers -SELECT start_metadata_sync_to_node('localhost', :worker_1_port); +SELECT citus_activate_node('localhost', :worker_1_port); -- works because there is no dependency created between seq_11 and seq_test_10 SELECT create_distributed_table('seq_test_11', 'col1'); -- insertion from workers fails diff --git a/src/test/regress/sql/single_node.sql b/src/test/regress/sql/single_node.sql index 7703e06e2..eb1895feb 100644 --- a/src/test/regress/sql/single_node.sql +++ b/src/test/regress/sql/single_node.sql @@ -4,6 +4,10 @@ SET citus.shard_count TO 4; SET citus.shard_replication_factor TO 1; SET citus.next_shard_id TO 90630500; +table pg_dist_node; +table pg_dist_partition; +\d + -- Ensure tuple data in explain analyze output is the same on all PG versions SET citus.enable_binary_protocol = TRUE;