1/*-------------------------------------------------------------------------
2 *
3 * sync.h
4 * File synchronization management code.
5 *
6 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * src/include/storage/sync.h
10 *
11 *-------------------------------------------------------------------------
12 */
13#ifndef SYNC_H
14#define SYNC_H
15
16#include "storage/relfilenode.h"
17
18/*
19 * Type of sync request. These are used to manage the set of pending
20 * requests to call a sync handler's sync or unlink functions at the next
21 * checkpoint.
22 */
23typedef enum SyncRequestType
24{
25 SYNC_REQUEST, /* schedule a call of sync function */
26 SYNC_UNLINK_REQUEST, /* schedule a call of unlink function */
27 SYNC_FORGET_REQUEST, /* forget all calls for a tag */
28 SYNC_FILTER_REQUEST /* forget all calls satisfying match fn */
29} SyncRequestType;
30
31/*
32 * Which set of functions to use to handle a given request. The values of
33 * the enumerators must match the indexes of the function table in sync.c.
34 */
35typedef enum SyncRequestHandler
36{
37 SYNC_HANDLER_MD = 0 /* md smgr */
38} SyncRequestHandler;
39
40/*
41 * A tag identifying a file. Currently it has the members required for md.c's
42 * usage, but sync.c has no knowledge of the internal structure, and it is
43 * liable to change as required by future handlers.
44 */
45typedef struct FileTag
46{
47 int16 handler; /* SyncRequestHandler value, saving space */
48 int16 forknum; /* ForkNumber, saving space */
49 RelFileNode rnode;
50 uint32 segno;
51} FileTag;
52
53extern void InitSync(void);
54extern void SyncPreCheckpoint(void);
55extern void SyncPostCheckpoint(void);
56extern void ProcessSyncRequests(void);
57extern void RememberSyncRequest(const FileTag *ftag, SyncRequestType type);
58extern void EnableSyncRequestForwarding(void);
59extern bool RegisterSyncRequest(const FileTag *ftag, SyncRequestType type,
60 bool retryOnError);
61
62#endif /* SYNC_H */
63