|
2 | 2 | import unittest
|
3 | 3 | from datetime import datetime, timedelta
|
4 | 4 | from .helpers.ptrack_helpers import ProbackupTest
|
| 5 | +from time import sleep |
5 | 6 |
|
6 | 7 |
|
7 | 8 | module_name = 'retention'
|
@@ -1233,4 +1234,46 @@ def test_window_error_backups(self):
|
1233 | 1234 | backup_dir, 'node', node, backup_type='page')
|
1234 | 1235 |
|
1235 | 1236 | # Change FULLb backup status to ERROR
|
1236 |
| - # self.change_backup_status(backup_dir, 'node', backup_id_b, 'ERROR') |
| 1237 | + self.change_backup_status(backup_dir, 'node', backup_id_b, 'ERROR') |
| 1238 | + |
| 1239 | + def test_retention_redundancy_overlapping_chains(self): |
| 1240 | + """""" |
| 1241 | + fname = self.id().split('.')[3] |
| 1242 | + node = self.make_simple_node( |
| 1243 | + base_dir=os.path.join(module_name, fname, 'node'), |
| 1244 | + initdb_params=['--data-checksums']) |
| 1245 | + |
| 1246 | + backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup') |
| 1247 | + self.init_pb(backup_dir) |
| 1248 | + self.add_instance(backup_dir, 'node', node) |
| 1249 | + self.set_archiving(backup_dir, 'node', node) |
| 1250 | + node.slow_start() |
| 1251 | + |
| 1252 | + self.set_config( |
| 1253 | + backup_dir, 'node', options=['--retention-redundancy=1']) |
| 1254 | + |
| 1255 | + # Make backups to be purged |
| 1256 | + self.backup_node(backup_dir, 'node', node) |
| 1257 | + self.backup_node(backup_dir, 'node', node, backup_type="page") |
| 1258 | + |
| 1259 | + # Make backups to be keeped |
| 1260 | + gdb = self.backup_node(backup_dir, 'node', node, gdb=True) |
| 1261 | + gdb.set_breakpoint('backup_files') |
| 1262 | + gdb.run_until_break() |
| 1263 | + |
| 1264 | + sleep(1) |
| 1265 | + |
| 1266 | + self.backup_node(backup_dir, 'node', node, backup_type="page") |
| 1267 | + |
| 1268 | + gdb.remove_all_breakpoints() |
| 1269 | + gdb.continue_execution_until_exit() |
| 1270 | + |
| 1271 | + self.backup_node(backup_dir, 'node', node, backup_type="page") |
| 1272 | + |
| 1273 | + # Purge backups |
| 1274 | + log = self.delete_expired( |
| 1275 | + backup_dir, 'node', options=['--expired', '--wal']) |
| 1276 | + self.assertEqual(len(self.show_pb(backup_dir, 'node')), 2) |
| 1277 | + |
| 1278 | + # Clean after yourself |
| 1279 | + self.del_test_dir(module_name, fname) |
0 commit comments