Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commit7ba0302

Browse files
committed
Refactor delete command and add delwal command.
1 parentff61fcc commit7ba0302

File tree

4 files changed

+48
-22
lines changed

4 files changed

+48
-22
lines changed

‎delete.c

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include<unistd.h>
1414

1515
staticintpgBackupDeleteFiles(pgBackup*backup);
16+
intdo_deletewal(time_tbackup_id,boolstrict);
1617

1718
int
1819
do_delete(time_tbackup_id)
@@ -21,8 +22,6 @@ do_delete(time_t backup_id)
2122
intb_index;
2223
intret;
2324
parray*backup_list;
24-
XLogRecPtroldest_lsn=InvalidXLogRecPtr;
25-
TimeLineIDoldest_tli;
2625
pgBackup*last_backup;
2726

2827
/* DATE are always required */
@@ -82,37 +81,58 @@ do_delete(time_t backup_id)
8281
/* cleanup */
8382
parray_walk(backup_list,pgBackupFree);
8483
parray_free(backup_list);
84+
85+
if (delete_wal)
86+
do_deletewal(backup_id, false);
87+
88+
return0;
89+
}
90+
91+
intdo_deletewal(time_tbackup_id,boolstrict)
92+
{
93+
inti;
94+
intret;
95+
parray*backup_list;
96+
XLogRecPtroldest_lsn=InvalidXLogRecPtr;
97+
TimeLineIDoldest_tli;
98+
pgBackup*last_backup;
99+
boolbackup_found= false;
100+
85101
/*
86102
* Delete in archive WAL segments that are not needed anymore. The oldest
87103
* segment to be kept is the first segment that the oldest full backup
88104
* found around needs to keep.
89105
*/
90-
if (delete_wal)
106+
/* Lock backup catalog */
107+
ret=catalog_lock();
108+
if (ret==-1)
109+
elog(ERROR,"can't lock backup catalog.");
110+
elseif (ret==1)
111+
elog(ERROR,
112+
"another pg_arman is running, stop delete.");
113+
114+
backup_list=catalog_get_backup_list(0);
115+
for (i=0;i<parray_num(backup_list);i++)
91116
{
92-
/* Lock backup catalog */
93-
ret=catalog_lock();
94-
if (ret==-1)
95-
elog(ERROR,"can't lock backup catalog.");
96-
elseif (ret==1)
97-
elog(ERROR,
98-
"another pg_arman is running, stop delete.");
99-
100-
backup_list=catalog_get_backup_list(0);
101-
for (i=0;i<parray_num(backup_list);i++)
117+
last_backup= (pgBackup*)parray_get(backup_list,i);
118+
if (last_backup->status==BACKUP_STATUS_OK)
102119
{
103-
last_backup= (pgBackup*)parray_get(backup_list,i);
104-
if (last_backup->status==BACKUP_STATUS_OK)
120+
oldest_lsn=last_backup->start_lsn;
121+
oldest_tli=last_backup->tli;
122+
if (strict&&backup_id!=0&&backup_id >=last_backup->start_time)
105123
{
106-
oldest_lsn=last_backup->start_lsn;
107-
oldest_tli=last_backup->tli;
124+
backup_found=true;
125+
break;
108126
}
109127
}
110-
catalog_unlock();
111-
parray_walk(backup_list,pgBackupFree);
112-
parray_free(backup_list);
113128
}
129+
if (strict&&backup_id!=0&&backup_found== false)
130+
elog(ERROR,"not found backup for deletwal command");
131+
catalog_unlock();
132+
parray_walk(backup_list,pgBackupFree);
133+
parray_free(backup_list);
114134

115-
if (delete_wal&&!XLogRecPtrIsInvalid(oldest_lsn))
135+
if (!XLogRecPtrIsInvalid(oldest_lsn))
116136
{
117137
XLogSegNotargetSegNo;
118138
charoldestSegmentNeeded[MAXFNAMELEN];

‎expected/option.out

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Usage:
1010
pg_arman OPTION show [ID]
1111
pg_arman OPTION validate [ID]
1212
pg_arman OPTION delete ID
13+
pg_arman OPTION delwal [ID]
1314

1415
Common Options:
1516
-D, --pgdata=PATH location of the database storage area

‎pg_arman.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ main(int argc, char *argv[])
110110
if(strcmp(cmd,"show")!=0&&
111111
strcmp(cmd,"validate")!=0&&
112112
strcmp(cmd,"delete")!=0&&
113-
strcmp(cmd,"restore")!=0)
113+
strcmp(cmd,"restore")!=0&&
114+
strcmp(cmd,"delwal")!=0)
114115
break;
115116
}elseif (backup_id_string==NULL)
116117
backup_id_string=argv[i];
@@ -209,6 +210,8 @@ main(int argc, char *argv[])
209210
returndo_validate(backup_id);
210211
elseif (pg_strcasecmp(cmd,"delete")==0)
211212
returndo_delete(backup_id);
213+
elseif (pg_strcasecmp(cmd,"delwal")==0)
214+
returndo_deletewal(backup_id, true);
212215
else
213216
elog(ERROR,"invalid command \"%s\"",cmd);
214217

@@ -226,6 +229,7 @@ pgut_help(bool details)
226229
printf(_(" %s OPTION show [ID]\n"),PROGRAM_NAME);
227230
printf(_(" %s OPTION validate [ID]\n"),PROGRAM_NAME);
228231
printf(_(" %s OPTION delete ID\n"),PROGRAM_NAME);
232+
printf(_(" %s OPTION delwal [ID]\n"),PROGRAM_NAME);
229233

230234
if (!details)
231235
return;

‎pg_arman.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ extern int do_show(time_t backup_id, bool show_all);
230230
/* in delete.c */
231231
externintdo_delete(time_tbackup_id);
232232
externvoidpgBackupDelete(intkeep_generations,intkeep_days);
233+
externintdo_deletewal(time_tbackup_id,boolstrict);
233234

234235
/* in fetch.c */
235236
externchar*slurpFile(constchar*datadir,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp