@@ -692,3 +692,106 @@ def test_delete_multiple_descendants(self):
692
692
693
693
# Clean after yourself
694
694
self .del_test_dir (module_name , fname )
695
+
696
+ # @unittest.skip("skip")
697
+ def test_delete_multiple_descendants_dry_run (self ):
698
+ """
699
+ PAGEa3
700
+ PAGEa2 /
701
+ \ /
702
+ PAGEa1 (delete target)
703
+ |
704
+ FULLa
705
+ """
706
+ fname = self .id ().split ('.' )[3 ]
707
+ node = self .make_simple_node (
708
+ base_dir = os .path .join (module_name , fname , 'node' ),
709
+ initdb_params = ['--data-checksums' ])
710
+
711
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
712
+ self .init_pb (backup_dir )
713
+ self .add_instance (backup_dir , 'node' , node )
714
+ self .set_archiving (backup_dir , 'node' , node )
715
+ node .slow_start ()
716
+
717
+ # Take FULL BACKUP
718
+ node .pgbench_init (scale = 1 )
719
+ backup_id_a = self .backup_node (backup_dir , 'node' , node )
720
+
721
+ pgbench = node .pgbench (options = ['-T' , '10' , '-c' , '2' ])
722
+ pgbench .wait ()
723
+ page_id_a1 = self .backup_node (
724
+ backup_dir , 'node' , node , backup_type = 'page' )
725
+
726
+ pgbench = node .pgbench (options = ['-T' , '10' , '-c' , '2' ])
727
+ pgbench .wait ()
728
+ page_id_a2 = self .backup_node (
729
+ backup_dir , 'node' , node , backup_type = 'page' )
730
+
731
+
732
+ # Change PAGEa2 to ERROR
733
+ self .change_backup_status (backup_dir , 'node' , page_id_a2 , 'ERROR' )
734
+
735
+ pgbench = node .pgbench (options = ['-T' , '10' , '-c' , '2' ])
736
+ pgbench .wait ()
737
+ page_id_a3 = self .backup_node (
738
+ backup_dir , 'node' , node , backup_type = 'page' )
739
+
740
+ # Change PAGEa2 to ERROR
741
+ self .change_backup_status (backup_dir , 'node' , page_id_a2 , 'OK' )
742
+
743
+ # Delete PAGEa1
744
+ output = self .delete_pb (
745
+ backup_dir , 'node' , page_id_a1 ,
746
+ options = ['--dry-run' , '--log-level-console=LOG' , '--delete-wal' ])
747
+
748
+ print (output )
749
+ self .assertIn (
750
+ 'LOG: Backup {0} can be deleted' .format (page_id_a3 ),
751
+ output )
752
+ self .assertIn (
753
+ 'LOG: Backup {0} can be deleted' .format (page_id_a2 ),
754
+ output )
755
+ self .assertIn (
756
+ 'LOG: Backup {0} can be deleted' .format (page_id_a1 ),
757
+ output )
758
+
759
+ self .assertIn (
760
+ 'INFO: Resident data size to free by '
761
+ 'delete of backup {0} :' .format (page_id_a1 ),
762
+ output )
763
+
764
+ self .assertIn (
765
+ 'On timeline 1 WAL segments between 0000000000000001 '
766
+ 'and 0000000000000002 can be removed' ,
767
+ output )
768
+
769
+ self .assertEqual (len (self .show_pb (backup_dir , 'node' )), 4 )
770
+
771
+ output = self .delete_pb (
772
+ backup_dir , 'node' , page_id_a1 ,
773
+ options = ['--log-level-console=LOG' , '--delete-wal' ])
774
+
775
+ self .assertIn (
776
+ 'LOG: Backup {0} will be deleted' .format (page_id_a3 ),
777
+ output )
778
+ self .assertIn (
779
+ 'LOG: Backup {0} will be deleted' .format (page_id_a2 ),
780
+ output )
781
+ self .assertIn (
782
+ 'LOG: Backup {0} will be deleted' .format (page_id_a1 ),
783
+ output )
784
+ self .assertIn (
785
+ 'INFO: Resident data size to free by '
786
+ 'delete of backup {0} :' .format (page_id_a1 ),
787
+ output )
788
+
789
+ self .assertIn (
790
+ 'On timeline 1 WAL segments between 0000000000000001 '
791
+ 'and 0000000000000002 will be removed' ,
792
+ output )
793
+
794
+ self .assertEqual (len (self .show_pb (backup_dir , 'node' )), 1 )
795
+
796
+ # Clean after yourself
797
+ self .del_test_dir (module_name , fname )
0 commit comments