1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2025-03-17 21:18:00 +02:00

save files belonging to a timeline into xlog_filelist array in timelineInfo structure

This commit is contained in:
Grigory Smolkin 2019-09-20 10:47:07 +03:00
parent f6ce9f0287
commit ec6a627d4d
2 changed files with 60 additions and 3 deletions

View File

@ -35,6 +35,7 @@ timelineInfoNew(TimeLineID tli)
tlinfo->tli = tli;
tlinfo->switchpoint = InvalidXLogRecPtr;
tlinfo->parent_link = NULL;
tlinfo->xlog_filelist = parray_new();
return tlinfo;
}
@ -705,6 +706,7 @@ catalog_get_timelines(InstanceConfig *instance)
pgFile *file = (pgFile *) parray_get(xlog_files_list, i);
TimeLineID tli;
parray *timelines;
xlogFile *wal_file = NULL;
/* regular WAL file */
if (strspn(file->name, "0123456789ABCDEF") == XLOG_FNAME_LEN)
@ -731,7 +733,39 @@ catalog_get_timelines(InstanceConfig *instance)
/* backup history file. Currently we don't use them */
if (IsBackupHistoryFileName(file->name))
{
elog(VERBOSE, "backup history file \"%s\". do nothing", file->name);
elog(VERBOSE, "backup history file \"%s\"", file->name);
if (!tlinfo || tlinfo->tli != tli)
{
tlinfo = timelineInfoNew(tli);
parray_append(timelineinfos, tlinfo);
}
/* append file to xlog file list */
wal_file = palloc(sizeof(xlogFile));
wal_file->file = *file;
wal_file->segno = segno;
wal_file->type = BACKUP_HISTORY_FILE;
parray_append(tlinfo->xlog_filelist, wal_file);
continue;
}
/* partial WAL segment */
else if (IsPartialXLogFileName(file->name))
{
elog(VERBOSE, "partial WAL file \"%s\"", file->name);
if (!tlinfo || tlinfo->tli != tli)
{
tlinfo = timelineInfoNew(tli);
parray_append(timelineinfos, tlinfo);
}
/* append file to xlog file list */
wal_file = palloc(sizeof(xlogFile));
wal_file->file = *file;
wal_file->segno = segno;
wal_file->type = PARTIAL_SEGMENT;
parray_append(tlinfo->xlog_filelist, wal_file);
continue;
}
/* we only expect compressed wal files with .gz suffix */
@ -779,6 +813,13 @@ catalog_get_timelines(InstanceConfig *instance)
/* update counters */
tlinfo->n_xlog_files++;
tlinfo->size += file->size;
/* append file to xlog file list */
wal_file = palloc(sizeof(xlogFile));
wal_file->file = *file;
wal_file->segno = segno;
wal_file->type = SEGMENT;
parray_append(tlinfo->xlog_filelist, wal_file);
}
/* timeline history file */
else if (IsTLHistoryFileName(file->name))
@ -847,8 +888,8 @@ catalog_get_timelines(InstanceConfig *instance)
tlinfo->closest_backup = get_closest_backup(tlinfo, backups);
}
parray_walk(xlog_files_list, pfree);
parray_free(xlog_files_list);
//parray_walk(xlog_files_list, pfree);
//parray_free(xlog_files_list);
return timelineinfos;
}

View File

@ -403,6 +403,8 @@ struct timelineInfo {
size_t size; /* space on disk taken by regular WAL files */
parray *backups; /* array of pgBackup sturctures with info
* about backups belonging to this timeline */
parray *xlog_filelist; /* array of ordinary WAL segments, '.partial'
* and '.backup' files belonging to this timeline */
parray *lost_segments; /* array of intervals of lost segments */
pgBackup *closest_backup; /* link to backup, closest to timeline */
pgBackup *oldest_backup; /* link to oldest backup on timeline */
@ -414,6 +416,20 @@ typedef struct xlogInterval
XLogSegNo end_segno;
} xlogInterval;
typedef enum xlogFileType
{
SEGMENT,
PARTIAL_SEGMENT,
BACKUP_HISTORY_FILE
} xlogFileType;
typedef struct xlogFile
{
pgFile file;
XLogSegNo segno;
xlogFileType type;
} xlogFile;
/*
* When copying datafiles to backup we validate and compress them block