@@ -11,7 +11,7 @@ class CompatibilityTest(ProbackupTest, unittest.TestCase):
11
11
12
12
# @unittest.expectedFailure
13
13
# @unittest.skip("skip")
14
- def test_show_previous_version_catalog (self ):
14
+ def test_backward_compatibility_page (self ):
15
15
"""Description in jira issue PGPRO-434"""
16
16
fname = self .id ().split ('.' )[3 ]
17
17
backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
@@ -21,7 +21,7 @@ def test_show_previous_version_catalog(self):
21
21
initdb_params = ['--data-checksums' ],
22
22
pg_options = {
23
23
'max_wal_senders' : '2' ,
24
- 'checkpoint_timeout ' : '30s ' }
24
+ 'autovacuum ' : 'off ' }
25
25
)
26
26
self .init_pb (backup_dir , old_binary = True )
27
27
self .show_pb (backup_dir )
@@ -59,13 +59,14 @@ def test_show_previous_version_catalog(self):
59
59
pgdata_restored = self .pgdata_content (node_restored .data_dir )
60
60
self .compare_pgdata (pgdata , pgdata_restored )
61
61
62
- # Incremental BACKUP with old binary
62
+ # Page BACKUP with old binary
63
63
pgbench = node .pgbench (
64
64
stdout = subprocess .PIPE ,
65
65
stderr = subprocess .STDOUT ,
66
- options = ["-c" , "4" , "-T" , "10 " ]
66
+ options = ["-c" , "4" , "-T" , "20 " ]
67
67
)
68
68
pgbench .wait ()
69
+ pgbench .stdout .close ()
69
70
70
71
self .backup_node (
71
72
backup_dir , 'node' , node , backup_type = 'page' ,
@@ -83,13 +84,14 @@ def test_show_previous_version_catalog(self):
83
84
pgdata_restored = self .pgdata_content (node_restored .data_dir )
84
85
self .compare_pgdata (pgdata , pgdata_restored )
85
86
86
- # Incremental BACKUP with new binary
87
+ # Page BACKUP with new binary
87
88
pgbench = node .pgbench (
88
89
stdout = subprocess .PIPE ,
89
90
stderr = subprocess .STDOUT ,
90
- options = ["-c" , "4" , "-T" , "10 " ]
91
+ options = ["-c" , "4" , "-T" , "20 " ]
91
92
)
92
93
pgbench .wait ()
94
+ pgbench .stdout .close ()
93
95
94
96
self .backup_node (
95
97
backup_dir , 'node' , node , backup_type = 'page' ,
@@ -107,3 +109,205 @@ def test_show_previous_version_catalog(self):
107
109
if self .paranoia :
108
110
pgdata_restored = self .pgdata_content (node_restored .data_dir )
109
111
self .compare_pgdata (pgdata , pgdata_restored )
112
+
113
+ # @unittest.expectedFailure
114
+ # @unittest.skip("skip")
115
+ def test_backward_compatibility_delta (self ):
116
+ """Description in jira issue PGPRO-434"""
117
+ fname = self .id ().split ('.' )[3 ]
118
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
119
+ node = self .make_simple_node (
120
+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
121
+ set_replication = True ,
122
+ initdb_params = ['--data-checksums' ],
123
+ pg_options = {
124
+ 'max_wal_senders' : '2' ,
125
+ 'autovacuum' : 'off' }
126
+ )
127
+ self .init_pb (backup_dir , old_binary = True )
128
+ self .show_pb (backup_dir )
129
+
130
+ self .add_instance (backup_dir , 'node' , node , old_binary = True )
131
+ self .show_pb (backup_dir )
132
+
133
+ self .set_archiving (backup_dir , 'node' , node , old_binary = True )
134
+ node .slow_start ()
135
+
136
+ node .pgbench_init (scale = 10 )
137
+
138
+ # FULL backup with old binary
139
+ self .backup_node (
140
+ backup_dir , 'node' , node , old_binary = True )
141
+
142
+ if self .paranoia :
143
+ pgdata = self .pgdata_content (node .data_dir )
144
+
145
+ self .show_pb (backup_dir )
146
+
147
+ self .validate_pb (backup_dir )
148
+
149
+ # RESTORE old FULL with new binary
150
+ node_restored = self .make_simple_node (
151
+ base_dir = "{0}/{1}/node_restored" .format (module_name , fname ))
152
+
153
+ node_restored .cleanup ()
154
+
155
+ self .restore_node (
156
+ backup_dir , 'node' , node_restored ,
157
+ options = ["-j" , "4" , "--recovery-target-action=promote" ])
158
+
159
+ if self .paranoia :
160
+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
161
+ self .compare_pgdata (pgdata , pgdata_restored )
162
+
163
+ # Delta BACKUP with old binary
164
+ pgbench = node .pgbench (
165
+ stdout = subprocess .PIPE ,
166
+ stderr = subprocess .STDOUT ,
167
+ options = ["-c" , "4" , "-T" , "20" ]
168
+ )
169
+ pgbench .wait ()
170
+ pgbench .stdout .close ()
171
+
172
+ self .backup_node (
173
+ backup_dir , 'node' , node , backup_type = 'delta' ,
174
+ old_binary = True )
175
+
176
+ if self .paranoia :
177
+ pgdata = self .pgdata_content (node .data_dir )
178
+
179
+ node_restored .cleanup ()
180
+ self .restore_node (
181
+ backup_dir , 'node' , node_restored ,
182
+ options = ["-j" , "4" , "--recovery-target-action=promote" ])
183
+
184
+ if self .paranoia :
185
+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
186
+ self .compare_pgdata (pgdata , pgdata_restored )
187
+
188
+ # Delta BACKUP with new binary
189
+ pgbench = node .pgbench (
190
+ stdout = subprocess .PIPE ,
191
+ stderr = subprocess .STDOUT ,
192
+ options = ["-c" , "4" , "-T" , "20" ]
193
+ )
194
+ pgbench .wait ()
195
+ pgbench .stdout .close ()
196
+
197
+ self .backup_node (
198
+ backup_dir , 'node' , node , backup_type = 'delta' ,
199
+ options = ['--log-level-file=verbose' ])
200
+
201
+ if self .paranoia :
202
+ pgdata = self .pgdata_content (node .data_dir )
203
+
204
+ node_restored .cleanup ()
205
+
206
+ self .restore_node (
207
+ backup_dir , 'node' , node_restored ,
208
+ options = ["-j" , "4" , "--recovery-target-action=promote" ])
209
+
210
+ if self .paranoia :
211
+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
212
+ self .compare_pgdata (pgdata , pgdata_restored )
213
+
214
+ # @unittest.expectedFailure
215
+ # @unittest.skip("skip")
216
+ def test_backward_compatibility_ptrack (self ):
217
+ """Description in jira issue PGPRO-434"""
218
+ fname = self .id ().split ('.' )[3 ]
219
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
220
+ node = self .make_simple_node (
221
+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
222
+ set_replication = True ,
223
+ initdb_params = ['--data-checksums' ],
224
+ pg_options = {
225
+ 'max_wal_senders' : '2' ,
226
+ 'autovacuum' : 'off' }
227
+ )
228
+ self .init_pb (backup_dir , old_binary = True )
229
+ self .show_pb (backup_dir )
230
+
231
+ self .add_instance (backup_dir , 'node' , node , old_binary = True )
232
+ self .show_pb (backup_dir )
233
+
234
+ self .set_archiving (backup_dir , 'node' , node , old_binary = True )
235
+ node .slow_start ()
236
+
237
+ node .pgbench_init (scale = 10 )
238
+
239
+ # FULL backup with old binary
240
+ self .backup_node (
241
+ backup_dir , 'node' , node , old_binary = True )
242
+
243
+ if self .paranoia :
244
+ pgdata = self .pgdata_content (node .data_dir )
245
+
246
+ self .show_pb (backup_dir )
247
+
248
+ self .validate_pb (backup_dir )
249
+
250
+ # RESTORE old FULL with new binary
251
+ node_restored = self .make_simple_node (
252
+ base_dir = "{0}/{1}/node_restored" .format (module_name , fname ))
253
+
254
+ node_restored .cleanup ()
255
+
256
+ self .restore_node (
257
+ backup_dir , 'node' , node_restored ,
258
+ options = ["-j" , "4" , "--recovery-target-action=promote" ])
259
+
260
+ if self .paranoia :
261
+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
262
+ self .compare_pgdata (pgdata , pgdata_restored )
263
+
264
+ # Delta BACKUP with old binary
265
+ pgbench = node .pgbench (
266
+ stdout = subprocess .PIPE ,
267
+ stderr = subprocess .STDOUT ,
268
+ options = ["-c" , "4" , "-T" , "20" ]
269
+ )
270
+ pgbench .wait ()
271
+ pgbench .stdout .close ()
272
+
273
+ self .backup_node (
274
+ backup_dir , 'node' , node , backup_type = 'delta' ,
275
+ old_binary = True )
276
+
277
+ if self .paranoia :
278
+ pgdata = self .pgdata_content (node .data_dir )
279
+
280
+ node_restored .cleanup ()
281
+ self .restore_node (
282
+ backup_dir , 'node' , node_restored ,
283
+ options = ["-j" , "4" , "--recovery-target-action=promote" ])
284
+
285
+ if self .paranoia :
286
+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
287
+ self .compare_pgdata (pgdata , pgdata_restored )
288
+
289
+ # Delta BACKUP with new binary
290
+ pgbench = node .pgbench (
291
+ stdout = subprocess .PIPE ,
292
+ stderr = subprocess .STDOUT ,
293
+ options = ["-c" , "4" , "-T" , "20" ]
294
+ )
295
+ pgbench .wait ()
296
+ pgbench .stdout .close ()
297
+
298
+ self .backup_node (
299
+ backup_dir , 'node' , node , backup_type = 'delta' ,
300
+ options = ['--log-level-file=verbose' ])
301
+
302
+ if self .paranoia :
303
+ pgdata = self .pgdata_content (node .data_dir )
304
+
305
+ node_restored .cleanup ()
306
+
307
+ self .restore_node (
308
+ backup_dir , 'node' , node_restored ,
309
+ options = ["-j" , "4" , "--recovery-target-action=promote" ])
310
+
311
+ if self .paranoia :
312
+ pgdata_restored = self .pgdata_content (node_restored .data_dir )
313
+ self .compare_pgdata (pgdata , pgdata_restored )
0 commit comments