8000 [PBCKP-146] prettify forkname handling. · postgrespro/pg_probackup@cbc37b2 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit cbc37b2

Browse files
committed
[PBCKP-146] prettify forkname handling.
1 parent 4ec7b9c commit cbc37b2

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" B41A ) == 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)
0