mirror of
https://github.com/postgrespro/pg_probackup.git
synced 2026-06-21 01:34:15 +02:00
[PBCKP-368] use pioWriteFile for write_database_map
This commit is contained in:
@@ -132,6 +132,8 @@ static void control_string_bad_format(const char* str);
|
|||||||
|
|
||||||
static bool exclude_files_cb(void *value, void *exclude_args);
|
static bool exclude_files_cb(void *value, void *exclude_args);
|
||||||
|
|
||||||
|
static void print_database_map(ft_strbuf_t *buf, parray *database_list);
|
||||||
|
|
||||||
/* Tablespace mapping */
|
/* Tablespace mapping */
|
||||||
static TablespaceList tablespace_dirs = {NULL, NULL};
|
static TablespaceList tablespace_dirs = {NULL, NULL};
|
||||||
/* Extra directories mapping */
|
/* Extra directories mapping */
|
||||||
@@ -1424,8 +1426,8 @@ backup_contains_external(const char *dir, parray *dirs_list)
|
|||||||
/*
|
/*
|
||||||
* Print database_map
|
* Print database_map
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
print_database_map(FILE *out, parray *database_map)
|
print_database_map(ft_strbuf_t *buf, parray *database_map)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -1433,7 +1435,7 @@ print_database_map(FILE *out, parray *database_map)
|
|||||||
{
|
{
|
||||||
db_map_entry *db_entry = (db_map_entry *) parray_get(database_map, i);
|
db_map_entry *db_entry = (db_map_entry *) parray_get(database_map, i);
|
||||||
|
|
||||||
fio_fprintf(out, "{\"dbOid\":\"%u\", \"datname\":\"%s\"}\n",
|
ft_strbuf_catf(buf, "{\"dbOid\":\"%u\", \"datname\":\"%s\"}\n",
|
||||||
db_entry->dbOid, db_entry->datname);
|
db_entry->dbOid, db_entry->datname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1446,29 +1448,26 @@ print_database_map(FILE *out, parray *database_map)
|
|||||||
void
|
void
|
||||||
write_database_map(pgBackup *backup, parray *database_map, parray *backup_files_list)
|
write_database_map(pgBackup *backup, parray *database_map, parray *backup_files_list)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
ft_strbuf_t buf;
|
||||||
pgFile *file;
|
pgFile *file;
|
||||||
char database_dir[MAXPGPATH];
|
char database_dir[MAXPGPATH];
|
||||||
char database_map_path[MAXPGPATH];
|
char database_map_path[MAXPGPATH];
|
||||||
pioDrive_i drive = pioDriveForLocation(FIO_BACKUP_HOST);
|
pioDrive_i drive = pioDriveForLocation(FIO_BACKUP_HOST);
|
||||||
|
err_i err;
|
||||||
|
|
||||||
join_path_components(database_dir, backup->root_dir, DATABASE_DIR);
|
join_path_components(database_dir, backup->root_dir, DATABASE_DIR);
|
||||||
join_path_components(database_map_path, database_dir, DATABASE_MAP);
|
join_path_components(database_map_path, database_dir, DATABASE_MAP);
|
||||||
|
|
||||||
fp = fio_fopen(FIO_BACKUP_HOST, database_map_path, PG_BINARY_W);
|
buf = ft_strbuf_zero();
|
||||||
if (fp == NULL)
|
print_database_map(&buf, database_map);
|
||||||
elog(ERROR, "Cannot open database map \"%s\": %s", database_map_path,
|
|
||||||
strerror(errno));
|
|
||||||
|
|
||||||
print_database_map(fp, database_map);
|
err = $i(pioWriteFile, drive, .path = database_map_path,
|
||||||
if (fio_fflush(fp) || fio_fclose(fp))
|
.content = ft_str2bytes(ft_strbuf_ref(&buf)));
|
||||||
{
|
|
||||||
int save_errno = errno;
|
if ($haserr(err))
|
||||||
if (fio_remove(FIO_BACKUP_HOST, database_map_path, false) != 0)
|
ft_logerr(FT_FATAL, $errmsg(err), "Writting database map");
|
||||||
elog(WARNING, "Cannot cleanup database map \"%s\": %s", database_map_path, strerror(errno));
|
|
||||||
elog(ERROR, "Cannot write database map \"%s\": %s",
|
ft_strbuf_free(&buf);
|
||||||
database_map_path, strerror(save_errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add metadata to backup_content.control */
|
/* Add metadata to backup_content.control */
|
||||||
file = pgFileNew(database_map_path, DATABASE_MAP, true, 0, drive);
|
file = pgFileNew(database_map_path, DATABASE_MAP, true, 0, drive);
|
||||||
|
|||||||
@@ -1012,7 +1012,6 @@ extern int check_tablespace_mapping(pgBackup *backup, bool incremental, bool fo
|
|||||||
extern void check_external_dir_mapping(pgBackup *backup, bool incremental);
|
extern void check_external_dir_mapping(pgBackup *backup, bool incremental);
|
||||||
extern char *get_external_remap(char *current_dir);
|
extern char *get_external_remap(char *current_dir);
|
||||||
|
|
||||||
extern void print_database_map(FILE *out, parray *database_list);
|
|
||||||
extern void write_database_map(pgBackup *backup, parray *database_list,
|
extern void write_database_map(pgBackup *backup, parray *database_list,
|
||||||
parray *backup_file_list);
|
parray *backup_file_list);
|
||||||
extern void db_map_entry_free(void *map);
|
extern void db_map_entry_free(void *map);
|
||||||
|
|||||||
Reference in New Issue
Block a user