73 #define RELMAPPER_FILENAME "pg_filenode.map"
75 #define RELMAPPER_FILEMAGIC 0x592717
77 #define MAX_MAPPINGS 62
143 bool send_sinval,
bool preserve_files,
144 Oid dbid,
Oid tsid,
const char *dbpath);
343 elog(
ERROR,
"cannot change relation mapping within subtransaction");
346 elog(
ERROR,
"cannot change relation mapping in parallel mode");
394 elog(
ERROR,
"attempt to apply a mapping to unmapped relation %u",
397 elog(
ERROR,
"ran out of space in relation map");
447 elog(
ERROR,
"could not find temporary mapping for relation %u",
537 if (isCommit && !isParallelWorker)
589 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
590 errmsg(
"cannot PREPARE a transaction that modified relation mapping")));
741 elog(
ERROR,
"parallel worker has existing mappings");
786 snprintf(mapfilename,
sizeof(mapfilename),
"%s/%s", dbpath,
792 errmsg(
"could not open file \"%s\": %m",
813 errmsg(
"could not read file \"%s\": %m", mapfilename)));
817 errmsg(
"could not read file \"%s\": read %d of %zu",
828 errmsg(
"could not close file \"%s\": %m",
836 (
errmsg(
"relation mapping file \"%s\" contains invalid data",
846 (
errmsg(
"relation mapping file \"%s\" contains incorrect checksum",
874 bool preserve_files,
Oid dbid,
Oid tsid,
const char *dbpath)
884 elog(
ERROR,
"attempt to write bogus relation mapping");
894 snprintf(mapfilename,
sizeof(mapfilename),
"%s/%s",
900 errmsg(
"could not open file \"%s\": %m",
934 errmsg(
"could not write file \"%s\": %m",
949 errmsg(
"could not fsync file \"%s\": %m",
956 errmsg(
"could not close file \"%s\": %m",
1077 elog(
PANIC,
"relmap_redo: wrong size %u in relmap update record",
1079 memcpy(&newmap, xlrec->
data,
sizeof(newmap));
1107 elog(
PANIC,
"relmap_redo: unknown op code %u", info);
#define offsetof(type, field)
int errcode_for_file_access(void)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
int CloseTransientFile(int fd)
int data_sync_elevel(int elevel)
int OpenTransientFile(const char *fileName, int fileFlags)
bool allowSystemTableMods
void CacheInvalidateRelmap(Oid databaseId)
Assert(fmt[strlen(fmt) - 1] !='\n')
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
void pfree(void *pointer)
#define IsBootstrapProcessingMode()
#define START_CRIT_SECTION()
#define END_CRIT_SECTION()
#define ERRCODE_DATA_CORRUPTED
#define COMP_CRC32C(crc, data, len)
#define EQ_CRC32C(c1, c2)
static int fd(const char *x, int i)
static RelMapFile pending_local_updates
Size EstimateRelationMapSpace(void)
void RelationMapRemoveMapping(Oid relationId)
void RelationMapUpdateMap(Oid relationId, Oid fileNode, bool shared, bool immediate)
struct RelMapping RelMapping
void SerializeRelationMap(Size maxSize, char *startAddress)
#define RELMAPPER_FILEMAGIC
void RelationMapCopy(Oid dbid, Oid tsid, char *srcdbpath, char *dstdbpath)
static void write_relmap_file(RelMapFile *newmap, bool write_wal, bool send_sinval, bool preserve_files, Oid dbid, Oid tsid, const char *dbpath)
Oid RelationMapFilenodeToOid(Oid filenode, bool shared)
void RelationMapInvalidateAll(void)
void RestoreRelationMap(char *startAddress)
static RelMapFile shared_map
static RelMapFile active_local_updates
static void perform_relmap_update(bool shared, const RelMapFile *updates)
static void read_relmap_file(RelMapFile *map, char *dbpath, bool lock_held, int elevel)
Oid RelationMapOidToFilenode(Oid relationId, bool shared)
void RelationMapInitialize(void)
void AtPrepare_RelationMap(void)
static RelMapFile local_map
void relmap_redo(XLogReaderState *record)
#define RELMAPPER_FILENAME
void AtEOXact_RelationMap(bool isCommit, bool isParallelWorker)
void RelationMapInvalidate(bool shared)
static RelMapFile pending_shared_updates
void RelationMapInitializePhase2(void)
void RelationMapFinishBootstrap(void)
struct SerializedActiveRelMaps SerializedActiveRelMaps
Oid RelationMapOidToFilenodeForDatabase(char *dbpath, Oid relationId)
static void apply_map_update(RelMapFile *map, Oid relationId, Oid fileNode, bool add_okay)
void RelationMapInitializePhase3(void)
struct RelMapFile RelMapFile
void AtCCI_RelationMap(void)
static void merge_map_updates(RelMapFile *map, const RelMapFile *updates, bool add_okay)
void CheckPointRelationMap(void)
static RelMapFile active_shared_updates
static void load_relmap_file(bool shared, bool lock_held)
#define XLOG_RELMAP_UPDATE
#define MinSizeOfRelmapUpdate
char * GetDatabasePath(Oid dbNode, Oid spcNode)
void RelationPreserveStorage(RelFileNode rnode, bool atCommit)
RelMapping mappings[MAX_MAPPINGS]
RelMapFile active_local_updates
RelMapFile active_shared_updates
char data[FLEXIBLE_ARRAY_MEMBER]
@ WAIT_EVENT_RELATION_MAP_WRITE
@ WAIT_EVENT_RELATION_MAP_READ
@ WAIT_EVENT_RELATION_MAP_SYNC
static void pgstat_report_wait_start(uint32 wait_event_info)
static void pgstat_report_wait_end(void)
int GetCurrentTransactionNestLevel(void)
bool IsInParallelMode(void)
void XLogFlush(XLogRecPtr record)
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
void XLogBeginInsert(void)
void XLogRegisterData(char *data, int len)
#define XLogRecGetInfo(decoder)
#define XLogRecGetData(decoder)
#define XLogRecHasAnyBlockRefs(decoder)