mirror of https://github.com/citusdata/citus.git
Move pg_dist_object creation to metadata func
parent
5c4974d7d3
commit
290a4737fc
|
@ -88,6 +88,8 @@ static void EnsureObjectMetadataIsSane(int distributionArgumentIndex,
|
||||||
int colocationId);
|
int colocationId);
|
||||||
static char * SchemaOwnerName(Oid objectId);
|
static char * SchemaOwnerName(Oid objectId);
|
||||||
static bool HasMetadataWorkers(void);
|
static bool HasMetadataWorkers(void);
|
||||||
|
static void CreateShellTableOnWorkers(Oid relationId);
|
||||||
|
static void CreateTableMetadataOnWorkers(Oid relationId);
|
||||||
static bool ShouldSyncTableMetadataInternal(bool hashDistributed,
|
static bool ShouldSyncTableMetadataInternal(bool hashDistributed,
|
||||||
bool citusTableWithNoDistKey);
|
bool citusTableWithNoDistKey);
|
||||||
static bool SyncNodeMetadataSnapshotToNode(WorkerNode *workerNode, bool raiseOnError);
|
static bool SyncNodeMetadataSnapshotToNode(WorkerNode *workerNode, bool raiseOnError);
|
||||||
|
@ -264,6 +266,13 @@ SyncCitusTableMetadata(Oid relationId)
|
||||||
CreateShellTableOnWorkers(relationId);
|
CreateShellTableOnWorkers(relationId);
|
||||||
CreateTableMetadataOnWorkers(relationId);
|
CreateTableMetadataOnWorkers(relationId);
|
||||||
CreateInterTableRelationshipOfRelationOnWorkers(relationId);
|
CreateInterTableRelationshipOfRelationOnWorkers(relationId);
|
||||||
|
|
||||||
|
if (!IsTableOwnedByExtension(relationId))
|
||||||
|
{
|
||||||
|
ObjectAddress relationAddress = { 0 };
|
||||||
|
ObjectAddressSet(relationAddress, RelationRelationId, relationId);
|
||||||
|
MarkObjectDistributed(&relationAddress);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -695,9 +704,7 @@ DistributedObjectMetadataSyncCommandList(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CitusTableMetadataCreateCommandList returns the set of commands necessary to
|
* CitusTableMetadataCreateCommandList returns the set of commands necessary to
|
||||||
* create the given distributed table metadata on a worker. It includes truncate
|
* create the given distributed table metadata on a worker.
|
||||||
* trigger as well, since we need to create truncate trigger for tables owned by
|
|
||||||
* extensions and use it for handling metadata while truncating tables.
|
|
||||||
*/
|
*/
|
||||||
static List *
|
static List *
|
||||||
CitusTableMetadataCreateCommandList(Oid relationId)
|
CitusTableMetadataCreateCommandList(Oid relationId)
|
||||||
|
@ -2000,53 +2007,34 @@ InterTableRelationshipOfRelationCommandList(Oid relationId)
|
||||||
* CreateShellTableOnWorkers creates the shell table on each worker node with metadata
|
* CreateShellTableOnWorkers creates the shell table on each worker node with metadata
|
||||||
* including sequence dependency and truncate triggers.
|
* including sequence dependency and truncate triggers.
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
CreateShellTableOnWorkers(Oid relationId)
|
CreateShellTableOnWorkers(Oid relationId)
|
||||||
{
|
{
|
||||||
List *commandList = NIL;
|
if (IsTableOwnedByExtension(relationId))
|
||||||
|
|
||||||
/*
|
|
||||||
* If the table is owned by an extension we only create truncate trigger,
|
|
||||||
* otherwise we create shell table and sequence dependency as well.
|
|
||||||
*/
|
|
||||||
bool tableOwnedByExtension = IsTableOwnedByExtension(relationId);
|
|
||||||
if (!tableOwnedByExtension)
|
|
||||||
{
|
{
|
||||||
IncludeSequenceDefaults includeSequenceDefaults =
|
return;
|
||||||
WORKER_NEXTVAL_SEQUENCE_DEFAULTS;
|
}
|
||||||
|
|
||||||
|
List *commandList = list_make1(DISABLE_DDL_PROPAGATION);
|
||||||
|
|
||||||
|
IncludeSequenceDefaults includeSequenceDefaults = WORKER_NEXTVAL_SEQUENCE_DEFAULTS;
|
||||||
bool creatingShellTableOnRemoteNode = true;
|
bool creatingShellTableOnRemoteNode = true;
|
||||||
List *tableDDLCommands = GetFullTableCreationCommands(relationId,
|
List *tableDDLCommands = GetFullTableCreationCommands(relationId,
|
||||||
includeSequenceDefaults,
|
includeSequenceDefaults,
|
||||||
creatingShellTableOnRemoteNode);
|
creatingShellTableOnRemoteNode);
|
||||||
|
|
||||||
TableDDLCommand *tableDDLCommand = NULL;
|
TableDDLCommand *tableDDLCommand = NULL;
|
||||||
foreach_ptr(tableDDLCommand, tableDDLCommands)
|
foreach_ptr(tableDDLCommand, tableDDLCommands)
|
||||||
{
|
{
|
||||||
Assert(CitusIsA(tableDDLCommand, TableDDLCommand));
|
Assert(CitusIsA(tableDDLCommand, TableDDLCommand));
|
||||||
commandList = lappend(commandList, GetTableDDLCommand(tableDDLCommand));
|
commandList = lappend(commandList, GetTableDDLCommand(tableDDLCommand));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* prevent recursive propagation */
|
|
||||||
SendCommandToWorkersWithMetadata(DISABLE_DDL_PROPAGATION);
|
|
||||||
|
|
||||||
const char *command = NULL;
|
const char *command = NULL;
|
||||||
foreach_ptr(command, commandList)
|
foreach_ptr(command, commandList)
|
||||||
{
|
{
|
||||||
SendCommandToWorkersWithMetadata(command);
|
SendCommandToWorkersWithMetadata(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* once shell table is created, mark the object as distributed as well */
|
|
||||||
if (!tableOwnedByExtension)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Mark the table object as distributed at the end as we need to propagate
|
|
||||||
* that table to new nodes anyway.
|
|
||||||
*/
|
|
||||||
ObjectAddress relationAddress = { 0 };
|
|
||||||
ObjectAddressSet(relationAddress, RelationRelationId, relationId);
|
|
||||||
MarkObjectDistributed(&relationAddress);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2057,7 +2045,7 @@ CreateShellTableOnWorkers(Oid relationId)
|
||||||
* to prevent recursive propagation, DDL propagation on workers are disabled with a
|
* to prevent recursive propagation, DDL propagation on workers are disabled with a
|
||||||
* `SET citus.enable_ddl_propagation TO off;` command.
|
* `SET citus.enable_ddl_propagation TO off;` command.
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
CreateTableMetadataOnWorkers(Oid relationId)
|
CreateTableMetadataOnWorkers(Oid relationId)
|
||||||
{
|
{
|
||||||
List *commandList = CitusTableMetadataCreateCommandList(relationId);
|
List *commandList = CitusTableMetadataCreateCommandList(relationId);
|
||||||
|
|
|
@ -60,8 +60,6 @@ extern char * PlacementUpsertCommand(uint64 shardId, uint64 placementId, int sha
|
||||||
extern TableDDLCommand * TruncateTriggerCreateCommand(Oid relationId);
|
extern TableDDLCommand * TruncateTriggerCreateCommand(Oid relationId);
|
||||||
extern void CreateInterTableRelationshipOfRelationOnWorkers(Oid relationId);
|
extern void CreateInterTableRelationshipOfRelationOnWorkers(Oid relationId);
|
||||||
extern List * InterTableRelationshipOfRelationCommandList(Oid relationId);
|
extern List * InterTableRelationshipOfRelationCommandList(Oid relationId);
|
||||||
extern void CreateShellTableOnWorkers(Oid relationId);
|
|
||||||
extern void CreateTableMetadataOnWorkers(Oid relationId);
|
|
||||||
extern List * DetachPartitionCommandList(void);
|
extern List * DetachPartitionCommandList(void);
|
||||||
extern BackgroundWorkerHandle * SpawnSyncNodeMetadataToNodes(Oid database, Oid owner);
|
extern BackgroundWorkerHandle * SpawnSyncNodeMetadataToNodes(Oid database, Oid owner);
|
||||||
extern void SyncNodeMetadataToNodesMain(Datum main_arg);
|
extern void SyncNodeMetadataToNodesMain(Datum main_arg);
|
||||||
|
|
Loading…
Reference in New Issue