@@ -1264,16 +1264,156 @@ def test_window_error_backups(self):
1264
1264
self .set_archiving (backup_dir , 'node' , node )
1265
1265
node .slow_start ()
1266
1266
1267
- node .pgbench_init (scale = 3 )
1268
-
1269
1267
# Take FULL BACKUPs
1270
1268
backup_id_a1 = self .backup_node (backup_dir , 'node' , node )
1271
- page_id_a2 = self .backup_node (
1269
+ gdb = self .backup_node (
1270
+ backup_dir , 'node' , node , backup_type = 'page' , gdb = True )
1271
+
1272
+ page_id_a3 = self .backup_node (
1272
1273
backup_dir , 'node' , node , backup_type = 'page' )
1273
1274
1274
1275
# Change FULLb backup status to ERROR
1275
1276
self .change_backup_status (backup_dir , 'node' , backup_id_b , 'ERROR' )
1276
1277
1278
+ # Clean after yourself
1279
+ self .del_test_dir (module_name , fname )
1280
+
1281
+ # @unittest.skip("skip")
1282
+ def test_window_error_backups_1 (self ):
1283
+ """
1284
+ DELTA
1285
+ PAGE ERROR
1286
+ FULL
1287
+ -------window
1288
+ """
1289
+ fname = self .id ().split ('.' )[3 ]
1290
+ node = self .make_simple_node (
1291
+ base_dir = os .path .join (module_name , fname , 'node' ),
1292
+ initdb_params = ['--data-checksums' ])
1293
+
1294
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1295
+ self .init_pb (backup_dir )
1296
+ self .add_instance (backup_dir , 'node' , node )
1297
+ self .set_archiving (backup_dir , 'node' , node )
1298
+ node .slow_start ()
1299
+
1300
+ # Take FULL BACKUP
1301
+ full_id = self .backup_node (backup_dir , 'node' , node )
1302
+
1303
+ # Take PAGE BACKUP
1304
+ gdb = self .backup_node (
1305
+ backup_dir , 'node' , node , backup_type = 'page' , gdb = True )
1306
+
1307
+ gdb .set_breakpoint ('pg_stop_backup' )
1308
+ gdb .run_until_break ()
1309
+ gdb .remove_all_breakpoints ()
1310
+ gdb ._execute ('signal SIGINT' )
1311
+ gdb .continue_execution_until_error ()
1312
+
1313
+ page_id = self .show_pb (backup_dir , 'node' )[1 ]['id' ]
1314
+
1315
+ # Take DELTA backup
1316
+ delta_id = self .backup_node (
1317
+ backup_dir , 'node' , node , backup_type = 'delta' ,
1318
+ options = ['--retention-window=2' , '--delete-expired' ])
1319
+
1320
+ # Take FULL BACKUP
1321
+ full2_id = self .backup_node (backup_dir , 'node' , node )
1322
+
1323
+ self .assertEqual (len (self .show_pb (backup_dir , 'node' )), 4 )
1324
+
1325
+ # Clean after yourself
1326
+ self .del_test_dir (module_name , fname )
1327
+
1328
+ # @unittest.skip("skip")
1329
+ def test_window_error_backups_2 (self ):
1330
+ """
1331
+ DELTA
1332
+ PAGE ERROR
1333
+ FULL
1334
+ -------window
1335
+ """
1336
+ fname = self .id ().split ('.' )[3 ]
1337
+ node = self .make_simple_node (
1338
+ base_dir = os .path .join (module_name , fname , 'node' ),
1339
+ initdb_params = ['--data-checksums' ])
1340
+
1341
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1342
+ self .init_pb (backup_dir )
1343
+ self .add_instance (backup_dir , 'node' , node )
1344
+ self .set_archiving (backup_dir , 'node' , node )
1345
+ node .slow_start ()
1346
+
1347
+ # Take FULL BACKUP
1348
+ full_id = self .backup_node (backup_dir , 'node' , node )
1349
+
1350
+ # Take PAGE BACKUP
1351
+ gdb = self .backup_node (
1352
+ backup_dir , 'node' , node , backup_type = 'page' , gdb = True )
1353
+
1354
+ gdb .set_breakpoint ('pg_stop_backup' )
1355
+ gdb .run_until_break ()
1356
+ gdb ._execute ('signal SIGTERM' )
1357
+ gdb .continue_execution_until_error ()
1358
+
1359
+ page_id = self .show_pb (backup_dir , 'node' )[1 ]['id' ]
1360
+
1361
+ # Take DELTA backup
1362
+ delta_id = self .backup_node (
1363
+ backup_dir , 'node' , node , backup_type = 'delta' ,
1364
+ options = ['--retention-window=2' , '--delete-expired' ])
1365
+
1366
+ self .assertEqual (len (self .show_pb (backup_dir , 'node' )), 3 )
1367
+
1368
+ # Clean after yourself
1369
+ # self.del_test_dir(module_name, fname)
1370
+
1371
+ def test_retention_redundancy_overlapping_chains (self ):
1372
+ """"""
1373
+ fname = self .id ().split ('.' )[3 ]
1374
+ node = self .make_simple_node (
1375
+ base_dir = os .path .join (module_name , fname , 'node' ),
1376
+ initdb_params = ['--data-checksums' ])
1377
+
1378
+ if self .get_version (node ) < 90600 :
1379
+ self .del_test_dir (module_name , fname )
1380
+ return unittest .skip ('Skipped because ptrack support is disabled' )
1381
+
1382
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1383
+ self .init_pb (backup_dir )
1384
+ self .add_instance (backup_dir , 'node' , node )
1385
+ self .set_archiving (backup_dir , 'node' , node )
1386
+ node .slow_start ()
1387
+
1388
+ self .set_config (
1389
+ backup_dir , 'node' , options = ['--retention-redundancy=1' ])
1390
+
1391
+ # Make backups to be purged
1392
+ self .backup_node (backup_dir , 'node' , node )
1393
+ self .backup_node (backup_dir , 'node' , node , backup_type = "page" )
1394
+
1395
+ # Make backups to be keeped
1396
+ gdb = self .backup_node (backup_dir , 'node' , node , gdb = True )
1397
+ gdb .set_breakpoint ('backup_files' )
1398
+ gdb .run_until_break ()
1399
+
1400
+ sleep (1 )
1401
+
1402
+ self .backup_node (backup_dir , 'node' , node , backup_type = "page" )
1403
+
1404
+ gdb .remove_all_breakpoints ()
1405
+ gdb .continue_execution_until_exit ()
1406
+
1407
+ self .backup_node (backup_dir , 'node' , node , backup_type = "page" )
1408
+
1409
+ # Purge backups
1410
+ log = self .delete_expired (
1411
+ backup_dir , 'node' , options = ['--expired' , '--wal' ])
1412
+ self .assertEqual (len (self .show_pb (backup_dir , 'node' )), 2 )
1413
+
1414
+ # Clean after yourself
1415
+ self .del_test_dir (module_name , fname )
1416
+
1277
1417
def test_retention_redundancy_overlapping_chains (self ):
1278
1418
""""""
1279
1419
fname = self .id ().split ('.' )[3 ]
0 commit comments