@@ -316,6 +316,159 @@ def test_merge_compressed_and_uncompressed_backups(self):
316
316
node .cleanup ()
317
317
self .del_test_dir (module_name , fname )
318
318
319
+ def test_merge_compressed_and_uncompressed_backups_1 (self ):
320
+ """
321
+ Test MERGE command with compressed and uncompressed backups
322
+ """
323
+ fname = self .id ().split ("." )[3 ]
324
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , "backup" )
325
+
326
+ # Initialize instance and backup directory
327
+ node = self .make_simple_node (
328
+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
329
+ initdb_params = ["--data-checksums" ],
330
+ pg_options = {
331
+ 'autovacuum' : 'off'
332
+ }
333
+ )
334
+
335
+ self .init_pb (backup_dir )
336
+ self .add_instance (backup_dir , "node" , node )
337
+ self .set_archiving (backup_dir , "node" , node )
338
+ node .slow_start ()
339
+
340
+ # Fill with data
341
+ node .pgbench_init (scale = 5 )
342
+
343
+ # Do compressed FULL backup
344
+ self .backup_node (backup_dir , "node" , node , options = [
345
+ '--compress-algorithm=zlib' , '--stream' ])
346
+ show_backup = self .show_pb (backup_dir , "node" )[0 ]
347
+
348
+ self .assertEqual (show_backup ["status" ], "OK" )
349
+ self .assertEqual (show_backup ["backup-mode" ], "FULL" )
350
+
351
+ # Change data
352
+ pgbench = node .pgbench (options = ['-T' , '20' , '-c' , '2' , '--no-vacuum' ])
353
+ pgbench .wait ()
354
+
355
+ # Do uncompressed DELTA backup
356
+ self .backup_node (
357
+ backup_dir , "node" , node , backup_type = "delta" ,
358
+ options = ['--stream' ])
359
+
360
+ # Change data
361
+ pgbench = node .pgbench (options = ['-T' , '20' , '-c' , '2' , '--no-vacuum' ])
362
+ pgbench .wait ()
363
+
364
+ # Do compressed PAGE backup
365
+ self .backup_node (
366
+ backup_dir , "node" , node , backup_type = "page" ,
367
+ options = ['--compress-algorithm=zlib' ])
368
+
369
+ pgdata = self .pgdata_content (node .data_dir )
370
+
371
+ show_backup = self .show_pb (backup_dir , "node" )[2 ]
372
+ page_id = show_backup ["id" ]
373
+
374
+ self .assertEqual (show_backup ["status" ], "OK" )
375
+ self .assertEqual (show_backup ["backup-mode" ], "PAGE" )
376
+
377
+ # Merge all backups
378
+ self .merge_backup (backup_dir , "node" , page_id )
379
+ show_backups = self .show_pb (backup_dir , "node" )
380
+
381
+ self .assertEqual (len (show_backups ), 1 )
382
+ self .assertEqual (show_backups [0 ]["status" ], "OK" )
383
+ self .assertEqual (show_backups [0 ]["backup-mode" ], "FULL" )
384
+
385
+ # Drop node and restore it
386
+ node .cleanup ()
387
+ self .restore_node (backup_dir , 'node' , node )
388
+
389
+ pgdata_restored = self .pgdata_content (node .data_dir )
390
+ self .compare_pgdata (pgdata , pgdata_restored )
391
+
392
+ # Clean after yourself
393
+ node .cleanup ()
394
+ self .del_test_dir (module_name , fname )
395
+
396
+ def test_merge_compressed_and_uncompressed_backups_2 (self ):
397
+ """
398
+ Test MERGE command with compressed and uncompressed backups
399
+ """
400
+ fname = self .id ().split ("." )[3 ]
401
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , "backup" )
402
+
403
+ # Initialize instance and backup directory
404
+ node = self .make_simple_node (
405
+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
406
+ initdb_params = ["--data-checksums" ],
407
+ pg_options = {
408
+ 'autovacuum' : 'off'
409
+ }
410
+ )
411
+
412
+ self .init_pb (backup_dir )
413
+ self .add_instance (backup_dir , "node" , node )
414
+ self .set_archiving (backup_dir , "node" , node )
415
+ node .slow_start ()
416
+
417
+ # Fill with data
418
+ node .pgbench_init (scale = 5 )
419
+
420
+ # Do uncompressed FULL backup
421
+ self .backup_node (backup_dir , "node" , node )
422
+ show_backup = self .show_pb (backup_dir , "node" )[0 ]
423
+
424
+ self .assertEqual (show_backup ["status" ], "OK" )
425
+ self .assertEqual (show_backup ["backup-mode" ], "FULL" )
426
+
427
+ # Change data
428
+ pgbench = node .pgbench (options = ['-T' , '20' , '-c' , '2' , '--no-vacuum' ])
429
+ pgbench .wait ()
430
+
431
+ # Do compressed DELTA backup
432
+ self .backup_node (
433
+ backup_dir , "node" , node , backup_type = "delta" ,
434
+<
2364
/span> options = ['--compress-algorithm=zlib' , '--stream' ])
435
+
436
+ # Change data
437
+ pgbench = node .pgbench (options = ['-T' , '20' , '-c' , '2' , '--no-vacuum' ])
438
+ pgbench .wait ()
439
+
440
+
FC29
# Do uncompressed PAGE backup
441
+ self .backup_node (
442
+ backup_dir , "node" , node , backup_type = "page" )
443
+
444
+ pgdata = self .pgdata_content (node .data_dir )
445
+
446
+ show_backup = self .show_pb (backup_dir , "node" )[2 ]
447
+ page_id = show_backup ["id" ]
448
+
449
+ self .assertEqual (show_backup ["status" ], "OK" )
450
+ self .assertEqual (show_backup ["backup-mode" ], "PAGE" )
451
+
452
+ # Merge all backups
453
+ self .merge_backup (backup_dir , "node" , page_id )
454
+ show_backups = self .show_pb (backup_dir , "node" )
455
+
456
+ self .assertEqual (len (show_backups ), 1 )
457
+ self .assertEqual (show_backups [0 ]["status" ], "OK" )
458
+ self .assertEqual (show_backups [0 ]["backup-mode" ], "FULL" )
459
+
460
+ # Drop node and restore it
461
+ node .cleanup ()
462
+ self .restore_node (backup_dir , 'node' , node )
463
+
464
+ pgdata_restored = self .pgdata_content (node .data_dir )
465
+ self .compare_pgdata (pgdata , pgdata_restored )
466
+
467
+ # Clean after yourself
468
+ node .cleanup ()
469
+ self .del_test_dir (module_name , fname )
470
+
471
+
319
472
# @unittest.skip("skip")
320
473
def test_merge_tablespaces (self ):
321
474
"""
0 commit comments