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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy