1
0
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:
Anastasia 2017-04-19 12:01:10 +03:00
parent 31efd8f598
commit 12cc3a1491
6 changed files with 56 additions and 71 deletions

View File

@ -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(&current);
pgBackupWriteBackupControlFile(&current);
}
/* 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, &current);
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(&current))
elog(ERROR, "cannot create backup directory");
pgBackupWriteConf(&current);
pgBackupWriteBackupControlFile(&current);
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(&current);
pgBackupWriteBackupControlFile(&current);
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(&current);
pgBackupWriteBackupControlFile(&current);
}
}

View File

@ -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}

View File

@ -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();

View File

@ -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
View File

@ -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);
}

View File

@ -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);