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

Skip to content

Commit e16c62e

Browse files
committed
[PBCKP-146] prettify forkname handling.
1 parent 4730857 commit e16c62e

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
@@ -1132,6 +1132,9 @@ get_backup_filelist(pgBackup *backup, bool strict)
11321132
if (get_control_value_int64(buf, "hdr_size", &hdr_size, false))
11331133
file->hdr_size = (int) hdr_size;
11341134

1135+
if (file->external_dir_num == 0)
1136+
set_forkname(file);
1137+
11351138
parray_append(files, file);
11361139
}
11371140

@@ -2488,7 +2491,7 @@ write_backup_filelist(pgBackup *backup, parray *files, const char *root,
24882491
char control_path[MAXPGPATH];
24892492
char control_path_temp[MAXPGPATH];
24902493
size_t i = 0;
2491-
#define BUFFERSZ 1024*1024
2494+
#define BUFFERSZ (1024*1024)
24922495
char *buf;
24932496
int64 backup_size_on_disk = 0;
24942497
int64 uncompressed_size_on_disk = 0;

src/dir.c

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -758,57 +758,22 @@ dir_check_file(pgFile *file, bool backup_logs)
758758
return CHECK_FALSE;
759759
else if (isdigit(file->name[0]))
760760
{
761-
char *fork_name;
762-
int len;
763-
char suffix[MAXPGPATH];
761+
set_forkname(file);
764762

765-
fork_name = strstr(file->name, "_");
766-
if (fork_name)
767-
{
768-
/* Auxiliary fork of the relfile */
769-
if (strcmp(fork_name, "_vm") == 0)
770-
file->forkName = vm;
771-
772-
else if (strcmp(fork_name, "_fsm") == 0)
773-
file->forkName = fsm;
774-
775-
else if (strcmp(fork_name, "_cfm") == 0)
776-
file->forkName = cfm;
777-
778-
else if (strcmp(fork_name, "_ptrack") == 0)
779-
file->forkName = ptrack;
780-
781-
else if (strcmp(fork_name, "_init") == 0)
782-
file->forkName = init;
783-
784-
// extract relOid for certain forks
785-
if (file->forkName == vm ||
786-
file->forkName == fsm ||
787-
file->forkName == init ||
788-
file->forkName == cfm)
789-
{
790-
// sanity
791-
if (sscanf(file->name, "%u_*", &(file->relOid)) != 1)
792-
file->relOid = 0;
793-
}
763+
if (file->forkName == ptrack) /* Compatibility with left-overs from ptrack1 */
764+
return CHECK_FALSE;
765+
else if (file->forkName != none)
766+
return CHECK_TRUE;
794767

795-
/* Do not backup ptrack files */
796-
if (file->forkName == ptrack)
797-
return CHECK_FALSE;
798-
}
799-
else
768+
/* Set is_datafile flag */
800769
{
770+
char suffix[MAXFNAMELEN];
801771

802-
len = strlen(file->name);
803-
/* reloid.cfm */
804-
if (len > 3 && strcmp(file->name + len - 3, "cfm") == 0)
805-
return CHECK_TRUE;
806-
772+
/* check if file is datafile */
807773
sscanf_res = sscanf(file->name, "%u.%d.%s", &(file->relOid),
808774
&(file->segno), suffix);
809-
if (sscanf_res == 0)
810-
elog(ERROR, "Cannot parse file name \"%s\"", file->name);
811-
else if (sscanf_res == 1 || sscanf_res == 2)
775+
Assert(sscanf_res > 0); /* since first char is digit */
776+
if (sscanf_res == 1 || sscanf_res == 2)
812777
file->is_datafile = true;
813778
}
814779
}
@@ -1954,3 +1919,35 @@ pfilearray_clear_locks(parray *file_list)
19541919
pg_atomic_clear_flag(&file->lock);
19551920
}
19561921
}
1922+
1923+
/* Set forkName if possible */
1924+
void
1925+
set_forkname(pgFile *file)
1926+
{
1927+
int name_len = strlen(file->name);
1928+
1929+
/* Auxiliary fork of the relfile */
1930+
if (name_len > 3 && strcmp(file->name + name_len - 3, "_vm") == 0)
1931+
file->forkName = vm;
1932+
1933+
else if (name_len > 4 && strcmp(file->name + name_len - 4, "_fsm") == 0)
1934+
file->forkName = fsm;
1935+
1936+
else if (name_len > 4 && strcmp(file->name + name_len - 4, ".cfm") == 0)
1937+
file->forkName = cfm;
1938+
1939+
else if (name_len > 5 && strcmp(file->name + name_len - 5, "_init") == 0)
1940+
file->forkName = init;
1941+
1942+
else if (name_len > 7 && strcmp(file->name + name_len - 7, "_ptrack") == 0)
1943+
file->forkName = ptrack;
1944+
1945+
// extract relOid for certain forks
1946+
1947+
if ((file->forkName == vm ||
1948+
file->forkName == fsm ||
1949+
file->forkName == init ||
1950+
file->forkName == cfm) &&
1951+
(sscanf(file->name, "%u*", &(file->relOid)) != 1))
1952+
file->relOid = 0;
1953+
}

src/pg_probackup.h

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

216216
typedef enum ForkName
217217
{
218+
none,
218219
vm,
219220
fsm,
220221
cfm,
@@ -1091,6 +1092,7 @@ extern int pgCompareString(const void *str1, const void *str2);
10911092
extern int pgPrefixCompareString(const void *str1, const void *str2);
10921093
extern int pgCompareOid(const void *f1, const void *f2);
10931094
extern void pfilearray_clear_locks(parray *file_list);
1095+
extern void set_forkname(pgFile *file);
10941096

10951097
/* in data.c */
10961098
extern bool check_data_file(ConnectionArgs *arguments, pgFile *file,

0 commit comments

Comments
 (0)
0