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

Commita40f1f5

Browse files
author
Artur Zakirov
committed
Refactor do_delete() function
1 parenta5e2c83 commita40f1f5

File tree

2 files changed

+57
-34
lines changed

2 files changed

+57
-34
lines changed

‎delete.c

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ int
2222
do_delete(time_tbackup_id)
2323
{
2424
inti;
25-
intlast_index;
26-
parray*backup_list;
27-
pgBackup*last_backup=NULL;
25+
parray*backup_list,
26+
*delete_list;
27+
time_tparent_id=0;
28+
boolbackup_found= false;
2829

2930
/* DATE are always required */
3031
if (backup_id==0)
@@ -38,47 +39,59 @@ do_delete(time_t backup_id)
3839
if (!backup_list)
3940
elog(ERROR,"no backup list found, can't process any more");
4041

41-
/* Find backup to be deleted */
42-
for (i=0;i<parray_num(backup_list);i++)
42+
delete_list=parray_new();
43+
44+
/* Find backup to be deleted and make increment backups array to be deleted */
45+
for (i= (int)parray_num(backup_list)-1;i >=0;i--)
4346
{
44-
last_backup= (pgBackup*)parray_get(backup_list,i);
45-
if (last_backup->start_time==backup_id)
46-
gotofound_backup;
47-
}
47+
pgBackup*backup= (pgBackup*)parray_get(backup_list, (size_t)i);
4848

49-
elog(ERROR,"no backup found, cannot delete.");
49+
if (backup->start_time==backup_id)
50+
{
51+
parray_append(delete_list,backup);
5052

51-
found_backup:
52-
last_index=i;
53-
/* check for interrupt */
54-
if (interrupted)
55-
elog(ERROR,"interrupted during delete backup");
53+
/*
54+
* Do not remove next backups, if target backup was finished
55+
* incorrectly.
56+
*/
57+
if (backup->status==BACKUP_STATUS_ERROR)
58+
break;
5659

57-
/* just do it */
58-
pgBackupDeleteFiles(last_backup);
60+
/* Save backup id to retreive increment backups */
61+
parent_id=backup->start_time;
62+
backup_found= true;
63+
}
64+
elseif (backup_found)
65+
{
66+
if (backup->backup_mode!=BACKUP_MODE_FULL&&
67+
backup->parent_backup==parent_id)
68+
{
69+
/* Append to delete list increment backup */
70+
parray_append(delete_list,backup);
71+
/* Save backup id to retreive increment backups */
72+
parent_id=backup->start_time;
73+
}
74+
else
75+
break;
76+
}
77+
}
5978

60-
/*
61-
* Do not remove next backups, if current backup is not full backup and
62-
* was finished incorrectly.
63-
*/
64-
if (last_backup->status!=BACKUP_STATUS_OK&&
65-
last_backup->status!=BACKUP_STATUS_CORRUPT&&
66-
last_backup->backup_mode!=BACKUP_MODE_FULL)
67-
return0;
79+
if (parray_num(delete_list)==0)
80+
elog(ERROR,"no backup found, cannot delete");
6881

69-
/*Remove all increments after removed backup */
70-
for (i=last_index-1;i >=0;i--)
82+
/*Delete backups from the end of list */
83+
for (i=(int)parray_num(delete_list)-1;i >=0;i--)
7184
{
72-
pgBackup*backup= (pgBackup*)parray_get(backup_list,i);
85+
pgBackup*backup= (pgBackup*)parray_get(delete_list, (size_t)i);
7386

74-
/* Stop removing increments */
75-
if (backup->backup_mode >=BACKUP_MODE_FULL)
76-
break;
87+
if (interrupted)
88+
elog(ERROR,"interrupted during delete backup");
7789

7890
pgBackupDeleteFiles(backup);
7991
}
8092

8193
/* cleanup */
94+
parray_free(delete_list);
8295
parray_walk(backup_list,pgBackupFree);
8396
parray_free(backup_list);
8497

@@ -295,6 +308,7 @@ pgBackupDeleteFiles(pgBackup *backup)
295308

296309
parray_walk(files,pgFileFree);
297310
parray_free(files);
311+
backup->status=BACKUP_STATUS_DELETED;
298312

299313
return0;
300314
}

‎tests/delete_test.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,21 @@ def test_delete_increment_2(self):
6868
withopen(path.join(node.logs_dir,"backup_3.log"),"wb")asbackup_log:
6969
backup_log.write(self.backup_pb(node,backup_type="page",options=["--verbose"]))
7070

71+
# full backup mode
72+
self.backup_pb(node)
73+
7174
show_backups=self.show_pb(node)
72-
self.assertEqual(len(show_backups),3)
73-
self.delete_pb(node,show_backups[1].id)
75+
self.assertEqual(len(show_backups),4)
76+
77+
# delete first page backup
78+
self.delete_pb(node,show_backups[2].id)
79+
7480
show_backups=self.show_pb(node)
75-
self.assertEqual(len(show_backups),1)
81+
self.assertEqual(len(show_backups),2)
82+
7683
self.assertEqual(show_backups[0].mode,six.b("FULL"))
7784
self.assertEqual(show_backups[0].status,six.b("OK"))
85+
self.assertEqual(show_backups[1].mode,six.b("FULL"))
86+
self.assertEqual(show_backups[1].status,six.b("OK"))
7887

7988
node.stop()

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp