/*------------------------------------------------------------------------- * * sync.h * File synchronization management code. * * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/sync.h * *------------------------------------------------------------------------- */ #ifndef SYNC_H #define SYNC_H #include "storage/relfilelocator.h" /* * Type of sync request. These are used to manage the set of pending * requests to call a sync handler's sync or unlink functions at the next * checkpoint. */ typedef enum SyncRequestType { SYNC_REQUEST, /* schedule a call of sync function */ SYNC_UNLINK_REQUEST, /* schedule a call of unlink function */ SYNC_FORGET_REQUEST, /* forget all calls for a tag */ SYNC_FILTER_REQUEST, /* forget all calls satisfying match fn */ } SyncRequestType; /* * Which set of functions to use to handle a given request. The values of * the enumerators must match the indexes of the function table in sync.c. */ typedef enum SyncRequestHandler { SYNC_HANDLER_MD = 0, SYNC_HANDLER_CLOG, SYNC_HANDLER_COMMIT_TS, SYNC_HANDLER_MULTIXACT_OFFSET, SYNC_HANDLER_MULTIXACT_MEMBER, SYNC_HANDLER_NONE, } SyncRequestHandler; /* * A tag identifying a file. Currently it has the members required for md.c's * usage, but sync.c has no knowledge of the internal structure, and it is * liable to change as required by future handlers. */ typedef struct FileTag { int16 handler; /* SyncRequestHandler value, saving space */ int16 forknum; /* ForkNumber, saving space */ RelFileLocator rlocator; uint64 segno; } FileTag; extern void InitSync(void); extern void SyncPreCheckpoint(void); extern void SyncPostCheckpoint(void); extern void ProcessSyncRequests(void); extern void RememberSyncRequest(const FileTag *ftag, SyncRequestType type); extern bool RegisterSyncRequest(const FileTag *ftag, SyncRequestType type, bool retryOnError); #endif /* SYNC_H */