@@ -2365,7 +2365,7 @@ def test_parent_choosing_2(self):
2365
2365
# Clean after yourself
2366
2366
self .del_test_dir (module_name , fname )
2367
2367
2368
- @unittest .skip ("skip" )
2368
+ # @unittest.skip("skip")
2369
2369
def test_backup_with_less_privileges_role (self ):
2370
2370
"""
2371
2371
check permissions correctness from documentation:
@@ -3079,3 +3079,80 @@ def test_incr_backup_filenode_map(self):
3079
3079
3080
3080
# Clean after yourself
3081
3081
self .del_test_dir (module_name , fname )
3082
+
3083
+
3084
+
3085
+ # @unittest.skip("skip")
3086
+ def test_missing_wal_segment (self ):
3087
+ """"""
3088
+ fname = self .id ().split ('.' )[3 ]
3089
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
3090
+ node = self .make_simple_node (
3091
+ base_dir = os .path .join (module_name , fname , 'node' ),
3092
+ set_replication = True ,
3093
+ ptrack_enable = self .ptrack ,
3094
+ initdb_params = ['--data-checksums' ],
3095
+ pg_options = {'archive_timeout' : '30s' })
3096
+
3097
+ self .init_pb (backup_dir )
3098
+ self .add_instance (backup_dir , 'node' , node )
3099
+ self .set_archiving (backup_dir , 'node' , node )
3100
+ node .slow_start ()
3101
+
3102
+ node .pgbench_init (scale = 10 )
3103
+
3104
+ node .safe_psql (
3105
+ 'postgres' ,
3106
+ 'CREATE DATABASE backupdb' )
3107
+
3108
+ # get segments in pg_wal, sort then and remove all but the latest
3109
+ pg_wal_dir = os .path .join (node .data_dir , 'pg_wal' )
3110
+
3111
+ if node .major_version >= 10 :
3112
+ pg_wal_dir = os .path .join (node .data_dir , 'pg_wal' )
3113
+ else :
3114
+ pg_wal_dir = os .path .join (node .data_dir , 'pg_xlog' )
3115
+
3116
+ # Full backup in streaming mode
3117
+ gdb = self .backup_node (
3118
+ backup_dir , 'node' , node , datname = 'backupdb' ,
3119
+ options = ['--stream' , '--log-level-file=INFO' ], gdb = True )
3120
+
3121
+ # break at streaming start
3122
+ gdb .set_breakpoint ('start_WAL_streaming' )
3123
+ gdb .run_until_break ()
3124
+
3125
+ # generate some more data
3126
+ node .pgbench_init (scale = 3 )
3127
+
3128
+ # remove redundant WAL segments in pg_wal
3129
+ files = os .listdir (pg_wal_dir )
3130
+ files .sort (reverse = True )
3131
+
3132
+ # leave first two files in list
3133
+ del files [:2 ]
3134
+ for filename in files :
3135
+ os .remove (os .path .join (pg_wal_dir , filename ))
3136
+
3137
+ gdb .continue_execution_until_exit ()
3138
+
3139
+ self .assertIn (
3140
+ 'unexpected termination of replication stream: ERROR: requested WAL segment' ,
3141
+ gdb .output )
3142
+
3143
+ self .assertIn (
3144
+ 'has already been removed' ,
3145
+ gdb .output )
3146
+
3147
+ self .assertIn (
3148
+ 'ERROR: Interrupted during waiting for WAL streaming' ,
3149
+ gdb .output )
3150
+
3151
+ self .assertIn (
3152
+ 'WARNING: backup in progress, stop backup' ,
3153
+ gdb .output )
3154
+
3155
+ # TODO: check the same for PAGE backup
3156
+
3157
+ # Clean after yourself
3158
+ self .del_test_dir (module_name , fname )
0 commit comments