1 /*-------------------------------------------------------------------------
5 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
8 * src/bin/pg_basebackup/walmethods.h
9 *-------------------------------------------------------------------------
13 typedef void *Walfile
;
23 * A WalWriteMethod structure represents the different methods used
24 * to write the streaming WAL as it's received.
26 * All methods that have a failure return indicator will set state
27 * allowing the getlasterror() method to return a suitable message.
28 * Commonly, errno is this state (or part of it); so callers must take
29 * care not to clobber errno between a failed method call and use of
30 * getlasterror() to retrieve the message.
32 typedef struct WalWriteMethod WalWriteMethod
;
36 * Open a target file. Returns Walfile, or NULL if open failed. If a temp
37 * suffix is specified, a file with that name will be opened, and then
38 * automatically renamed in close(). If pad_to_size is specified, the file
39 * will be padded with NUL up to that size, if supported by the Walmethod.
41 Walfile (*open_for_write
) (const char *pathname
, const char *temp_suffix
, size_t pad_to_size
);
44 * Close an open Walfile, using one or more methods for handling automatic
45 * unlinking etc. Returns 0 on success, other values for error.
47 int (*close
) (Walfile f
, WalCloseMethod method
);
49 /* Check if a file exist */
50 bool (*existsfile
) (const char *pathname
);
52 /* Return the size of a file, or -1 on failure. */
53 ssize_t (*get_file_size
) (const char *pathname
);
56 * Return the name of the current file to work on in pg_malloc()'d string,
57 * without the base directory. This is useful for logging.
59 char *(*get_file_name
) (const char *pathname
, const char *temp_suffix
);
61 /* Return the level of compression */
62 int (*compression
) (void);
65 * Write count number of bytes to the file, and return the number of bytes
66 * actually written or -1 for error.
68 ssize_t (*write
) (Walfile f
, const void *buf
, size_t count
);
70 /* Return the current position in a file or -1 on error */
71 off_t (*get_current_pos
) (Walfile f
);
74 * fsync the contents of the specified file. Returns 0 on success.
76 int (*sync
) (Walfile f
);
79 * Clean up the Walmethod, closing any shared resources. For methods like
80 * tar, this includes writing updated headers. Returns true if the
81 * close/write/sync of shared resources succeeded, otherwise returns false
82 * (but the resources are still closed).
84 bool (*finish
) (void);
86 /* Return a text for the last error in this Walfile */
87 const char *(*getlasterror
) (void);
91 * Available WAL methods:
92 * - WalDirectoryMethod - write WAL to regular files in a standard pg_wal
93 * - WalTarMethod - write WAL to a tarfile corresponding to pg_wal
94 * (only implements the methods required for pg_basebackup,
95 * not all those required for pg_receivewal)
97 WalWriteMethod
*CreateWalDirectoryMethod(const char *basedir
,
98 int compression
, bool sync
);
99 WalWriteMethod
*CreateWalTarMethod(const char *tarbase
, int compression
, bool sync
);
101 /* Cleanup routines for previously-created methods */
102 void FreeWalDirectoryMethod(void);
103 void FreeWalTarMethod(void);