33#define ZLIB_OUT_SIZE 4096
36#define LZ4_IN_SIZE 4096
45 const char *temp_suffix,
50 const char *pathname);
52 const char *pathname,
const char *temp_suffix);
98#define clear_error(wwmethod) \
99 ((wwmethod)->lasterrstring = NULL, (wwmethod)->lasterrno = 0)
103 const char *pathname,
const char *temp_suffix)
111 temp_suffix ? temp_suffix :
"");
118 const char *temp_suffix,
size_t pad_to_size)
344 df->lz4buf,
df->lz4bufsize,
380 df->base.currpos += r;
410 df->lz4buf,
df->lz4bufsize,
462 pg_log_error(
"could not rename file \"%s\" to \"%s\": %m",
529 f->wwmethod->lasterrno =
errno;
642 int compression_level,
bool sync)
655 return &wwmethod->
base;
665 const char *pathname,
666 const char *temp_suffix,
671 const char *pathname);
673 const char *pathname,
const char *temp_suffix);
719 while (
tar_data->zp->avail_in || flush)
755 tar_data->base.lasterrstring =
_(
"could not reset compression stream");
826 const char *temp_suffix)
831 pathname, temp_suffix ? temp_suffix :
"");
838 const char *temp_suffix,
size_t pad_to_size)
880 _(
"could not initialize compression library");
892 _(
"implementation error: tar files can't have more than one open file");
897 tar_data->currentfile->base.wwmethod = wwmethod;
924 _(
"could not change compression parameters");
931 if (
tar_data->currentfile->ofs_start == -1)
938 tar_data->currentfile->base.currpos = 0;
965 wwmethod->
lasterrstring =
_(
"could not change compression parameters");
984 tar_data->currentfile->pad_to_size = pad_to_size;
999 tar_data->currentfile->base.currpos = 0;
1003 return &
tar_data->currentfile->base;
1206 pg_fatal(
"could not fsync file \"%s\": %s",
1293 wwmethod->
lasterrstring =
_(
"could not close compression stream");
1357 int compression_level,
bool sync)
1379 return &wwmethod->
base;
#define Assert(condition)
int durable_rename(const char *oldfile, const char *newfile, int elevel)
void fsync_fname(const char *fname, bool isdir)
static int fsync_parent_path(const char *fname, int elevel)
void * pg_malloc(size_t size)
char * pg_strdup(const char *in)
void * pg_malloc0(size_t size)
ssize_t pg_pwrite_zeros(int fd, size_t size, pgoff_t offset)
#define pg_log_error(...)
static pg_compress_algorithm compression_algorithm
static char buf[DEFAULT_XLOG_SEG_SIZE]
static size_t tarPaddingBytesRequired(size_t len)
int tarChecksum(char *header)
enum tarError tarCreateHeader(char *h, const char *filename, const char *linktarget, pgoff_t size, mode_t mode, uid_t uid, gid_t gid, time_t mtime)
void print_tar_number(char *s, int len, uint64 val)
size_t strlcpy(char *dst, const char *src, size_t siz)
static int fd(const char *x, int i)
TarMethodFile * currentfile
char header[TAR_BLOCK_SIZE]
Walfile *(* open_for_write)(WalWriteMethod *wwmethod, const char *pathname, const char *temp_suffix, size_t pad_to_size)
const char * lasterrstring
const WalWriteMethodOps * ops
pg_compress_algorithm compression_algorithm
WalWriteMethod * wwmethod
WalWriteMethod * CreateWalTarMethod(const char *tarbase, pg_compress_algorithm compression_algorithm, int compression_level, bool sync)
static char * dir_get_file_name(WalWriteMethod *wwmethod, const char *pathname, const char *temp_suffix)
static Walfile * dir_open_for_write(WalWriteMethod *wwmethod, const char *pathname, const char *temp_suffix, size_t pad_to_size)
static Walfile * tar_open_for_write(WalWriteMethod *wwmethod, const char *pathname, const char *temp_suffix, size_t pad_to_size)
static ssize_t tar_write(Walfile *f, const void *buf, size_t count)
static void tar_free(WalWriteMethod *wwmethod)
static const WalWriteMethodOps WalTarMethodOps
static bool dir_finish(WalWriteMethod *wwmethod)
#define clear_error(wwmethod)
static const WalWriteMethodOps WalDirectoryMethodOps
WalWriteMethod * CreateWalDirectoryMethod(const char *basedir, pg_compress_algorithm compression_algorithm, int compression_level, bool sync)
static void dir_free(WalWriteMethod *wwmethod)
static int dir_sync(Walfile *f)
static int tar_sync(Walfile *f)
static bool tar_finish(WalWriteMethod *wwmethod)
static int dir_close(Walfile *f, WalCloseMethod method)
static ssize_t dir_get_file_size(WalWriteMethod *wwmethod, const char *pathname)
static bool tar_existsfile(WalWriteMethod *wwmethod, const char *pathname)
static ssize_t tar_get_file_size(WalWriteMethod *wwmethod, const char *pathname)
static bool dir_existsfile(WalWriteMethod *wwmethod, const char *pathname)
static int tar_close(Walfile *f, WalCloseMethod method)
static ssize_t dir_write(Walfile *f, const void *buf, size_t count)
const char * GetLastWalMethodError(WalWriteMethod *wwmethod)
static bool tar_write_padding_data(TarMethodFile *f, size_t bytes)
static char * tar_get_file_name(WalWriteMethod *wwmethod, const char *pathname, const char *temp_suffix)