Skip to content

Commit 75e5496

Browse files
committed
tests: new test tests.merge.MergeTest.test_merge_page_header_map_retry
1 parent 2267d5b commit 75e5496

File tree

1 file changed

+55
-6
lines changed

1 file changed

+55
-6
lines changed

tests/merge.py

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2244,7 +2244,7 @@ def test_merge_multiple_descendants(self):
22442244
repr(e.message), self.cmd))
22452245

22462246
# Clean after yourself
2247-
self.del_test_dir(module_name, fname)
2247+
self.del_test_dir(module_name, fname, [node])
22482248

22492249
# @unittest.skip("skip")
22502250
def test_smart_merge(self):
@@ -2304,7 +2304,7 @@ def test_smart_merge(self):
23042304
logfile_content = f.read()
23052305

23062306
# Clean after yourself
2307-
self.del_test_dir(module_name, fname)
2307+
self.del_test_dir(module_name, fname, [node])
23082308

23092309
def test_idempotent_merge(self):
23102310
"""
@@ -2379,8 +2379,7 @@ def test_idempotent_merge(self):
23792379
self.assertEqual(
23802380
page_id_2, self.show_pb(backup_dir, 'node')[0]['id'])
23812381

2382-
2383-
self.del_test_dir(module_name, fname)
2382+
self.del_test_dir(module_name, fname, [node])
23842383

23852384
def test_merge_correct_inheritance(self):
23862385
"""
@@ -2435,7 +2434,7 @@ def test_merge_correct_inheritance(self):
24352434
page_meta['expire-time'],
24362435
self.show_pb(backup_dir, 'node', page_id)['expire-time'])
24372436

2438-
self.del_test_dir(module_name, fname)
2437+
self.del_test_dir(module_name, fname, [node])
24392438

24402439
def test_merge_correct_inheritance_1(self):
24412440
"""
@@ -2485,7 +2484,7 @@ def test_merge_correct_inheritance_1(self):
24852484
'expire-time',
24862485
self.show_pb(backup_dir, 'node', page_id))
24872486

2488-
self.del_test_dir(module_name, fname)
2487+
self.del_test_dir(module_name, fname, [node])
24892488

24902489
# @unittest.skip("skip")
24912490
# @unittest.expectedFailure
@@ -2603,6 +2602,56 @@ def test_multi_timeline_merge(self):
26032602
'--amcheck',
26042603
'-d', 'postgres', '-p', str(node_restored.port)])
26052604

2605+
# Clean after yourself
2606+
self.del_test_dir(module_name, fname, [node, node_restored])
2607+
2608+
# @unittest.skip("skip")
2609+
# @unittest.expectedFailure
2610+
def test_merge_page_header_map_retry(self):
2611+
"""
2612+
page header map cannot be trusted when
2613+
running retry
2614+
"""
2615+
fname = self.id().split('.')[3]
2616+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
2617+
node = self.make_simple_node(
2618+
base_dir=os.path.join(module_name, fname, 'node'),
2619+
set_replication=True,
2620+
initdb_params=['--data-checksums'],
2621+
pg_options={'autovacuum': 'off'})
2622+
2623+
self.init_pb(backup_dir)
2624+
self.add_instance(backup_dir, 'node', node)
2625+
node.slow_start()
2626+
2627+
node.pgbench_init(scale=20)
2628+
self.backup_node(backup_dir, 'node', node, options=['--stream'])
2629+
2630+
pgbench = node.pgbench(options=['-T', '10', '-c', '1', '--no-vacuum'])
2631+
pgbench.wait()
2632+
2633+
delta_id = self.backup_node(
2634+
backup_dir, 'node', node,
2635+
backup_type='delta', options=['--stream'])
2636+
2637+
pgdata = self.pgdata_content(node.data_dir)
2638+
2639+
gdb = self.merge_backup(backup_dir, 'node', delta_id, gdb=True)
2640+
2641+
# our goal here is to get full backup with merged data files,
2642+
# but with old page header map
2643+
gdb.set_breakpoint('cleanup_header_map')
2644+
gdb.run_until_break()
2645+
gdb._execute('signal SIGKILL')
2646+
2647+
self.merge_backup(backup_dir, 'node', delta_id)
2648+
2649+
node.cleanup()
2650+
2651+
self.restore_node(backup_dir, 'node', node)
2652+
pgdata_restored = self.pgdata_content(node.data_dir)
2653+
self.compare_pgdata(pgdata, pgdata_restored)
2654+
26062655
# Clean after yourself
26072656
self.del_test_dir(module_name, fname)
26082657

0 commit comments

Comments
 (0)