mirror of https://github.com/citusdata/citus.git
Refactor marking converted tables as not-autoconverted & add notice log
parent
098793fe16
commit
5304eeb291
|
@ -53,7 +53,9 @@ static void ErrorIfUnsupportedCreateCitusLocalTable(Relation relation);
|
||||||
static void ErrorIfUnsupportedCitusLocalTableKind(Oid relationId);
|
static void ErrorIfUnsupportedCitusLocalTableKind(Oid relationId);
|
||||||
static void ErrorIfUnsupportedCitusLocalColumnDefinition(Relation relation);
|
static void ErrorIfUnsupportedCitusLocalColumnDefinition(Relation relation);
|
||||||
static void NoticeIfAutoConvertingLocalTables(bool autoConverted);
|
static void NoticeIfAutoConvertingLocalTables(bool autoConverted);
|
||||||
|
static void NoticeRelationIsAlreadyAddedToMetadata(Oid relationId);
|
||||||
static CascadeOperationType GetCascadeTypeForCitusLocalTables(bool autoConverted);
|
static CascadeOperationType GetCascadeTypeForCitusLocalTables(bool autoConverted);
|
||||||
|
static void UpdateAutoConvertedForConnectedRelations(Oid relationId, bool autoConverted);
|
||||||
static List * GetShellTableDDLEventsForCitusLocalTable(Oid relationId);
|
static List * GetShellTableDDLEventsForCitusLocalTable(Oid relationId);
|
||||||
static uint64 ConvertLocalTableToShard(Oid relationId);
|
static uint64 ConvertLocalTableToShard(Oid relationId);
|
||||||
static void RenameRelationToShardRelation(Oid shellRelationId, uint64 shardId);
|
static void RenameRelationToShardRelation(Oid shellRelationId, uint64 shardId);
|
||||||
|
@ -200,18 +202,18 @@ CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys, bool autoConve
|
||||||
*/
|
*/
|
||||||
SetLocalExecutionStatus(LOCAL_EXECUTION_REQUIRED);
|
SetLocalExecutionStatus(LOCAL_EXECUTION_REQUIRED);
|
||||||
|
|
||||||
if (IsCitusTableType(relationId, CITUS_LOCAL_TABLE) && !autoConverted)
|
if (!autoConverted && IsCitusTableType(relationId, CITUS_LOCAL_TABLE))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* We allow users to mark local tables already added to metadata
|
* We allow users to mark local tables already added to metadata
|
||||||
* as "autoConverted = false".
|
* as "autoConverted = false".
|
||||||
|
* If the user called citus_add_local_table_to_metadata for a table that is
|
||||||
|
* already added to metadata, we should mark this one and connected relations
|
||||||
|
* as auto-converted = false.
|
||||||
*/
|
*/
|
||||||
List *relationIdList = GetForeignKeyConnectedRelationIdList(relationId);
|
UpdateAutoConvertedForConnectedRelations(relationId, autoConverted);
|
||||||
Oid relid = InvalidOid;
|
|
||||||
foreach_oid(relid, relationIdList)
|
NoticeRelationIsAlreadyAddedToMetadata(relationId);
|
||||||
{
|
|
||||||
UpdatePartitionAutoConverted(relid, autoConverted);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -583,6 +585,24 @@ NoticeIfAutoConvertingLocalTables(bool autoConverted)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NoticeRelationIsAlreadyAddedToMetadata logs a NOTICE message that informs the user
|
||||||
|
* that the given relation is already added to metadata.
|
||||||
|
* We set the field autoConverted for these cases to false.
|
||||||
|
* This function tells the user that the given table will not be removed from metadata,
|
||||||
|
* as it was a user request.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
NoticeRelationIsAlreadyAddedToMetadata(Oid relationId)
|
||||||
|
{
|
||||||
|
char *relname = get_rel_name(relationId);
|
||||||
|
ereport(NOTICE, (errmsg("relation \"%s\" is already added to metadata", relname),
|
||||||
|
errdetail("This relation will not be removed from metadata even if "
|
||||||
|
"it is not connected to a reference table via foreign "
|
||||||
|
"key(s), since it is added to metadata by the user")));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GetCascadeTypeForCitusLocalTables returns CASCADE_AUTO_ADD_LOCAL_TABLE_TO_METADATA
|
* GetCascadeTypeForCitusLocalTables returns CASCADE_AUTO_ADD_LOCAL_TABLE_TO_METADATA
|
||||||
* if autoConverted is true. Returns CASCADE_USER_ADD_LOCAL_TABLE_TO_METADATA otherwise.
|
* if autoConverted is true. Returns CASCADE_USER_ADD_LOCAL_TABLE_TO_METADATA otherwise.
|
||||||
|
@ -599,6 +619,23 @@ GetCascadeTypeForCitusLocalTables(bool autoConverted)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* UpdateAutoConvertedForConnectedRelations updates the autoConverted field on
|
||||||
|
* pg_dist_partition for the foreign key connected relations of the given relation.
|
||||||
|
* Sets it to given autoConverted value for all of the connected relations.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
UpdateAutoConvertedForConnectedRelations(Oid relationId, bool autoConverted)
|
||||||
|
{
|
||||||
|
List *relationIdList = GetForeignKeyConnectedRelationIdList(relationId);
|
||||||
|
Oid relid = InvalidOid;
|
||||||
|
foreach_oid(relid, relationIdList)
|
||||||
|
{
|
||||||
|
UpdatePartitionAutoConverted(relid, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GetShellTableDDLEventsForCitusLocalTable returns a list of DDL commands
|
* GetShellTableDDLEventsForCitusLocalTable returns a list of DDL commands
|
||||||
* to create the shell table from scratch.
|
* to create the shell table from scratch.
|
||||||
|
|
Loading…
Reference in New Issue