1 /*------------------------------------------------------------------------- 2 * 3 * metadata_sync.h 4 * Type and function declarations used to sync metadata across all 5 * workers. 6 * 7 * Copyright (c) Citus Data, Inc. 8 * 9 *------------------------------------------------------------------------- 10 */ 11 12 #ifndef METADATA_SYNC_H 13 #define METADATA_SYNC_H 14 15 16 #include "distributed/metadata_cache.h" 17 #include "nodes/pg_list.h" 18 19 /* config variables */ 20 extern int MetadataSyncInterval; 21 extern int MetadataSyncRetryInterval; 22 23 typedef enum 24 { 25 METADATA_SYNC_SUCCESS = 0, 26 METADATA_SYNC_FAILED_LOCK = 1, 27 METADATA_SYNC_FAILED_SYNC = 2 28 } MetadataSyncResult; 29 30 /* Functions declarations for metadata syncing */ 31 extern void StartMetadataSyncToNode(const char *nodeNameString, int32 nodePort); 32 extern bool ClusterHasKnownMetadataWorkers(void); 33 extern bool ShouldSyncTableMetadata(Oid relationId); 34 extern List * MetadataCreateCommands(void); 35 extern List * MetadataDropCommands(void); 36 extern char * DistributionCreateCommand(CitusTableCacheEntry *cacheEntry); 37 extern char * DistributionDeleteCommand(const char *schemaName, 38 const char *tableName); 39 extern char * TableOwnerResetCommand(Oid distributedRelationId); 40 extern char * NodeListInsertCommand(List *workerNodeList); 41 extern List * ShardListInsertCommand(List *shardIntervalList); 42 extern char * NodeDeleteCommand(uint32 nodeId); 43 extern char * NodeStateUpdateCommand(uint32 nodeId, bool isActive); 44 extern char * ShouldHaveShardsUpdateCommand(uint32 nodeId, bool shouldHaveShards); 45 extern char * ColocationIdUpdateCommand(Oid relationId, uint32 colocationId); 46 extern char * CreateSchemaDDLCommand(Oid schemaId); 47 extern List * GrantOnSchemaDDLCommands(Oid schemaId); 48 extern char * PlacementUpsertCommand(uint64 shardId, uint64 placementId, int shardState, 49 uint64 shardLength, int32 groupId); 50 extern void CreateTableMetadataOnWorkers(Oid relationId); 51 extern BackgroundWorkerHandle * SpawnSyncMetadataToNodes(Oid database, Oid owner); 52 extern void SyncMetadataToNodesMain(Datum main_arg); 53 extern void SignalMetadataSyncDaemon(Oid database, int sig); 54 extern bool ShouldInitiateMetadataSync(bool *lockFailure); 55 56 extern List * SequenceDDLCommandsForTable(Oid relationId); 57 extern List * GetSequencesFromAttrDef(Oid attrdefOid); 58 extern void GetDependentSequencesWithRelation(Oid relationId, List **attnumList, 59 List **dependentSequenceList, AttrNumber 60 attnum); 61 extern Oid GetAttributeTypeOid(Oid relationId, AttrNumber attnum); 62 63 #define DELETE_ALL_NODES "TRUNCATE pg_dist_node CASCADE" 64 #define REMOVE_ALL_CLUSTERED_TABLES_COMMAND \ 65 "SELECT worker_drop_distributed_table(logicalrelid::regclass::text) FROM pg_dist_partition" 66 #define DISABLE_DDL_PROPAGATION "SET citus.enable_ddl_propagation TO 'off'" 67 #define ENABLE_DDL_PROPAGATION "SET citus.enable_ddl_propagation TO 'on'" 68 #define WORKER_APPLY_SEQUENCE_COMMAND "SELECT worker_apply_sequence_command (%s,%s)" 69 #define UPSERT_PLACEMENT \ 70 "INSERT INTO pg_dist_placement " \ 71 "(shardid, shardstate, shardlength, " \ 72 "groupid, placementid) " \ 73 "VALUES (" UINT64_FORMAT ", %d, " UINT64_FORMAT \ 74 ", %d, " UINT64_FORMAT \ 75 ") " \ 76 "ON CONFLICT (placementid) DO UPDATE SET " \ 77 "shardid = EXCLUDED.shardid, " \ 78 "shardstate = EXCLUDED.shardstate, " \ 79 "shardlength = EXCLUDED.shardlength, " \ 80 "groupid = EXCLUDED.groupid" 81 #define METADATA_SYNC_CHANNEL "metadata_sync" 82 83 84 /* controlled via GUC */ 85 extern char *EnableManualMetadataChangesForUser; 86 87 #endif /* METADATA_SYNC_H */ 88