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 | */ |
23 | typedef 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 | */ |
35 | typedef 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 | */ |
45 | typedef 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 | |
53 | extern void InitSync(void); |
54 | extern void SyncPreCheckpoint(void); |
55 | extern void SyncPostCheckpoint(void); |
56 | extern void ProcessSyncRequests(void); |
57 | extern void RememberSyncRequest(const FileTag *ftag, SyncRequestType type); |
58 | extern void EnableSyncRequestForwarding(void); |
59 | extern bool RegisterSyncRequest(const FileTag *ftag, SyncRequestType type, |
60 | bool retryOnError); |
61 | |
62 | #endif /* SYNC_H */ |
63 | |