Skip to content

Commit cbc37b2

Browse files
committedOct 14, 2022

File tree

3 files changed

+48
-46
lines changed

3 files changed

+48
-46
lines changed
 

‎src/catalog.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1138,6 +1138,9 @@ get_backup_filelist(pgBackup *backup, bool strict)
11381138
if (get_control_value_int64(buf, "hdr_size", &hdr_size, false))
11391139
file->hdr_size = (int) hdr_size;
11401140

1141+
if (file->external_dir_num == 0)
1142+
set_forkname(file);
1143+
11411144
parray_append(files, file);
11421145
}
11431146

@@ -2516,7 +2519,7 @@ write_backup_filelist(pgBackup *backup, parray *files, const char *root,
25162519
char control_path[MAXPGPATH];
25172520
char control_path_temp[MAXPGPATH];
25182521
size_t i = 0;
2519-
#define BUFFERSZ 1024*1024
2522+
#define BUFFERSZ (1024*1024)
25202523
char *buf;
25212524
int64 backup_size_on_disk = 0;
25222525
int64 uncompressed_size_on_disk = 0;

‎src/dir.c

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -680,57 +680,22 @@ dir_check_file(pgFile *file, bool backup_logs)
680680
return CHECK_FALSE;
681681
else if (isdigit(file->name[0]))
682682
{
683-
char *fork_name;
684-
int len;
685-
char suffix[MAXPGPATH];
683+
set_forkname(file);
686684

687-
fork_name = strstr(file->name, "_");
688-
if (fork_name)
689-
{
690-
/* Auxiliary fork of the relfile */
691-
if (strcmp(fork_name, "_vm") == 0)
692-
file->forkName = vm;
693-
694-
else if (strcmp(fork_name, "_fsm") == 0)
695-
file->forkName = fsm;
696-
697-
else if (strcmp(fork_name, "_cfm") == 0)
698-
file->forkName = cfm;
699-
700-
else if (strcmp(fork_name, "_ptrack") == 0)
701-
file->forkName = ptrack;
702-
703-
else if (strcmp(fork_name, "_init") == 0)
704-
file->forkName = init;
705-
706-
// extract relOid for certain forks
707-
if (file->forkName == vm ||
708-
file->forkName == fsm ||
709-
file->forkName == init ||
710-
file->forkName == cfm)
711-
{
712-
// sanity
713-
if (sscanf(file->name, "%u_*", &(file->relOid)) != 1)
714-
file->relOid = 0;
715-
}
685+
if (file->forkName == ptrack) /* Compatibility with left-overs from ptrack1 */
686+
return CHECK_FALSE;
687+
else if (file->forkName != none)
688+
return CHECK_TRUE;
716689

717-
/* Do not backup ptrack files */
718-
if (file->forkName == ptrack)
719-
return CHECK_FALSE;
720-
}
721-
else
690+
/* Set is_datafile flag */
722691
{
692+
char suffix[MAXFNAMELEN];
723693

724-
len = strlen(file->name);
725-
/* reloid.cfm */
726-
if (len > 3 && strcmp(file->name + len - 3, "cfm") == 0)
727-
return CHECK_TRUE;
728-
694+
/* check if file is datafile */
729695
sscanf_res = sscanf(file->name, "%u.%d.%s", &(file->relOid),
730696
&(file->segno), suffix);
731-
if (sscanf_res == 0)
732-
elog(ERROR, "Cannot parse file name \"%s\"", file->name);
733-
else if (sscanf_res == 1 || sscanf_res == 2)
697+
Assert(sscanf_res > 0); /* since first char is digit */
698+
if (sscanf_res == 1 || sscanf_res == 2)
734699
file->is_datafile = true;
735700
}
736701
}
@@ -1869,3 +1834,35 @@ pfilearray_clear_locks(parray *file_list)
18691834
pg_atomic_clear_flag(&file->lock);
18701835
}
18711836
}
1837+
1838+
/* Set forkName if possible */
1839+
void
1840+
set_forkname(pgFile *file)
1841+
{
1842+
int name_len = strlen(file->name);
1843+
1844+
/* Auxiliary fork of the relfile */
1845+
if (name_len > 3 && strcmp(file->name + name_len - 3, "_vm") == 0)
1846+
file->forkName = vm;
1847+
1848+
else if (name_len > 4 && strcmp(file->name + name_len - 4, "_fsm") == 0)
1849+
file->forkName = fsm;
1850+
1851+
else if (name_len > 4 && strcmp(file->name + name_len - 4, ".cfm") == 0)
1852+
file->forkName = cfm;
1853+
1854+
else if (name_len > 5 && strcmp(file->name + name_len - 5, "_init") == 0)
1855+
file->forkName = init;
1856+
1857+
else if (name_len > 7 && strcmp(file->name + name_len - 7, "_ptrack") == 0)
1858+
file->forkName = ptrack;
1859+
1860+
// extract relOid for certain forks
1861+
1862+
if ((file->forkName == vm ||
1863+
file->forkName == fsm ||
1864+
file->forkName == init ||
1865+
file->forkName == cfm) &&
1866+
(sscanf(file->name, "%u*", &(file->relOid)) != 1))
1867+
file->relOid = 0;
1868+
}

‎src/pg_probackup.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ typedef enum CompressAlg
200200

201201
typedef enum ForkName
202202
{
203+
none,
203204
vm,
204205
fsm,
205206
cfm,
@@ -1061,6 +1062,7 @@ extern int pgCompareString(const void *str1, const void *str2);
10611062
extern int pgPrefixCompareString(const void *str1, const void *str2);
10621063
extern int pgCompareOid(const void *f1, const void *f2);
10631064
extern void pfilearray_clear_locks(parray *file_list);
1065+
extern void set_forkname(pgFile *file);
10641066

10651067
/* in data.c */
10661068
extern bool check_data_file(ConnectionArgs *arguments, pgFile *file,

0 commit comments

Comments
 (0)
Please sign in to comment.