Mark autoConverted=false when cascading

talha_tes1
Ahmet Gedemenli 2021-10-21 16:33:33 +03:00
parent 561948d7d4
commit 89b14bb03e
4 changed files with 50 additions and 17 deletions

View File

@ -87,7 +87,8 @@ CascadeOperationForRelationIdList(List *relationIdList, LOCKMODE lockMode,
{
LockRelationsWithLockMode(relationIdList, lockMode);
if (cascadeOperationType == CASCADE_ADD_LOCAL_TABLE_TO_METADATA)
if (cascadeOperationType == CASCADE_USER_ADD_LOCAL_TABLE_TO_METADATA ||
cascadeOperationType == CASCADE_AUTO_ADD_LOCAL_TABLE_TO_METADATA)
{
/*
* In CreateCitusLocalTable function, this check would never error out,
@ -474,11 +475,25 @@ ExecuteCascadeOperationForRelationIdList(List *relationIdList,
break;
}
case CASCADE_ADD_LOCAL_TABLE_TO_METADATA:
case CASCADE_USER_ADD_LOCAL_TABLE_TO_METADATA:
{
if (!IsCitusTable(relationId))
{
CreateCitusLocalTable(relationId, cascadeViaForeignKeys, true);
bool autoConverted = false;
CreateCitusLocalTable(relationId, cascadeViaForeignKeys,
autoConverted);
}
break;
}
case CASCADE_AUTO_ADD_LOCAL_TABLE_TO_METADATA:
{
if (!IsCitusTable(relationId))
{
bool autoConverted = true;
CreateCitusLocalTable(relationId, cascadeViaForeignKeys,
autoConverted);
}
break;

View File

@ -52,6 +52,7 @@ static void ErrorIfAddingPartitionTableToMetadata(Oid relationId);
static void ErrorIfUnsupportedCreateCitusLocalTable(Relation relation);
static void ErrorIfUnsupportedCitusLocalTableKind(Oid relationId);
static void ErrorIfUnsupportedCitusLocalColumnDefinition(Relation relation);
static CascadeOperationType GetCascadeTypeForCitusLocalTables(bool autoConverted);
static List * GetShellTableDDLEventsForCitusLocalTable(Oid relationId);
static uint64 ConvertLocalTableToShard(Oid relationId);
static void RenameRelationToShardRelation(Oid shellRelationId, uint64 shardId);
@ -260,20 +261,14 @@ CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys, bool autoConve
qualifiedRelationName, qualifiedRelationName)));
}
/* save the relation name, to obtain the shell relation id later */
char *relationName = get_rel_name(relationId);
Oid relationSchemaId = get_rel_namespace(relationId);
CascadeOperationType cascadeType =
GetCascadeTypeForCitusLocalTables(autoConverted);
/*
* By acquiring AccessExclusiveLock, make sure that no modifications happen
* on the relations.
*/
CascadeOperationForFkeyConnectedRelations(relationId, lockMode,
CASCADE_ADD_LOCAL_TABLE_TO_METADATA);
Oid shellRelationId = get_relname_relid(relationName, relationSchemaId);
UpdatePartitionAutoConverted(shellRelationId, autoConverted);
CascadeOperationForFkeyConnectedRelations(relationId, lockMode, cascadeType);
/*
* We converted every foreign key connected table in our subgraph
@ -289,8 +284,11 @@ CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys, bool autoConve
{
relationList = lappend_oid(relationList, relationId);
CascadeOperationType cascadeType =
GetCascadeTypeForCitusLocalTables(autoConverted);
CascadeOperationForRelationIdList(relationList, AccessExclusiveLock,
CASCADE_ADD_LOCAL_TABLE_TO_METADATA);
cascadeType);
return;
}
}
@ -549,6 +547,22 @@ ErrorIfUnsupportedCitusLocalColumnDefinition(Relation relation)
}
/*
* GetCascadeTypeForCitusLocalTables returns CASCADE_AUTO_ADD_LOCAL_TABLE_TO_METADATA
* if autoConverted is true. Returns CASCADE_USER_ADD_LOCAL_TABLE_TO_METADATA otherwise.
*/
static CascadeOperationType
GetCascadeTypeForCitusLocalTables(bool autoConverted)
{
if (autoConverted)
{
return CASCADE_AUTO_ADD_LOCAL_TABLE_TO_METADATA;
}
return CASCADE_USER_ADD_LOCAL_TABLE_TO_METADATA;
}
/*
* GetShellTableDDLEventsForCitusLocalTable returns a list of DDL commands
* to create the shell table from scratch.

View File

@ -512,8 +512,11 @@ typedef enum CascadeOperationType
/* execute UndistributeTable on each relation */
CASCADE_FKEY_UNDISTRIBUTE_TABLE = 1 << 1,
/* execute CreateCitusLocalTable on each relation */
CASCADE_ADD_LOCAL_TABLE_TO_METADATA = 1 << 2,
/* execute CreateCitusLocalTable on each relation, with autoConverted = false */
CASCADE_USER_ADD_LOCAL_TABLE_TO_METADATA = 1 << 2,
/* execute CreateCitusLocalTable on each relation, with autoConverted = true */
CASCADE_AUTO_ADD_LOCAL_TABLE_TO_METADATA = 1 << 3,
} CascadeOperationType;
extern void CascadeOperationForFkeyConnectedRelations(Oid relationId,

View File

@ -476,7 +476,7 @@ SELECT logicalrelid, autoconverted FROM pg_dist_partition
logicalrelid | autoconverted
---------------------------------------------------------------------
citus_local_table_1 | f
citus_local_table_2 | t
citus_local_table_2 | f
citus_local_table_3 | f
(3 rows)
@ -489,8 +489,9 @@ SELECT logicalrelid, autoconverted FROM pg_dist_partition
logicalrelid | autoconverted
---------------------------------------------------------------------
citus_local_table_1 | f
citus_local_table_2 | f
citus_local_table_3 | f
(2 rows)
(3 rows)
-- a single drop table cascades into multiple undistributes
DROP TABLE IF EXISTS citus_local_table_1, citus_local_table_2, citus_local_table_3, citus_local_table_2, reference_table_1;