mirror of
https://github.com/postgrespro/pg_probackup.git
synced 2025-02-03 14:01:57 +02:00
Format change backup.conf is renamed to backup.control
This commit is contained in:
parent
31efd8f598
commit
12cc3a1491
19
backup.c
19
backup.c
@ -26,6 +26,7 @@
|
||||
#include "streamutil.h"
|
||||
#include "receivelog.h"
|
||||
|
||||
static const char *backupModes[] = {"", "PAGE", "PTRACK", "FULL"};
|
||||
static int standby_message_timeout = 10 * 1000; /* 10 sec = default */
|
||||
static XLogRecPtr stop_backup_lsn = InvalidXLogRecPtr;
|
||||
const char *progname = "pg_probackup";
|
||||
@ -191,7 +192,7 @@ do_backup_database(parray *backup_list)
|
||||
prev_backup_start_lsn = &prev_backup->start_lsn;
|
||||
|
||||
current.parent_backup = prev_backup->start_time;
|
||||
pgBackupWriteConf(¤t);
|
||||
pgBackupWriteBackupControlFile(¤t);
|
||||
}
|
||||
|
||||
/* initialize backup list */
|
||||
@ -417,19 +418,17 @@ do_backup(void)
|
||||
*/
|
||||
check_system_identifiers();
|
||||
|
||||
elog(LOG, "Backup start");
|
||||
/* Show configuration actually used */
|
||||
if (verbose)
|
||||
pgBackupWriteConfigSection(stderr, ¤t);
|
||||
elog(LOG, "Backup start. backup-mode = %s+%s",
|
||||
backupModes[current.backup_mode], current.stream?"STREAM":"ARCHIVE");
|
||||
|
||||
/* Start backup. Update backup status. */
|
||||
current.status = BACKUP_STATUS_RUNNING;
|
||||
current.start_time = time(NULL);
|
||||
|
||||
/* Create backup directory and BACKUP_CONF_FILE */
|
||||
/* Create backup directory and BACKUP_CONTROL_FILE */
|
||||
if (pgBackupCreateDir(¤t))
|
||||
elog(ERROR, "cannot create backup directory");
|
||||
pgBackupWriteConf(¤t);
|
||||
pgBackupWriteBackupControlFile(¤t);
|
||||
|
||||
elog(LOG, "Backup destination is initialized");
|
||||
|
||||
@ -448,7 +447,7 @@ do_backup(void)
|
||||
/* Backup is done. Update backup status */
|
||||
current.end_time = time(NULL);
|
||||
current.status = BACKUP_STATUS_DONE;
|
||||
pgBackupWriteConf(¤t);
|
||||
pgBackupWriteBackupControlFile(¤t);
|
||||
|
||||
elog(LOG, "Backup completed. Total bytes : " INT64_FORMAT "",
|
||||
current.data_bytes);
|
||||
@ -940,7 +939,7 @@ backup_cleanup(bool fatal, void *userdata)
|
||||
}
|
||||
|
||||
/*
|
||||
* Update status of backup in BACKUP_CONF_FILE to ERROR.
|
||||
* Update status of backup in BACKUP_CONTROL_FILE to ERROR.
|
||||
* end_time != 0 means backup finished
|
||||
*/
|
||||
if (current.status == BACKUP_STATUS_RUNNING && current.end_time == 0)
|
||||
@ -948,7 +947,7 @@ backup_cleanup(bool fatal, void *userdata)
|
||||
elog(LOG, "Backup is running, update its status to ERROR");
|
||||
current.end_time = time(NULL);
|
||||
current.status = BACKUP_STATUS_ERROR;
|
||||
pgBackupWriteConf(¤t);
|
||||
pgBackupWriteBackupControlFile(¤t);
|
||||
}
|
||||
}
|
||||
|
||||
|
90
catalog.c
90
catalog.c
@ -21,9 +21,8 @@
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static pgBackup *read_backup_from_file(const char *path);
|
||||
|
||||
#define BOOL_TO_STR(val) ((val) ? "true" : "false")
|
||||
static const char *backupModes[] = {"", "PAGE", "PTRACK", "FULL"};
|
||||
static pgBackup *readBackupControlFile(const char *path);
|
||||
|
||||
static bool exit_hook_registered = false;
|
||||
static char lock_file[MAXPGPATH];
|
||||
@ -208,7 +207,7 @@ catalog_lock(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* Read backup meta information from BACKUP_CONF_FILE.
|
||||
* Read backup meta information from BACKUP_CONTROL_FILE.
|
||||
* If no backup matches, return NULL.
|
||||
*/
|
||||
pgBackup *
|
||||
@ -218,9 +217,9 @@ read_backup(time_t timestamp)
|
||||
char conf_path[MAXPGPATH];
|
||||
|
||||
tmp.start_time = timestamp;
|
||||
pgBackupGetPath(&tmp, conf_path, lengthof(conf_path), BACKUP_CONF_FILE);
|
||||
pgBackupGetPath(&tmp, conf_path, lengthof(conf_path), BACKUP_CONTROL_FILE);
|
||||
|
||||
return read_backup_from_file(conf_path);
|
||||
return readBackupControlFile(conf_path);
|
||||
}
|
||||
|
||||
static bool
|
||||
@ -274,9 +273,9 @@ catalog_get_backup_list(time_t requested_backup_id)
|
||||
/* open subdirectory of specific backup */
|
||||
join_path_components(date_path, backups_path, date_ent->d_name);
|
||||
|
||||
/* read backup information from BACKUP_CONF_FILE */
|
||||
snprintf(backup_conf_path, MAXPGPATH, "%s/%s", date_path, BACKUP_CONF_FILE);
|
||||
backup = read_backup_from_file(backup_conf_path);
|
||||
/* read backup information from BACKUP_CONTROL_FILE */
|
||||
snprintf(backup_conf_path, MAXPGPATH, "%s/%s", date_path, BACKUP_CONTROL_FILE);
|
||||
backup = readBackupControlFile(backup_conf_path);
|
||||
|
||||
/* ignore corrupted backups */
|
||||
if (backup)
|
||||
@ -370,94 +369,83 @@ pgBackupCreateDir(pgBackup *backup)
|
||||
}
|
||||
|
||||
/*
|
||||
* Write configuration section of backup.in to stream "out".
|
||||
* Write information about backup.in to stream "out".
|
||||
* TODO improve comments
|
||||
*/
|
||||
void
|
||||
pgBackupWriteConfigSection(FILE *out, pgBackup *backup)
|
||||
{
|
||||
static const char *modes[] = { "", "PAGE", "PTRACK", "FULL"};
|
||||
|
||||
fprintf(out, "# configuration\n");
|
||||
fprintf(out, "BACKUP_MODE=%s\n", modes[backup->backup_mode]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Write result section of backup.in to stream "out".
|
||||
*/
|
||||
void
|
||||
pgBackupWriteResultSection(FILE *out, pgBackup *backup)
|
||||
pgBackupWriteControl(FILE *out, pgBackup *backup)
|
||||
{
|
||||
char timestamp[20];
|
||||
|
||||
fprintf(out, "# result\n");
|
||||
fprintf(out, "TIMELINEID=%d\n", backup->tli);
|
||||
fprintf(out, "START_LSN=%x/%08x\n",
|
||||
fprintf(out, "#Configuration\n");
|
||||
fprintf(out, "backup-mode = %s\n", backupModes[backup->backup_mode]);
|
||||
fprintf(out, "stream = %s\n", backup->stream?"true":"false");
|
||||
|
||||
fprintf(out, "\n#Compatibility\n");
|
||||
fprintf(out, "block-size = %u\n", backup->block_size);
|
||||
fprintf(out, "xlog-block-size = %u\n", backup->wal_block_size);
|
||||
fprintf(out, "checksum-version = %u\n", backup->checksum_version);
|
||||
|
||||
fprintf(out, "\n#Result backup info\n");
|
||||
fprintf(out, "timelineid = %d\n", backup->tli);
|
||||
fprintf(out, "start-lsn = %x/%08x\n",
|
||||
(uint32) (backup->start_lsn >> 32),
|
||||
(uint32) backup->start_lsn);
|
||||
fprintf(out, "STOP_LSN=%x/%08x\n",
|
||||
fprintf(out, "stop-lsn = %x/%08x\n",
|
||||
(uint32) (backup->stop_lsn >> 32),
|
||||
(uint32) backup->stop_lsn);
|
||||
|
||||
time2iso(timestamp, lengthof(timestamp), backup->start_time);
|
||||
fprintf(out, "START_TIME='%s'\n", timestamp);
|
||||
fprintf(out, "start-time = '%s'\n", timestamp);
|
||||
if (backup->end_time > 0)
|
||||
{
|
||||
time2iso(timestamp, lengthof(timestamp), backup->end_time);
|
||||
fprintf(out, "END_TIME='%s'\n", timestamp);
|
||||
fprintf(out, "end-time = '%s'\n", timestamp);
|
||||
}
|
||||
fprintf(out, "RECOVERY_XID=" XID_FMT "\n", backup->recovery_xid);
|
||||
fprintf(out, "recovery-xid = " XID_FMT "\n", backup->recovery_xid);
|
||||
if (backup->recovery_time > 0)
|
||||
{
|
||||
time2iso(timestamp, lengthof(timestamp), backup->recovery_time);
|
||||
fprintf(out, "RECOVERY_TIME='%s'\n", timestamp);
|
||||
fprintf(out, "recovery-time = '%s'\n", timestamp);
|
||||
}
|
||||
|
||||
/* TODO rename the field? */
|
||||
if (backup->data_bytes != BYTES_INVALID)
|
||||
fprintf(out, "DATA_BYTES=" INT64_FORMAT "\n",
|
||||
backup->data_bytes);
|
||||
fprintf(out, "BLOCK_SIZE=%u\n", backup->block_size);
|
||||
fprintf(out, "XLOG_BLOCK_SIZE=%u\n", backup->wal_block_size);
|
||||
fprintf(out, "CHECKSUM_VERSION=%u\n", backup->checksum_version);
|
||||
fprintf(out, "STREAM=%u\n", backup->stream);
|
||||
fprintf(out, "data-bytes = " INT64_FORMAT "\n", backup->data_bytes);
|
||||
|
||||
fprintf(out, "STATUS=%s\n", status2str(backup->status));
|
||||
fprintf(out, "status = %s\n", status2str(backup->status));
|
||||
if (backup->parent_backup != 0)
|
||||
{
|
||||
char *parent_backup = base36enc(backup->parent_backup);
|
||||
fprintf(out, "PARENT_BACKUP='%s'\n", parent_backup);
|
||||
fprintf(out, "parent-backup-id = '%s'\n", parent_backup);
|
||||
free(parent_backup);
|
||||
}
|
||||
}
|
||||
|
||||
/* create BACKUP_CONF_FILE */
|
||||
/* create BACKUP_CONTROL_FILE */
|
||||
void
|
||||
pgBackupWriteConf(pgBackup *backup)
|
||||
pgBackupWriteBackupControlFile(pgBackup *backup)
|
||||
{
|
||||
FILE *fp = NULL;
|
||||
char ini_path[MAXPGPATH];
|
||||
|
||||
pgBackupGetPath(backup, ini_path, lengthof(ini_path), BACKUP_CONF_FILE);
|
||||
pgBackupGetPath(backup, ini_path, lengthof(ini_path), BACKUP_CONTROL_FILE);
|
||||
fp = fopen(ini_path, "wt");
|
||||
if (fp == NULL)
|
||||
elog(ERROR, "cannot open configuration file \"%s\": %s", ini_path,
|
||||
strerror(errno));
|
||||
|
||||
/* configuration section */
|
||||
pgBackupWriteConfigSection(fp, backup);
|
||||
|
||||
/* result section */
|
||||
pgBackupWriteResultSection(fp, backup);
|
||||
pgBackupWriteControl(fp, backup);
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read BACKUP_CONF_FILE and create pgBackup.
|
||||
* Read BACKUP_CONTROL_FILE and create pgBackup.
|
||||
* - Comment starts with ';'.
|
||||
* - Do not care section.
|
||||
*/
|
||||
static pgBackup *
|
||||
read_backup_from_file(const char *path)
|
||||
readBackupControlFile(const char *path)
|
||||
{
|
||||
pgBackup *backup = pgut_new(pgBackup);
|
||||
char *backup_mode = NULL;
|
||||
@ -480,7 +468,7 @@ read_backup_from_file(const char *path)
|
||||
{'u', 0, "block-size", &backup->block_size, SOURCE_FILE_STRICT},
|
||||
{'u', 0, "xlog-block-size", &backup->wal_block_size, SOURCE_FILE_STRICT},
|
||||
{'u', 0, "checksum_version", &backup->checksum_version, SOURCE_FILE_STRICT},
|
||||
{'u', 0, "stream", &backup->stream, SOURCE_FILE_STRICT},
|
||||
{'b', 0, "stream", &backup->stream, SOURCE_FILE_STRICT},
|
||||
{'s', 0, "status", &status, SOURCE_FILE_STRICT},
|
||||
{'s', 0, "parent_backup", &parent_backup, SOURCE_FILE_STRICT},
|
||||
{0}
|
||||
|
2
delete.c
2
delete.c
@ -271,7 +271,7 @@ pgBackupDeleteFiles(pgBackup *backup)
|
||||
* the error occurs before deleting all backup files.
|
||||
*/
|
||||
backup->status = BACKUP_STATUS_DELETING;
|
||||
pgBackupWriteConf(backup);
|
||||
pgBackupWriteBackupControlFile(backup);
|
||||
|
||||
/* list files to be deleted */
|
||||
files = parray_new();
|
||||
|
@ -36,7 +36,7 @@
|
||||
#define BACKUPS_DIR "backups"
|
||||
#define PG_XLOG_DIR "pg_xlog"
|
||||
#define PG_TBLSPC_DIR "pg_tblspc"
|
||||
#define BACKUP_CONF_FILE "backup.conf"
|
||||
#define BACKUP_CONTROL_FILE "backup.control"
|
||||
#define BACKUP_CATALOG_CONF_FILE "pg_probackup.conf"
|
||||
#define BACKUP_CATALOG_PID "pg_probackup.pid"
|
||||
#define DATABASE_FILE_LIST "backup_content.control"
|
||||
@ -286,9 +286,8 @@ extern parray *catalog_get_backup_list(time_t requested_backup_id);
|
||||
extern pgBackup *catalog_get_last_data_backup(parray *backup_list,
|
||||
TimeLineID tli);
|
||||
extern void catalog_lock(void);
|
||||
extern void pgBackupWriteConfigSection(FILE *out, pgBackup *backup);
|
||||
extern void pgBackupWriteResultSection(FILE *out, pgBackup *backup);
|
||||
extern void pgBackupWriteConf(pgBackup *backup);
|
||||
extern void pgBackupWriteControl(FILE *out, pgBackup *backup);
|
||||
extern void pgBackupWriteBackupControlFile(pgBackup *backup);
|
||||
extern void pgBackupGetPath(const pgBackup *backup, char *path, size_t len, const char *subdir);
|
||||
extern int pgBackupCreateDir(pgBackup *backup);
|
||||
extern void pgBackupFree(void *backup);
|
||||
|
7
show.c
7
show.c
@ -11,6 +11,7 @@
|
||||
#include "pg_probackup.h"
|
||||
#include <time.h>
|
||||
|
||||
static const char *backupModes[] = {"", "PAGE", "PTRACK", "FULL"};
|
||||
static void show_backup_list(FILE *out, parray *backup_list);
|
||||
static void show_backup_detail(FILE *out, pgBackup *backup);
|
||||
|
||||
@ -172,7 +173,6 @@ show_backup_list(FILE *out, parray *backup_list)
|
||||
for (i = 0; i < parray_num(backup_list); i++)
|
||||
{
|
||||
pgBackup *backup = parray_get(backup_list, i);
|
||||
const char *modes[] = {"", "PAGE", "PTRACK", "FULL"};
|
||||
TimeLineID parent_tli;
|
||||
char timestamp[20] = "----";
|
||||
char duration[20] = "----";
|
||||
@ -198,7 +198,7 @@ show_backup_list(FILE *out, parray *backup_list)
|
||||
fprintf(out, "%-8s %-19s %s%s %2d / %-2d %5s %6s %2X/%08X %2X/%08X %-8s\n",
|
||||
base36enc(backup->start_time),
|
||||
timestamp,
|
||||
modes[backup->backup_mode],
|
||||
backupModes[backup->backup_mode],
|
||||
backup->stream ? "+STREAM": "+ARCHIVE",
|
||||
backup->tli,
|
||||
parent_tli,
|
||||
@ -215,6 +215,5 @@ show_backup_list(FILE *out, parray *backup_list)
|
||||
static void
|
||||
show_backup_detail(FILE *out, pgBackup *backup)
|
||||
{
|
||||
pgBackupWriteConfigSection(out, backup);
|
||||
pgBackupWriteResultSection(out, backup);
|
||||
pgBackupWriteControl(out, backup);
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ pgBackupValidate(pgBackup *backup)
|
||||
|
||||
/* Update backup status */
|
||||
backup->status = corrupted ? BACKUP_STATUS_CORRUPT : BACKUP_STATUS_OK;
|
||||
pgBackupWriteConf(backup);
|
||||
pgBackupWriteBackupControlFile(backup);
|
||||
|
||||
if (corrupted)
|
||||
elog(WARNING, "Backup %s is corrupted", backup_id_string);
|
||||
|
Loading…
x
Reference in New Issue
Block a user